fix for bug #194918. implement "Tools | Delete Mail Marked as Junk in Folder"

also, enable / disable "Tools | <delete junk> & <run jmc> & <run filters>" when appropriate.
r/sr=bienvenu
This commit is contained in:
sspitzer%netscape.com 2003-03-23 17:03:44 +00:00
Родитель a3b61975f8
Коммит 1448ce285e
7 изменённых файлов: 130 добавлений и 21 удалений

Просмотреть файл

@ -200,6 +200,10 @@ interface nsMsgViewCommandType
const nsMsgViewCommandTypeValue junk = 27; const nsMsgViewCommandTypeValue junk = 27;
const nsMsgViewCommandTypeValue unjunk = 28; const nsMsgViewCommandTypeValue unjunk = 28;
const nsMsgViewCommandTypeValue undeleteMsg = 29; const nsMsgViewCommandTypeValue undeleteMsg = 29;
const nsMsgViewCommandTypeValue applyFilters = 30;
const nsMsgViewCommandTypeValue runJunkControls = 31;
const nsMsgViewCommandTypeValue deleteJunk = 32;
}; };
[scriptable, uuid(65903eb2-1dd2-11b2-ac45-c5b69c1618d7)] [scriptable, uuid(65903eb2-1dd2-11b2-ac45-c5b69c1618d7)]

Просмотреть файл

@ -194,6 +194,9 @@ var DefaultController =
case "cmd_markAsFlagged": case "cmd_markAsFlagged":
case "cmd_markAsJunk": case "cmd_markAsJunk":
case "cmd_markAsNotJunk": case "cmd_markAsNotJunk":
case "cmd_applyFilters":
case "cmd_runJunkControls":
case "cmd_deleteJunk":
case "cmd_label0": case "cmd_label0":
case "cmd_label1": case "cmd_label1":
case "cmd_label2": case "cmd_label2":
@ -309,6 +312,18 @@ var DefaultController =
case "button_file": case "button_file":
case "cmd_file": case "cmd_file":
return (GetNumSelectedMessages() > 0 ); 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 "button_mark":
case "cmd_markAsRead": case "cmd_markAsRead":
case "cmd_markThreadAsRead": case "cmd_markThreadAsRead":
@ -562,7 +577,7 @@ var DefaultController =
MsgMarkThreadAsRead(); MsgMarkThreadAsRead();
return; return;
case "cmd_markAllRead": case "cmd_markAllRead":
gDBView.doCommand(nsMsgViewCommandType.markAllRead); gDBView.doCommand(nsMsgViewCommandType.markAllRead);
return; return;
case "button_junk": case "button_junk":
MsgJunk(); MsgJunk();
@ -574,11 +589,20 @@ var DefaultController =
MsgMarkAsFlagged(null); MsgMarkAsFlagged(null);
return; return;
case "cmd_markAsJunk": case "cmd_markAsJunk":
JunkSelectedMessages(true); JunkSelectedMessages(true);
return; return;
case "cmd_markAsNotJunk": case "cmd_markAsNotJunk":
JunkSelectedMessages(false); JunkSelectedMessages(false);
return; return;
case "cmd_applyFilters":
MsgApplyFilters(null);
return;
case "cmd_runJunkControls":
analyzeFolderForJunk();
return;
case "cmd_deleteJunk":
deleteJunkInFolder();
return;
case "cmd_label0": case "cmd_label0":
gDBView.doCommand(nsMsgViewCommandType.label0); gDBView.doCommand(nsMsgViewCommandType.label0);
return; return;

Просмотреть файл

@ -525,3 +525,55 @@ function JunkSelectedMessages(setAsJunk)
gDBView.doCommand(setAsJunk ? nsMsgViewCommandType.junk gDBView.doCommand(setAsJunk ? nsMsgViewCommandType.junk
: nsMsgViewCommandType.unjunk); : 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);
}

Просмотреть файл

