зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
a3b61975f8
Коммит
1448ce285e
|
@ -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":
|
||||||
|
@ -579,6 +594,15 @@ var DefaultController =
|
||||||
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":
|
||||||
|
@ -802,6 +795,10 @@ var MessageWindowController =
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче