зеркало из 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 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)]
|
||||
|
|
|
@ -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":
|
||||
|
@ -579,6 +594,15 @@ var DefaultController =
|
|||
case "cmd_markAsNotJunk":
|
||||
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;
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -273,8 +273,14 @@ Rights Reserved.
|
|||
<command id="cmd_label5" oncommand="goDoCommand('cmd_label5');" disabled="true"/>
|
||||
</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_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>
|
||||
|
||||
<keyset id="mailKeys">
|
||||
|
@ -1518,7 +1524,7 @@ Rights Reserved.
|
|||
</menu>
|
||||
|
||||
<menu id="tasksMenu">
|
||||
<menupopup id="taskPopup">
|
||||
<menupopup id="taskPopup" onpopupshowing="document.commandDispatcher.updateCommands('create-menu-tasks')">
|
||||
<menuitem label="&searchMailCmd.label;"
|
||||
key="key_searchMail"
|
||||
accesskey="&searchMailCmd.accesskey;"
|
||||
|
@ -1530,10 +1536,10 @@ Rights Reserved.
|
|||
<menuitem label="&filtersCmd.label;"
|
||||
accesskey="&filtersCmd.accesskey;"
|
||||
oncommand="MsgFilters(null);"/>
|
||||
<menuitem id="filtersApply"
|
||||
<menuitem id="applyFilters"
|
||||
label="&filtersApply.label;"
|
||||
accesskey="&filtersApply.accesskey;"
|
||||
oncommand="MsgApplyFilters(null);"/>
|
||||
observes="cmd_applyFilters"/>
|
||||
<menuseparator/>
|
||||
<menuitem label="&junkMailCmd.label;"
|
||||
accesskey="&junkMailCmd.accesskey;"
|
||||
|
@ -1541,7 +1547,11 @@ Rights Reserved.
|
|||
<menuitem id="runJunkControls"
|
||||
label="&runJunkControls.label;"
|
||||
accesskey="&runJunkControls.accesskey;"
|
||||
oncommand="analyzeFolderForJunk();"/>
|
||||
observes="cmd_runJunkControls"/>
|
||||
<menuitem id="deleteJunk"
|
||||
label="&deleteJunk.label;"
|
||||
accesskey="&deleteJunk.accesskey;"
|
||||
observes="cmd_deleteJunk"/>
|
||||
<menuseparator/>
|
||||
<menuitem label="&importCmd.label;"
|
||||
accesskey="&importCmd.accesskey;"
|
||||
|
|
|
@ -239,7 +239,6 @@ function IsCurrentLoadedFolder(folder)
|
|||
function OnLoadMessageWindow()
|
||||
{
|
||||
HideMenus();
|
||||
DisableMenus();
|
||||
AddMailOfflineObserver();
|
||||
CreateMailWindowGlobals();
|
||||
CreateMessageWindowGlobals();
|
||||
|
@ -423,15 +422,6 @@ function HideMenus()
|
|||
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()
|
||||
{
|
||||
RemoveToolBarPrefListener();
|
||||
|
@ -688,6 +678,9 @@ var MessageWindowController =
|
|||
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":
|
||||
|
@ -802,6 +795,10 @@ var MessageWindowController =
|
|||
case "cmd_undo":
|
||||
case "cmd_redo":
|
||||
return SetupUndoRedoCommand(command);
|
||||
case "cmd_applyFilters":
|
||||
case "cmd_runJunkControls":
|
||||
case "cmd_deleteJunk":
|
||||
return false;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -526,6 +526,9 @@ Rights Reserved.
|
|||
<!ENTITY runJunkControls.label "Run Junk Mail Controls on Folder">
|
||||
<!ENTITY runJunkControls.accesskey "u">
|
||||
|
||||
<!ENTITY deleteJunk.label "Delete Mail Marked as Junk in Folder">
|
||||
<!ENTITY deleteJunk.accesskey "e">
|
||||
|
||||
<!-- junk bar -->
|
||||
<!ENTITY junkBarMessage.label "&brandShortName; thinks this message is junk mail">
|
||||
<!ENTITY notJunkButton.label "This is Not Junk">
|
||||
|
|
|
@ -2012,6 +2012,25 @@ NS_IMETHODIMP nsMsgDBView::GetCommandStatus(nsMsgViewCommandTypeValue command, P
|
|||
*selectable_p = haveSelection;
|
||||
}
|
||||
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::markMessagesUnread:
|
||||
case nsMsgViewCommandType::toggleMessageRead:
|
||||
|
|
Загрузка…
Ссылка в новой задаче