@ -273,8 +273,14 @@ Rights Reserved.
<command id="cmd_label5" oncommand="goDoCommand('cmd_label5');" disabled="true"/> <command id="cmd_label5" oncommand="goDoCommand('cmd_label5');" disabled="true"/>
</commandset> </commandset>
<commandset id="tasksCommands"> <commandset id="tasksCommands"
commandupdater="true"
events="create-menu-tasks"
oncommandupdate="goUpdateMailMenuItems(this)">
<command id="cmd_searchMsgs" oncommand="MsgSearchMessages();"/> <command id="cmd_searchMsgs" oncommand="MsgSearchMessages();"/>
<command id="cmd_applyFilters" oncommand="goDoCommand('cmd_applyFilters');" disabled="true"/>
<command id="cmd_runJunkControls" oncommand="goDoCommand('cmd_runJunkControls');" disabled="true"/>
<command id="cmd_deleteJunk" oncommand="goDoCommand('cmd_deleteJunk');" disabled="true"/>
</commandset> </commandset>
<keyset id="mailKeys"> <keyset id="mailKeys">
@ -1518,7 +1524,7 @@ Rights Reserved.
</menu> </menu>
<menu id="tasksMenu"> <menu id="tasksMenu">
<menupopup id="taskPopup"> <menupopup id="taskPopup" onpopupshowing="document.commandDispatcher.updateCommands('create-menu-tasks')">
<menuitem label="&searchMailCmd.label;" <menuitem label="&searchMailCmd.label;"
key="key_searchMail" key="key_searchMail"
accesskey="&searchMailCmd.accesskey;" accesskey="&searchMailCmd.accesskey;"
@ -1530,10 +1536,10 @@ Rights Reserved.
<menuitem label="&filtersCmd.label;" <menuitem label="&filtersCmd.label;"
accesskey="&filtersCmd.accesskey;" accesskey="&filtersCmd.accesskey;"
oncommand="MsgFilters(null);"/> oncommand="MsgFilters(null);"/>
<menuitem id="filtersApply" <menuitem id="applyFilters"
label="&filtersApply.label;" label="&filtersApply.label;"
accesskey="&filtersApply.accesskey;" accesskey="&filtersApply.accesskey;"
oncommand="MsgApplyFilters(null);"/> observes="cmd_applyFilters"/>
<menuseparator/> <menuseparator/>
<menuitem label="&junkMailCmd.label;" <menuitem label="&junkMailCmd.label;"
accesskey="&junkMailCmd.accesskey;" accesskey="&junkMailCmd.accesskey;"
@ -1541,7 +1547,11 @@ Rights Reserved.
<menuitem id="runJunkControls" <menuitem id="runJunkControls"
label="&runJunkControls.label;" label="&runJunkControls.label;"
accesskey="&runJunkControls.accesskey;" accesskey="&runJunkControls.accesskey;"
oncommand="analyzeFolderForJunk();"/> observes="cmd_runJunkControls"/>
<menuitem id="deleteJunk"
label="&deleteJunk.label;"
accesskey="&deleteJunk.accesskey;"
observes="cmd_deleteJunk"/>
<menuseparator/> <menuseparator/>
<menuitem label="&importCmd.label;" <menuitem label="&importCmd.label;"
accesskey="&importCmd.accesskey;" accesskey="&importCmd.accesskey;"

Просмотреть файл

