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 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":
@ -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;

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

@ -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":
@ -801,7 +794,11 @@ var MessageWindowController =
return loadedFolder.server.canSearchMessages;
case "cmd_undo":
case "cmd_redo":
return SetupUndoRedoCommand(command);
return SetupUndoRedoCommand(command);
case "cmd_applyFilters":
case "cmd_runJunkControls":
case "cmd_deleteJunk":
return false;
default:
return false;
}
@ -923,10 +920,10 @@ var MessageWindowController =
MsgMarkAsFlagged(null);
return;
case "cmd_markAsJunk":
JunkSelectedMessages(true);
JunkSelectedMessages(true);
return;
case "cmd_markAsNotJunk":
JunkSelectedMessages(false);
JunkSelectedMessages(false);
return;
case "cmd_label0":
gDBView.doCommand(nsMsgViewCommandType.label0);

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

@ -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: