diff --git a/mailnews/base/public/nsIMsgDBView.idl b/mailnews/base/public/nsIMsgDBView.idl
index 349828fb5104..bafb404c08b3 100644
--- a/mailnews/base/public/nsIMsgDBView.idl
+++ b/mailnews/base/public/nsIMsgDBView.idl
@@ -200,6 +200,10 @@ interface nsMsgViewCommandType
const nsMsgViewCommandTypeValue junk = 27;
const nsMsgViewCommandTypeValue unjunk = 28;
const nsMsgViewCommandTypeValue undeleteMsg = 29;
+
+ const nsMsgViewCommandTypeValue applyFilters = 30;
+ const nsMsgViewCommandTypeValue runJunkControls = 31;
+ const nsMsgViewCommandTypeValue deleteJunk = 32;
};
[scriptable, uuid(65903eb2-1dd2-11b2-ac45-c5b69c1618d7)]
diff --git a/mailnews/base/resources/content/mail3PaneWindowCommands.js b/mailnews/base/resources/content/mail3PaneWindowCommands.js
index ed3ce9cc0dec..d1ac19d98e23 100644
--- a/mailnews/base/resources/content/mail3PaneWindowCommands.js
+++ b/mailnews/base/resources/content/mail3PaneWindowCommands.js
@@ -194,6 +194,9 @@ var DefaultController =
case "cmd_markAsFlagged":
case "cmd_markAsJunk":
case "cmd_markAsNotJunk":
+ case "cmd_applyFilters":
+ case "cmd_runJunkControls":
+ case "cmd_deleteJunk":
case "cmd_label0":
case "cmd_label1":
case "cmd_label2":
@@ -309,6 +312,18 @@ var DefaultController =
case "button_file":
case "cmd_file":
return (GetNumSelectedMessages() > 0 );
+ case "cmd_applyFilters":
+ if (gDBView)
+ gDBView.getCommandStatus(nsMsgViewCommandType.applyFilters, enabled, checkStatus);
+ return enabled.value;
+ case "cmd_runJunkControls":
+ if (gDBView)
+ gDBView.getCommandStatus(nsMsgViewCommandType.runJunkControls, enabled, checkStatus);
+ return enabled.value;
+ case "cmd_deleteJunk":
+ if (gDBView)
+ gDBView.getCommandStatus(nsMsgViewCommandType.deleteJunk, enabled, checkStatus);
+ return enabled.value;
case "button_mark":
case "cmd_markAsRead":
case "cmd_markThreadAsRead":
@@ -562,7 +577,7 @@ var DefaultController =
MsgMarkThreadAsRead();
return;
case "cmd_markAllRead":
- gDBView.doCommand(nsMsgViewCommandType.markAllRead);
+ gDBView.doCommand(nsMsgViewCommandType.markAllRead);
return;
case "button_junk":
MsgJunk();
@@ -574,11 +589,20 @@ var DefaultController =
MsgMarkAsFlagged(null);
return;
case "cmd_markAsJunk":
- JunkSelectedMessages(true);
+ JunkSelectedMessages(true);
return;
case "cmd_markAsNotJunk":
- JunkSelectedMessages(false);
+ JunkSelectedMessages(false);
return;
+ case "cmd_applyFilters":
+ MsgApplyFilters(null);
+ return;
+ case "cmd_runJunkControls":
+ analyzeFolderForJunk();
+ return;
+ case "cmd_deleteJunk":
+ deleteJunkInFolder();
+ return;
case "cmd_label0":
gDBView.doCommand(nsMsgViewCommandType.label0);
return;
diff --git a/mailnews/base/resources/content/mailCommands.js b/mailnews/base/resources/content/mailCommands.js
index ac4f9e4789c0..0c44b329581d 100644
--- a/mailnews/base/resources/content/mailCommands.js
+++ b/mailnews/base/resources/content/mailCommands.js
@@ -525,3 +525,55 @@ function JunkSelectedMessages(setAsJunk)
gDBView.doCommand(setAsJunk ? nsMsgViewCommandType.junk
: nsMsgViewCommandType.unjunk);
}
+
+function deleteJunkInFolder()
+{
+ var view = GetDBView();
+
+ // need to expand all threads, so we find everything
+ view.doCommand(nsMsgViewCommandType.expandAll);
+
+ var treeView = view.QueryInterface(Components.interfaces.nsITreeView);
+ var count = treeView.rowCount;
+ if (!count)
+ return;
+
+ var treeSelection = treeView.selection;
+
+ var clearedSelection = false;
+
+ // select the junk messages
+ for (var i = 0; i < count; i++)
+ {
+ var messageUri = view.getURIForViewIndex(i);
+ var msgHdr = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);
+ var junkScore = msgHdr.getStringProperty("junkscore");
+ var isJunk = ((junkScore != "") && (junkScore != "0"));
+ // if the message is junk, select it.
+ if (isJunk)
+ {
+ // only do this once
+ if (!clearedSelection)
+ {
+ // clear the current selection
+ // since we will be deleting all selected messages
+ treeSelection.clearSelection();
+ clearedSelection = true;
+ }
+ treeSelection.rangedSelect(i, i, true /* augment */);
+ }
+ }
+
+ // if we didn't clear the selection
+ // there was no junk, so bail.
+ if (!clearedSelection)
+ return;
+
+ // delete the selected messages
+ //
+ // XXX todo
+ // should we try to set next message after delete
+ // to the the previous selected message, if it was not junk?
+ SetNextMessageAfterDelete();
+ view.doCommand(nsMsgViewCommandType.deleteMsg);
+}
\ No newline at end of file
diff --git a/mailnews/base/resources/content/mailWindowOverlay.xul b/mailnews/base/resources/content/mailWindowOverlay.xul
index 244ac9bafeaa..d6272d039b1f 100644
--- a/mailnews/base/resources/content/mailWindowOverlay.xul
+++ b/mailnews/base/resources/content/mailWindowOverlay.xul
@@ -273,8 +273,14 @@ Rights Reserved.
-
+
+
+
+
@@ -1518,7 +1524,7 @@ Rights Reserved.