@ -239,7 +239,6 @@ function IsCurrentLoadedFolder(folder)
function OnLoadMessageWindow() function OnLoadMessageWindow()
{ {
HideMenus(); HideMenus();
DisableMenus();
AddMailOfflineObserver(); AddMailOfflineObserver();
CreateMailWindowGlobals(); CreateMailWindowGlobals();
CreateMessageWindowGlobals(); CreateMessageWindowGlobals();
@ -423,15 +422,6 @@ function HideMenus()
trashSeparator.setAttribute("hidden", "true"); trashSeparator.setAttribute("hidden", "true");
} }
function DisableMenus()
{
var filtersApply = document.getElementById("filtersApply");
filtersApply.setAttribute("disabled","true");
var runJunkControls = document.getElementById("runJunkControls");
runJunkControls.setAttribute("disabled","true");
}
function OnUnloadMessageWindow() function OnUnloadMessageWindow()
{ {
RemoveToolBarPrefListener(); RemoveToolBarPrefListener();
@ -688,6 +678,9 @@ var MessageWindowController =
case "cmd_markAsFlagged": case "cmd_markAsFlagged":
case "cmd_markAsJunk": case "cmd_markAsJunk":
case "cmd_markAsNotJunk": case "cmd_markAsNotJunk":
case "cmd_applyFilters":
case "cmd_runJunkControls":
case "cmd_deleteJunk":
case "cmd_label0": case "cmd_label0":
case "cmd_label1": case "cmd_label1":
case "cmd_label2": case "cmd_label2":
@ -801,7 +794,11 @@ var MessageWindowController =
return loadedFolder.server.canSearchMessages; return loadedFolder.server.canSearchMessages;
case "cmd_undo": case "cmd_undo":
case "cmd_redo": case "cmd_redo":
return SetupUndoRedoCommand(command); return SetupUndoRedoCommand(command);
case "cmd_applyFilters":
case "cmd_runJunkControls":
case "cmd_deleteJunk":
return false;
default: default:
return false; return false;
} }
@ -923,10 +920,10 @@ var MessageWindowController =
MsgMarkAsFlagged(null); MsgMarkAsFlagged(null);
return; return;
case "cmd_markAsJunk": case "cmd_markAsJunk":
JunkSelectedMessages(true); JunkSelectedMessages(true);
return; return;
case "cmd_markAsNotJunk": case "cmd_markAsNotJunk":
JunkSelectedMessages(false); JunkSelectedMessages(false);
return; return;
case "cmd_label0": case "cmd_label0":
gDBView.doCommand(nsMsgViewCommandType.label0); gDBView.doCommand(nsMsgViewCommandType.label0);

Просмотреть файл

@ -526,6 +526,9 @@ Rights Reserved.
<!ENTITY runJunkControls.label "Run Junk Mail Controls on Folder"> <!ENTITY runJunkControls.label "Run Junk Mail Controls on Folder">
<!ENTITY runJunkControls.accesskey "u"> <!ENTITY runJunkControls.accesskey "u">
<!ENTITY deleteJunk.label "Delete Mail Marked as Junk in Folder">
<!ENTITY deleteJunk.accesskey "e">
<!-- junk bar --> <!-- junk bar -->
<!ENTITY junkBarMessage.label "&brandShortName; thinks this message is junk mail"> <!ENTITY junkBarMessage.label "&brandShortName; thinks this message is junk mail">
<!ENTITY notJunkButton.label "This is Not Junk"> <!ENTITY notJunkButton.label "This is Not Junk">

Просмотреть файл

@ -2012,6 +2012,25 @@ NS_IMETHODIMP nsMsgDBView::GetCommandStatus(nsMsgViewCommandTypeValue command, P
*selectable_p = haveSelection; *selectable_p = haveSelection;
} }
break; break;
case nsMsgViewCommandType::applyFilters:
// can't manually run news filters yet
// disable if no messages
// XXX todo, check that we have filters, and at least one is enabled
*selectable_p = GetSize() && !mIsNews;
break;
case nsMsgViewCommandType::runJunkControls:
// disable if no messages
// no JMC on news yet
// XXX todo, check that we have JMC enabled?
*selectable_p = GetSize() && !mIsNews;
break;
case nsMsgViewCommandType::deleteJunk:
{
// disable if no messages, or if we can't delete (like news and certain imap folders)
PRBool canDelete;
*selectable_p = GetSize() && (m_folder && NS_SUCCEEDED(m_folder->GetCanDeleteMessages(&canDelete)) && canDelete);
}
break;
case nsMsgViewCommandType::markMessagesRead: case nsMsgViewCommandType::markMessagesRead:
case nsMsgViewCommandType::markMessagesUnread: case nsMsgViewCommandType::markMessagesUnread:
case nsMsgViewCommandType::toggleMessageRead: case nsMsgViewCommandType::toggleMessageRead: