|
@@ -1,1340 +0,0 @@
|
|
|
-# HG changeset patch
|
|
|
-# User Ian Neal <iann_cvs@blueyonder.co.uk>
|
|
|
-# Date 1603658114 0
|
|
|
-# Parent 002b649f6304edfef7c568a2f54cd3115875ab4a
|
|
|
-Bug 1600103 - Port |Bug 296655 - selection of multiple mailboxes/folders in the folders pane is possible but not usable| to SeaMonkey. r=frg
|
|
|
-Port the relevant changes from:
|
|
|
-* Bug 296655 - selection of multiple mailboxes/folders in the folders pane is possible but not usable
|
|
|
-* Bug 236667 - hide 'Subscribe...' context menu item when not on an account of the proper server type
|
|
|
-* Bug 1210071 - Fix folder contextmenu regression in Bug 236667
|
|
|
-* Bug 39121 - Unspecialize Trash folder for IMAP "Mark as Deleted" & "Remove Immediately" modes
|
|
|
-* Bug 490326 - don't allow sub-folders or saved searches under smart folders inbox
|
|
|
-* Bug 492964 - Get New Messages for <selected account> is trying to get messages for all the accounts when using global inbox
|
|
|
-* Bug 560193 - Allow deleting a saved search under news account
|
|
|
-* Bug 1503734 - Remove needless constants for nsMsgFolderFlags
|
|
|
-* Bug 473642 - the compact button should be disabled for saved searches
|
|
|
-* Bug 496543 - Marks folders as read only marks first folder
|
|
|
-
|
|
|
-diff --git a/mailnews/news/src/nsNntpIncomingServer.cpp b/mailnews/news/src/nsNntpIncomingServer.cpp
|
|
|
---- a/mailnews/news/src/nsNntpIncomingServer.cpp
|
|
|
-+++ b/mailnews/news/src/nsNntpIncomingServer.cpp
|
|
|
-@@ -1468,16 +1468,25 @@ nsNntpIncomingServer::GroupNotFound(nsIM
|
|
|
-
|
|
|
- NS_IMETHODIMP
|
|
|
- nsNntpIncomingServer::SetPrettyNameForGroup(const nsAString& name,
|
|
|
- const nsAString& prettyName) {
|
|
|
- return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
- }
|
|
|
-
|
|
|
- NS_IMETHODIMP
|
|
|
-+nsNntpIncomingServer::GetCanCompactFoldersOnServer(
|
|
|
-+ bool* canCompactFoldersOnServer) {
|
|
|
-+ NS_ENSURE_ARG_POINTER(canCompactFoldersOnServer);
|
|
|
-+ // Initialize canCompactFoldersOnServer false, a default value for NNTP
|
|
|
-+ *canCompactFoldersOnServer = false;
|
|
|
-+ return NS_OK;
|
|
|
-+}
|
|
|
-+
|
|
|
-+NS_IMETHODIMP
|
|
|
- nsNntpIncomingServer::GetCanSearchMessages(bool* canSearchMessages) {
|
|
|
- NS_ENSURE_ARG_POINTER(canSearchMessages);
|
|
|
- *canSearchMessages = true;
|
|
|
- return NS_OK;
|
|
|
- }
|
|
|
-
|
|
|
- NS_IMETHODIMP
|
|
|
- nsNntpIncomingServer::GetOfflineSupportLevel(int32_t* aSupportLevel) {
|
|
|
-diff --git a/mailnews/news/src/nsNntpIncomingServer.h b/mailnews/news/src/nsNntpIncomingServer.h
|
|
|
---- a/mailnews/news/src/nsNntpIncomingServer.h
|
|
|
-+++ b/mailnews/news/src/nsNntpIncomingServer.h
|
|
|
-@@ -53,16 +53,17 @@ class nsNntpIncomingServer : public nsMs
|
|
|
- const nsACString& newName,
|
|
|
- bool hostnameChanged) override;
|
|
|
-
|
|
|
- // for nsMsgLineBuffer
|
|
|
- virtual nsresult HandleLine(const char* line, uint32_t line_size);
|
|
|
-
|
|
|
- // override to clear all passwords associated with server
|
|
|
- NS_IMETHODIMP ForgetPassword() override;
|
|
|
-+ NS_IMETHOD GetCanCompactFoldersOnServer(bool* canCompactFoldersOnServer) override;
|
|
|
- NS_IMETHOD GetCanSearchMessages(bool* canSearchMessages) override;
|
|
|
- NS_IMETHOD GetOfflineSupportLevel(int32_t* aSupportLevel) override;
|
|
|
- NS_IMETHOD GetDefaultCopiesAndFoldersPrefsToServer(
|
|
|
- bool* aCopiesAndFoldersOnServer) override;
|
|
|
- NS_IMETHOD GetCanCreateFoldersOnServer(
|
|
|
- bool* aCanCreateFoldersOnServer) override;
|
|
|
- NS_IMETHOD GetCanFileMessagesOnServer(
|
|
|
- bool* aCanFileMessagesOnServer) override;
|
|
|
-diff --git a/suite/locales/en-US/chrome/mailnews/messenger.properties b/suite/locales/en-US/chrome/mailnews/messenger.properties
|
|
|
---- a/suite/locales/en-US/chrome/mailnews/messenger.properties
|
|
|
-+++ b/suite/locales/en-US/chrome/mailnews/messenger.properties
|
|
|
-@@ -6,23 +6,25 @@
|
|
|
-
|
|
|
- # LOCALIZATION NOTE(statusMessage):
|
|
|
- # Do not translate the words %1$S and %2$S below. Place the word %1$S where the
|
|
|
- # account name should appear and %2$S where the status message should appear.
|
|
|
- # EXAMPLE: Jim's Account: Downloading messages...
|
|
|
- statusMessage=%1$S: %2$S
|
|
|
-
|
|
|
- renameFolder=Rename Folder…
|
|
|
--compactFolder=Compact This Folder
|
|
|
-+compactFolders=Compact This Folder;Compact These Folders
|
|
|
- removeAccount=Delete Account…
|
|
|
- removeFolder=Delete Folder
|
|
|
- newFolderMenuItem=Folder…
|
|
|
- newSubfolderMenuItem=Subfolder…
|
|
|
- newFolder=New Folder…
|
|
|
- newSubfolder=New Subfolder…
|
|
|
-+markFolderRead=Mark Folder Read;Mark Folders Read
|
|
|
-+markNewsgroupRead=Mark Newsgroup Read;Mark Newsgroups Read
|
|
|
- folderProperties=Folder Properties
|
|
|
- getMessages=Get Messages
|
|
|
- getMessagesFor=Get Messages For Account
|
|
|
- # LOCALIZATION NOTE (getNextNewsMessages): Semi-colon list of plural forms.
|
|
|
- # #1 is the number of news messages to get.
|
|
|
- getNextNewsMessages=Get Next #1 News Message;Get Next #1 News Messages
|
|
|
- advanceNextPrompt=Advance to next unread message in %S?
|
|
|
- titleNewsPreHost=on
|
|
|
-@@ -307,16 +309,17 @@ newsAcctType=News
|
|
|
- feedsAcctType=Feeds
|
|
|
-
|
|
|
- # LOCALIZATION NOTE(nocachedbodytitle): Do not translate "<TITLE>" or "</TITLE>" in the line below
|
|
|
- nocachedbodytitle=<TITLE>Go Online to View This Message</TITLE>\n
|
|
|
-
|
|
|
- # mailWindowOverlay.js
|
|
|
- confirmUnsubscribeTitle=Confirm Unsubscribe
|
|
|
- confirmUnsubscribeText=Are you sure you want to unsubscribe from %S?
|
|
|
-+confirmUnsubscribeManyText=Are you sure you want to unsubscribe from these newsgroups?
|
|
|
-
|
|
|
- # msgHdrViewOverlay.js
|
|
|
- deleteAttachments=The following attachments will be permanently deleted from this message:\n%S\nThis action cannot be undone. Do you wish to continue?
|
|
|
- detachAttachments=The following attachments have been successfully saved and will now be permanently deleted from this message:\n%S\nThis action cannot be undone. Do you wish to continue?
|
|
|
- deleteAttachmentFailure=Failed to delete the selected attachments.
|
|
|
-
|
|
|
- # This is the format for prepending accesskeys to the
|
|
|
- # each of the attachments in the file|attachments menu:
|
|
|
-diff --git a/suite/mailnews/content/folderPane.js b/suite/mailnews/content/folderPane.js
|
|
|
---- a/suite/mailnews/content/folderPane.js
|
|
|
-+++ b/suite/mailnews/content/folderPane.js
|
|
|
-@@ -69,17 +69,17 @@ var gFolderTreeController = {
|
|
|
- let folder = aFolder || GetSelectedMsgFolders()[0];
|
|
|
-
|
|
|
- // If a server is selected, view settings for that account.
|
|
|
- if (folder.isServer) {
|
|
|
- MsgAccountManager(null, folder.server);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
-- if (folder.flags & Ci.nsMsgFolderFlags.Virtual) {
|
|
|
-+ if (folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
|
|
|
- // virtual folders get their own property dialog that contains all of the
|
|
|
- // search information related to the virtual folder.
|
|
|
- this.editVirtualFolder(folder);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- let title = gMessengerBundle.getString("folderProperties");
|
|
|
-
|
|
|
-@@ -161,40 +161,41 @@ var gFolderTreeController = {
|
|
|
- * if the selected folder/s happen to be nntp.
|
|
|
- *
|
|
|
- * @param aFolder (optional) the folder to delete, if not the selected one
|
|
|
- */
|
|
|
- deleteFolder(aFolder) {
|
|
|
- let folders = aFolder ? [aFolder] : GetSelectedMsgFolders();
|
|
|
- let prompt = Services.prompt;
|
|
|
- for (let folder of folders) {
|
|
|
-+ // For newsgroups, "delete" means "unsubscribe".
|
|
|
-+ if (folder.server.type == "nntp" &&
|
|
|
-+ !folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
|
|
|
-+ MsgUnsubscribe([folder]);
|
|
|
-+ continue;
|
|
|
-+ }
|
|
|
-+
|
|
|
- let canDelete = folder.isSpecialFolder(Ci.nsMsgFolderFlags.Junk, false) ?
|
|
|
- CanRenameDeleteJunkMail(folder.URI) : folder.deletable;
|
|
|
- if (!canDelete)
|
|
|
- continue;
|
|
|
-
|
|
|
-- if (folder.flags & Ci.nsMsgFolderFlags.Virtual) {
|
|
|
-+ if (folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
|
|
|
- let confirmation = gMessengerBundle.getString("confirmSavedSearchDeleteMessage");
|
|
|
- let title = gMessengerBundle.getString("confirmSavedSearchDeleteTitle");
|
|
|
- let buttonTitle = gMessengerBundle.getString("confirmSavedSearchDeleteButton");
|
|
|
- let buttonFlags = prompt.BUTTON_TITLE_IS_STRING * prompt.BUTTON_POS_0 +
|
|
|
- prompt.BUTTON_TITLE_CANCEL * prompt.BUTTON_POS_1;
|
|
|
- if (prompt.confirmEx(window, title, confirmation, buttonFlags, buttonTitle,
|
|
|
- "", "", "", {}) != 0) /* the yes button is in position 0 */
|
|
|
- continue;
|
|
|
- if (gCurrentVirtualFolderUri == folder.URI)
|
|
|
- gCurrentVirtualFolderUri = null;
|
|
|
- }
|
|
|
-
|
|
|
-- if (isNewsURI(folder.URI)) {
|
|
|
-- if (ConfirmUnsubscribe(folder))
|
|
|
-- UnSubscribe(folder);
|
|
|
-- continue;
|
|
|
-- }
|
|
|
--
|
|
|
- // We can delete this folder.
|
|
|
- try {
|
|
|
- folder.deleteSelf(msgWindow);
|
|
|
- }
|
|
|
- // Ignore known errors from canceled warning dialogs.
|
|
|
- catch (ex) {
|
|
|
- const NS_MSG_ERROR_COPY_FOLDER_ABORTED = 0x8055001a;
|
|
|
- if (ex.result != NS_MSG_ERROR_COPY_FOLDER_ABORTED) {
|
|
|
-@@ -248,38 +249,55 @@ var gFolderTreeController = {
|
|
|
-
|
|
|
- // Now delete the messages.
|
|
|
- let messages = Array.from(fixIterator(folder.messages));
|
|
|
- let children = toXPCOMArray(messages, Ci.nsIMutableArray);
|
|
|
- folder.deleteMessages(children, msgWindow, true, false, null, false);
|
|
|
- },
|
|
|
-
|
|
|
- /**
|
|
|
-- * Compacts either a particular folder, or all folders
|
|
|
-+ * Compacts either particular folder/s, or selected folders.
|
|
|
- *
|
|
|
-- * @param aCompactAll - whether we should compact all folders
|
|
|
-- * @param aFolder (optional) the folder to compact, if different than the
|
|
|
-- * currently selected one
|
|
|
-+ * @param aFolders (optional) the folders to compact, if different than the
|
|
|
-+ * currently selected ones
|
|
|
- */
|
|
|
-- compactFolder(aCompactAll, aFolder) {
|
|
|
-- let folder = aFolder || GetSelectedMsgFolders()[0];
|
|
|
-- let isImapFolder = folder.server.type == "imap";
|
|
|
-- // Can't compact folders that have just been compacted
|
|
|
-- if (!isImapFolder && !folder.expungedBytes && !aCompactAll)
|
|
|
-- return;
|
|
|
-+ compactFolders(aFolders) {
|
|
|
-+ let folders = aFolders || GetSelectedMsgFolders();
|
|
|
-+ for (let folder of folders) {
|
|
|
-+ let isImapFolder = folder.server.type == "imap";
|
|
|
-+ // Can't compact folders that have just been compacted
|
|
|
-+ if (!isImapFolder && !folder.expungedBytes)
|
|
|
-+ return;
|
|
|
-+
|
|
|
-+ // Reset thread pane for non-imap folders.
|
|
|
-+ if (!isImapFolder && gDBView && gDBView.msgFolder == folder) {
|
|
|
-+ this._resetThreadPane();
|
|
|
-+ }
|
|
|
-
|
|
|
-- // Reset thread pane for non-imap folders.
|
|
|
-- if (!isImapFolder && gDBView &&
|
|
|
-- (gDBView.msgFolder == folder || aCompactAll)) {
|
|
|
-- this._resetThreadPane();
|
|
|
-+ folder.compact(null, msgWindow);
|
|
|
- }
|
|
|
-- if (aCompactAll)
|
|
|
-- folder.compactAll(null, msgWindow, isImapFolder || folder.server.type == "nntp");
|
|
|
-- else
|
|
|
-- folder.compact(null, msgWindow);
|
|
|
-+ },
|
|
|
-+ /**
|
|
|
-+ * Compacts all folders for accounts that the given folders belong
|
|
|
-+ * to, or all folders for accounts of the currently selected folders.
|
|
|
-+ *
|
|
|
-+ * @param aFolders (optional) the folders for whose accounts we should compact
|
|
|
-+ * all folders, if different than the currently
|
|
|
-+ * selected ones
|
|
|
-+ */
|
|
|
-+ compactAllFoldersForAccount(aFolders) {
|
|
|
-+ let folders = aFolders || GetSelectedMsgFolders();
|
|
|
-+ for (let folder of folders) {
|
|
|
-+ let isImapFolder = folder.server.type == "imap";
|
|
|
-+ folder.compactAll(null, msgWindow, isImapFolder ||
|
|
|
-+ folder.server.type == "nntp");
|
|
|
-+ // Reset thread pane for non-imap folders.
|
|
|
-+ if (gDBView && !isImapFolder)
|
|
|
-+ this._resetThreadPane();
|
|
|
-+ }
|
|
|
- },
|
|
|
-
|
|
|
- /**
|
|
|
- * Opens the dialog to create a new virtual folder
|
|
|
- *
|
|
|
- * @param aName - the default name for the new folder
|
|
|
- * @param aSearchTerms - the search terms associated with the folder
|
|
|
- * @param aParent - the folder to run the search terms on
|
|
|
-diff --git a/suite/mailnews/content/mail3PaneWindowCommands.js b/suite/mailnews/content/mail3PaneWindowCommands.js
|
|
|
---- a/suite/mailnews/content/mail3PaneWindowCommands.js
|
|
|
-+++ b/suite/mailnews/content/mail3PaneWindowCommands.js
|
|
|
-@@ -46,38 +46,29 @@ var FolderPaneController =
|
|
|
- {
|
|
|
- case "cmd_cut":
|
|
|
- case "cmd_copy":
|
|
|
- case "cmd_paste":
|
|
|
- return false;
|
|
|
- case "cmd_delete":
|
|
|
- case "cmd_shiftDelete":
|
|
|
- case "button_delete":
|
|
|
-+ case "button_shiftDelete":
|
|
|
-+ {
|
|
|
- // Make sure the button doesn't show "Undelete" for folders.
|
|
|
-- if (command == "button_delete")
|
|
|
-- UpdateDeleteToolbarButton(true);
|
|
|
-- case "button_shiftDelete":
|
|
|
-- if ( command == "cmd_delete" )
|
|
|
-- goSetMenuValue(command, 'valueFolder');
|
|
|
-+ UpdateDeleteToolbarButton(true);
|
|
|
- let folders = GetSelectedMsgFolders();
|
|
|
--
|
|
|
- if (folders.length) {
|
|
|
- let folder = folders[0];
|
|
|
-- let canDeleteThisFolder = CanDeleteFolder(folder);
|
|
|
-- if (folder.server.type == "nntp") {
|
|
|
-- if ( command == "cmd_delete" ) {
|
|
|
-- goSetMenuValue(command, 'valueNewsgroup');
|
|
|
-- goSetAccessKey(command, 'valueNewsgroupAccessKey');
|
|
|
-- }
|
|
|
-- }
|
|
|
-- return canDeleteThisFolder && isCommandEnabled(command);
|
|
|
-+ // XXX Figure out some better way/place to update the folder labels.
|
|
|
-+ UpdateDeleteLabelsFromFolderCommand(folder, command);
|
|
|
-+ return CanDeleteFolder(folder) && folder.isCommandEnabled(command);
|
|
|
- }
|
|
|
-- else
|
|
|
-- return false;
|
|
|
--
|
|
|
-+ return false;
|
|
|
-+ }
|
|
|
- default:
|
|
|
- return false;
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- doCommand: function(command)
|
|
|
- {
|
|
|
- // if the user invoked a key short cut then it is possible that we got here for a command which is
|
|
|
-@@ -95,16 +86,30 @@ var FolderPaneController =
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- onEvent: function(event)
|
|
|
- {
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
-+function UpdateDeleteLabelsFromFolderCommand(folder, command) {
|
|
|
-+ if (command != "cmd_delete")
|
|
|
-+ return;
|
|
|
-+
|
|
|
-+ if (folder.server.type == "nntp" &&
|
|
|
-+ !folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
|
|
|
-+ goSetMenuValue(command, "valueNewsgroup");
|
|
|
-+ goSetAccessKey(command, "valueNewsgroupAccessKey");
|
|
|
-+ }
|
|
|
-+ else {
|
|
|
-+ goSetMenuValue(command, "valueFolder");
|
|
|
-+ }
|
|
|
-+}
|
|
|
-+
|
|
|
- // DefaultController object (handles commands when one of the trees does not have focus)
|
|
|
- var DefaultController =
|
|
|
- {
|
|
|
- supportsCommand: function(command)
|
|
|
- {
|
|
|
-
|
|
|
- switch ( command )
|
|
|
- {
|
|
|
-@@ -405,17 +410,21 @@ var DefaultController =
|
|
|
- return gDBView && !(GetSelectedMsgFolders()[0].flags &
|
|
|
- Ci.nsMsgFolderFlags.Virtual);
|
|
|
- case "cmd_stop":
|
|
|
- return true;
|
|
|
- case "cmd_undo":
|
|
|
- case "cmd_redo":
|
|
|
- return SetupUndoRedoCommand(command);
|
|
|
- case "cmd_renameFolder":
|
|
|
-- return IsRenameFolderEnabled();
|
|
|
-+ {
|
|
|
-+ let folders = GetSelectedMsgFolders();
|
|
|
-+ return folders.length == 1 && folders[0].canRename &&
|
|
|
-+ folders[0].isCommandEnabled("cmd_renameFolder");
|
|
|
-+ }
|
|
|
- case "cmd_sendUnsentMsgs":
|
|
|
- return IsSendUnsentMsgsEnabled(null);
|
|
|
- case "cmd_subscribe":
|
|
|
- return IsSubscribeEnabled();
|
|
|
- case "cmd_properties":
|
|
|
- return IsPropertiesEnabled(command);
|
|
|
- case "button_getNewMessages":
|
|
|
- case "cmd_getNewMessages":
|
|
|
-@@ -425,17 +434,25 @@ var DefaultController =
|
|
|
- return IsGetNextNMessagesEnabled();
|
|
|
- case "cmd_emptyTrash":
|
|
|
- {
|
|
|
- let folder = GetSelectedMsgFolders()[0];
|
|
|
- return folder && folder.server.canEmptyTrashOnExit ?
|
|
|
- IsMailFolderSelected() : false;
|
|
|
- }
|
|
|
- case "cmd_compactFolder":
|
|
|
-- return IsCompactFolderEnabled();
|
|
|
-+ {
|
|
|
-+ let folders = GetSelectedMsgFolders();
|
|
|
-+ let canCompactAll = function canCompactAll(folder) {
|
|
|
-+ return folder.server.canCompactFoldersOnServer &&
|
|
|
-+ !folder.getFlag(Ci.nsMsgFolderFlags.Virtual) &&
|
|
|
-+ folder.isCommandEnabled("cmd_compactFolder");
|
|
|
-+ }
|
|
|
-+ return folders && folders.every(canCompactAll);
|
|
|
-+ }
|
|
|
- case "cmd_setFolderCharset":
|
|
|
- return IsFolderCharsetEnabled();
|
|
|
- case "cmd_downloadFlagged":
|
|
|
- return !Services.io.offline;
|
|
|
- case "cmd_downloadSelected":
|
|
|
- return IsFolderSelected() && !Services.io.offline &&
|
|
|
- GetNumSelectedMessages() > 0;
|
|
|
- case "cmd_synchronizeOffline":
|
|
|
-@@ -690,17 +707,17 @@ var DefaultController =
|
|
|
- return;
|
|
|
- case "cmd_deleteJunk":
|
|
|
- deleteJunkInFolder();
|
|
|
- return;
|
|
|
- case "cmd_emptyTrash":
|
|
|
- gFolderTreeController.emptyTrash();
|
|
|
- return;
|
|
|
- case "cmd_compactFolder":
|
|
|
-- gFolderTreeController.compactFolder(true);
|
|
|
-+ gFolderTreeController.compactAllFoldersForAccount();
|
|
|
- return;
|
|
|
- case "cmd_downloadFlagged":
|
|
|
- MsgDownloadFlagged();
|
|
|
- break;
|
|
|
- case "cmd_downloadSelected":
|
|
|
- MsgDownloadSelected();
|
|
|
- break;
|
|
|
- case "cmd_synchronizeOffline":
|
|
|
-@@ -856,39 +873,37 @@ function IsSubscribeEnabled()
|
|
|
- // such an account is selected.
|
|
|
- let preselectedFolder = GetFirstSelectedMsgFolder();
|
|
|
- if (preselectedFolder && preselectedFolder.server.type == "rss")
|
|
|
- return true;
|
|
|
-
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
--function IsRenameFolderEnabled()
|
|
|
--{
|
|
|
-- let folders = GetSelectedMsgFolders();
|
|
|
-- return folders.length == 1 && folders[0].canRename &&
|
|
|
-- isCommandEnabled("cmd_renameFolder");
|
|
|
--}
|
|
|
--
|
|
|
- function IsFolderCharsetEnabled()
|
|
|
- {
|
|
|
- return IsFolderSelected();
|
|
|
- }
|
|
|
-
|
|
|
- function IsPropertiesEnabled(command)
|
|
|
- {
|
|
|
- let folders = GetSelectedMsgFolders();
|
|
|
- if (!folders.length)
|
|
|
- return false;
|
|
|
-
|
|
|
- let folder = folders[0];
|
|
|
- // When servers are selected, it should be "Edit | Properties...".
|
|
|
-- goSetMenuValue(command,
|
|
|
-- folder.isServer ? "valueGeneric" :
|
|
|
-- isNewsURI(folder.URI) ? "valueNewsgroup" : "valueFolder");
|
|
|
-+ if (folder.isServer) {
|
|
|
-+ goSetMenuValue(command, "valueGeneric");
|
|
|
-+ } else if (folder.server.type == "nntp" &&
|
|
|
-+ !folder.getFlag(Ci.nsMsgFolderFlags.Virtual)) {
|
|
|
-+ goSetMenuValue(command, "valueNewsgroup");
|
|
|
-+ } else {
|
|
|
-+ goSetMenuValue(command, "valueFolder");
|
|
|
-+ }
|
|
|
-
|
|
|
- return folders.length == 1;
|
|
|
- }
|
|
|
-
|
|
|
- function IsViewNavigationItemEnabled()
|
|
|
- {
|
|
|
- return IsFolderSelected();
|
|
|
- }
|
|
|
-@@ -958,31 +973,16 @@ function SetFocusThreadPane()
|
|
|
- function SetFocusMessagePane()
|
|
|
- {
|
|
|
- // XXX hack: to clear the focus on the previous element first focus
|
|
|
- // on the message pane element then focus on the main content window
|
|
|
- GetMessagePane().focus();
|
|
|
- GetMessagePaneFrame().focus();
|
|
|
- }
|
|
|
-
|
|
|
--function isCommandEnabled(cmd)
|
|
|
--{
|
|
|
-- var selectedFolders = GetSelectedMsgFolders();
|
|
|
-- var numFolders = selectedFolders.length;
|
|
|
-- if(numFolders !=1)
|
|
|
-- return false;
|
|
|
--
|
|
|
-- var folder = selectedFolders[0];
|
|
|
-- if (!folder)
|
|
|
-- return false;
|
|
|
-- else
|
|
|
-- return folder.isCommandEnabled(cmd);
|
|
|
--
|
|
|
--}
|
|
|
--
|
|
|
- //
|
|
|
- // This function checks if the configured junk mail can be renamed or deleted.
|
|
|
- //
|
|
|
- function CanRenameDeleteJunkMail(aFolderUri)
|
|
|
- {
|
|
|
- if (!aFolderUri)
|
|
|
- return false;
|
|
|
-
|
|
|
-diff --git a/suite/mailnews/content/mailCommands.js b/suite/mailnews/content/mailCommands.js
|
|
|
---- a/suite/mailnews/content/mailCommands.js
|
|
|
-+++ b/suite/mailnews/content/mailCommands.js
|
|
|
-@@ -1,32 +1,15 @@
|
|
|
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
|
- * This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
- * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
-
|
|
|
- var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
|
|
-
|
|
|
--function GetNewMessages(selectedFolders, server)
|
|
|
--{
|
|
|
-- if (!selectedFolders.length)
|
|
|
-- return;
|
|
|
--
|
|
|
-- var msgFolder = selectedFolders[0];
|
|
|
--
|
|
|
-- // Whenever we do get new messages, clear the old new messages.
|
|
|
-- if (msgFolder)
|
|
|
-- {
|
|
|
-- var nsIMsgFolder = Ci.nsIMsgFolder;
|
|
|
-- msgFolder.biffState = nsIMsgFolder.nsMsgBiffState_NoMail;
|
|
|
-- msgFolder.clearNewMessages();
|
|
|
-- }
|
|
|
-- server.getNewMessages(msgFolder, msgWindow, null);
|
|
|
--}
|
|
|
--
|
|
|
- /**
|
|
|
- * Get the identity that most likely is the best one to use, given the hint.
|
|
|
- * @param {Array<nsIMsgIdentity> identities The candidates to pick from.
|
|
|
- * @param {String} optionalHint String containing comma separated mailboxes
|
|
|
- */
|
|
|
- function getBestIdentity(identities, optionalHint)
|
|
|
- {
|
|
|
- let identityCount = identities.length;
|
|
|
-@@ -256,27 +239,16 @@ function NewMessageToSelectedAddresses(t
|
|
|
- }
|
|
|
- composeFields.to = addressList.join(",");
|
|
|
- params.composeFields = composeFields;
|
|
|
- msgComposeService.OpenComposeWindowWithParams(null, params);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
--function UnSubscribe(folder)
|
|
|
--{
|
|
|
-- // Unsubscribe the current folder from the newsserver, this assumes any confirmation has already
|
|
|
-- // been made by the user SPL
|
|
|
--
|
|
|
-- var server = folder.server;
|
|
|
-- var subscribableServer = server.QueryInterface(Ci.nsISubscribableServer);
|
|
|
-- subscribableServer.unsubscribe(folder.name);
|
|
|
-- subscribableServer.commitSubscribeChanges();
|
|
|
--}
|
|
|
--
|
|
|
- function Subscribe(preselectedMsgFolder)
|
|
|
- {
|
|
|
- window.openDialog("chrome://messenger/content/subscribe.xul",
|
|
|
- "subscribe", "chrome,modal,titlebar,resizable=yes",
|
|
|
- {folder:preselectedMsgFolder,
|
|
|
- okCallback:SubscribeOKCallback});
|
|
|
- }
|
|
|
-
|
|
|
-diff --git a/suite/mailnews/content/mailContextMenus.js b/suite/mailnews/content/mailContextMenus.js
|
|
|
---- a/suite/mailnews/content/mailContextMenus.js
|
|
|
-+++ b/suite/mailnews/content/mailContextMenus.js
|
|
|
-@@ -1,14 +1,17 @@
|
|
|
- /* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
- /* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
- * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
-
|
|
|
- const {MailServices} = ChromeUtils.import("resource:///modules/MailServices.jsm");
|
|
|
-+const {PluralForm} = ChromeUtils.import("resource://gre/modules/PluralForm.jsm");
|
|
|
-+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
|
|
-+
|
|
|
-
|
|
|
- //NOTE: gMessengerBundle must be defined and set or this Overlay won't work
|
|
|
-
|
|
|
- /**
|
|
|
- * Function to change the highlighted row back to the row that is currently
|
|
|
- * outline/dotted without loading the contents of either rows. This is
|
|
|
- * triggered when the context menu for a given row is hidden/closed
|
|
|
- * (onpopuphiding).
|
|
|
-@@ -249,176 +252,231 @@ function FolderPaneOnPopupHiding()
|
|
|
- {
|
|
|
- RestoreSelectionWithoutContentLoad(GetFolderTree());
|
|
|
- }
|
|
|
-
|
|
|
- function FillFolderPaneContextMenu()
|
|
|
- {
|
|
|
- let folders = GetSelectedMsgFolders();
|
|
|
- let numSelected = folders.length;
|
|
|
-- if (numSelected != 1)
|
|
|
-+ if (!numSelected)
|
|
|
- return false;
|
|
|
-
|
|
|
-+ function checkIsVirtualFolder(folder) {
|
|
|
-+ return folder.getFlag(Ci.nsMsgFolderFlags.Virtual);
|
|
|
-+ }
|
|
|
-+ let haveAnyVirtualFolders = folders.some(checkIsVirtualFolder);
|
|
|
-+
|
|
|
-+ function checkIsServer(folder) {
|
|
|
-+ return folder.isServer;
|
|
|
-+ }
|
|
|
-+ let selectedServers = folders.filter(checkIsServer);
|
|
|
-+
|
|
|
- let folder = folders[0];
|
|
|
- let isServer = folder.isServer;
|
|
|
- let serverType = folder.server.type;
|
|
|
-- let specialFolder = getSpecialFolderString(folder);
|
|
|
-- var canSubscribeToFolder = (serverType == "nntp") ||
|
|
|
-- (serverType == "imap") ||
|
|
|
-- (serverType == "rss");
|
|
|
-- var isNewsgroup = !isServer && serverType == 'nntp';
|
|
|
-- var isMailFolder = !isServer && serverType != 'nntp';
|
|
|
-- var isVirtualFolder = (specialFolder == "Virtual");
|
|
|
-- const kTrashFlag = Ci.nsMsgFolderFlags.Trash;
|
|
|
-- let isChildOfTrash = folder.isSpecialFolder(kTrashFlag, true);
|
|
|
-- var canGetMessages =
|
|
|
-- (isServer && serverType != "none") ||
|
|
|
-- isNewsgroup ||
|
|
|
-- ((serverType == "rss") && !isChildOfTrash && !isVirtualFolder);
|
|
|
-+ let specialFolder = haveAnyVirtualFolders ? "Virtual" :
|
|
|
-+ getSpecialFolderString(folder);
|
|
|
-+
|
|
|
-+ function checkCanSubscribeToFolder(folder) {
|
|
|
-+ if (checkIsVirtualFolder(folder))
|
|
|
-+ return false;
|
|
|
-+
|
|
|
-+ // All feed account folders, besides Trash, are subscribable.
|
|
|
-+ if (folder.server.type == "rss" &&
|
|
|
-+ !folder.getFlag(Ci.nsMsgFolderFlags.Trash))
|
|
|
-+ return true;
|
|
|
-+
|
|
|
-+ // We only want the subscribe item on the account nodes.
|
|
|
-+ if (!folder.isServer)
|
|
|
-+ return false;
|
|
|
-+
|
|
|
-+ return folder.server.type == "nntp" ||
|
|
|
-+ folder.server.type == "imap";
|
|
|
-+ }
|
|
|
-+ let haveOnlySubscribableFolders = folders.every(checkCanSubscribeToFolder);
|
|
|
-
|
|
|
-- if (!isServer)
|
|
|
-- {
|
|
|
-+ function checkIsNewsgroup(folder) {
|
|
|
-+ return !folder.isServer && folder.server.type == "nntp" &&
|
|
|
-+ !folder.getFlag(Ci.nsMsgFolderFlags.Virtual);
|
|
|
-+ }
|
|
|
-+ let haveOnlyNewsgroups = folders.every(checkIsNewsgroup);
|
|
|
-+
|
|
|
-+ function checkIsMailFolder(folder) {
|
|
|
-+ return !folder.isServer && folder.server.type != "nntp";
|
|
|
-+ }
|
|
|
-+ let haveOnlyMailFolders = folders.every(checkIsMailFolder);
|
|
|
-+
|
|
|
-+ function checkCanGetMessages(folder) {
|
|
|
-+ return (folder.isServer && (folder.server.type != "none")) ||
|
|
|
-+ checkIsNewsgroup(folder) ||
|
|
|
-+ ((folder.server.type == "rss") &&
|
|
|
-+ !folder.isSpecialFolder(Ci.nsMsgFolderFlags.Trash, true) &&
|
|
|
-+ !checkIsVirtualFolder(folder));
|
|
|
-+ }
|
|
|
-+ let selectedFoldersThatCanGetMessages = folders.filter(checkCanGetMessages);
|
|
|
-+
|
|
|
-+ // --- Set up folder properties / account settings menu item.
|
|
|
-+ if (numSelected != 1) {
|
|
|
-+ ShowMenuItem("folderPaneContext-settings", false);
|
|
|
-+ ShowMenuItem("folderPaneContext-properties", false);
|
|
|
-+ }
|
|
|
-+ else if (selectedServers.length != 1) {
|
|
|
- ShowMenuItem("folderPaneContext-settings", false);
|
|
|
- ShowMenuItem("folderPaneContext-properties", true);
|
|
|
-- EnableMenuItem("folderPaneContext-properties", true);
|
|
|
- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-+ else {
|
|
|
- ShowMenuItem("folderPaneContext-properties", false);
|
|
|
- ShowMenuItem("folderPaneContext-settings", true);
|
|
|
-- EnableMenuItem("folderPaneContext-settings", true);
|
|
|
- }
|
|
|
-
|
|
|
-- if ((numSelected <= 1) && canGetMessages)
|
|
|
-- if (isServer)
|
|
|
-+ // --- Set up the get messages menu item.
|
|
|
-+ // Show if only servers, or it's only newsgroups/feeds. We could mix,
|
|
|
-+ // but it gets messy for situations where both server and a folder
|
|
|
-+ // on the server are selected.
|
|
|
-+ let showGet = selectedFoldersThatCanGetMessages.length == numSelected;
|
|
|
-+ ShowMenuItem("folderPaneContext-getMessages", showGet);
|
|
|
-+ if (showGet) {
|
|
|
-+ if (selectedServers.length > 0 &&
|
|
|
-+ selectedServers.length == selectedFoldersThatCanGetMessages.length) {
|
|
|
- SetMenuItemLabel("folderPaneContext-getMessages",
|
|
|
- gMessengerBundle.getString("getMessagesFor"));
|
|
|
-- else
|
|
|
-+ }
|
|
|
-+ else {
|
|
|
- SetMenuItemLabel("folderPaneContext-getMessages",
|
|
|
- gMessengerBundle.getString("getMessages"));
|
|
|
--
|
|
|
-- ShowMenuItem("folderPaneContext-getMessages", (numSelected <= 1) && canGetMessages);
|
|
|
-- EnableMenuItem("folderPaneContext-getMessages", true);
|
|
|
--
|
|
|
-- ShowMenuItem("folderPaneContext-sep4", (numSelected <= 1) && isServer);
|
|
|
-- ShowMenuItem("folderPaneContext-markAllFoldersRead", (numSelected <= 1) && isServer);
|
|
|
--
|
|
|
-- ShowMenuItem("folderPaneContext-openNewWindow", (numSelected <= 1));
|
|
|
-- EnableMenuItem("folderPaneContext-openNewWindow", true);
|
|
|
-+ }
|
|
|
-+ }
|
|
|
-
|
|
|
-- ShowMenuItem("folderPaneContext-openNewTab", (numSelected <= 1));
|
|
|
-- EnableMenuItem("folderPaneContext-openNewTab", true);
|
|
|
--
|
|
|
-- SetupRenameMenuItem(folder, numSelected, isServer, serverType, specialFolder);
|
|
|
-- SetupRemoveMenuItem(folder, numSelected, isServer, serverType, specialFolder);
|
|
|
-- SetupCompactMenuItem(folder, numSelected);
|
|
|
-- SetupFavoritesMenuItem(folder, numSelected, isServer, "folderPaneContext-favoriteFolder");
|
|
|
--
|
|
|
-- ShowMenuItem("folderPaneContext-emptyTrash", (numSelected <= 1) && (specialFolder == 'Trash'));
|
|
|
-- EnableMenuItem("folderPaneContext-emptyTrash", true);
|
|
|
-- ShowMenuItem("folderPaneContext-emptyJunk", (numSelected <= 1) && (specialFolder == 'Junk'));
|
|
|
-- EnableMenuItem("folderPaneContext-emptyJunk", true);
|
|
|
-+ // --- Setup the Mark All Folders Read menu item.
|
|
|
-+ // Show only in case the server item is selected.
|
|
|
-+ ShowMenuItem("folderPaneContext-markAllFoldersRead",
|
|
|
-+ selectedServers.length > 0);
|
|
|
-
|
|
|
-- var showSendUnsentMessages = (numSelected <= 1) && (specialFolder == 'Outbox');
|
|
|
-- ShowMenuItem("folderPaneContext-sendUnsentMessages", showSendUnsentMessages);
|
|
|
-- if (showSendUnsentMessages)
|
|
|
-- EnableMenuItem("folderPaneContext-sendUnsentMessages", IsSendUnsentMsgsEnabled(folder));
|
|
|
--
|
|
|
-- ShowMenuItem("folderPaneContext-sep-edit", (numSelected <= 1));
|
|
|
--
|
|
|
-- SetupNewMenuItem(folder, numSelected, isServer, serverType, specialFolder);
|
|
|
--
|
|
|
-- ShowMenuItem("folderPaneContext-subscribe", (numSelected <= 1) && canSubscribeToFolder && !isVirtualFolder);
|
|
|
-- EnableMenuItem("folderPaneContext-subscribe", true);
|
|
|
-+ // --- Set up new sub/folder menu item.
|
|
|
-+ let isInbox = specialFolder == "Inbox";
|
|
|
-+ let showNew =
|
|
|
-+ (numSelected == 1) &&
|
|
|
-+ ((serverType != "nntp" && folder.canCreateSubfolders) || isInbox);
|
|
|
-+ ShowMenuItem("folderPaneContext-new", showNew);
|
|
|
-+ if (showNew) {
|
|
|
-+ EnableMenuItem("folderPaneContext-new",
|
|
|
-+ serverType != "imap" || !Services.io.offline);
|
|
|
-+ let label = (isServer || isInbox) ? "newFolder" : "newSubfolder";
|
|
|
-+ SetMenuItemLabel("folderPaneContext-new",
|
|
|
-+ gMessengerBundle.getString(label));
|
|
|
-+ }
|
|
|
-
|
|
|
-- ShowMenuItem("folderPaneContext-sep1", (numSelected <= 1) && !isServer);
|
|
|
--// News folder context menu =============================================
|
|
|
--
|
|
|
-- ShowMenuItem("folderPaneContext-newsUnsubscribe", (numSelected <= 1) && canSubscribeToFolder && isNewsgroup);
|
|
|
-- EnableMenuItem("folderPaneContext-newsUnsubscribe", true);
|
|
|
-- ShowMenuItem("folderPaneContext-markNewsgroupAllRead", (numSelected <= 1) && isNewsgroup);
|
|
|
-- EnableMenuItem("folderPaneContext-markNewsgroupAllRead", true);
|
|
|
--
|
|
|
--// End of News folder context menu =======================================
|
|
|
--
|
|
|
-- ShowMenuItem("folderPaneContext-markMailFolderAllRead", (numSelected <= 1) && isMailFolder && !isVirtualFolder);
|
|
|
-- EnableMenuItem("folderPaneContext-markMailFolderAllRead", true);
|
|
|
-+ // --- Set up rename menu item.
|
|
|
-+ let canRename = (numSelected == 1) && !isServer && folder.canRename &&
|
|
|
-+ (specialFolder == "none" || specialFolder == "Virtual" ||
|
|
|
-+ (specialFolder == "Junk" &&
|
|
|
-+ CanRenameDeleteJunkMail(folder.URI)));
|
|
|
-+ ShowMenuItem("folderPaneContext-rename", canRename);
|
|
|
-+ if (canRename) {
|
|
|
-+ EnableMenuItem("folderPaneContext-rename",
|
|
|
-+ !isServer && folder.isCommandEnabled("cmd_renameFolder"));
|
|
|
-+ SetMenuItemLabel("folderPaneContext-rename",
|
|
|
-+ gMessengerBundle.getString("renameFolder"));
|
|
|
-+ }
|
|
|
-
|
|
|
-- ShowMenuItem("folderPaneContext-searchMessages", (numSelected <= 1) && !isVirtualFolder);
|
|
|
-- goUpdateCommand('cmd_search');
|
|
|
--
|
|
|
-- return(true);
|
|
|
--}
|
|
|
-+ // --- Set up the delete folder menu item.
|
|
|
-+ function checkCanDeleteFolder(folder) {
|
|
|
-+ if (folder.isSpecialFolder(Ci.nsMsgFolderFlags.Junk, false))
|
|
|
-+ return CanRenameDeleteJunkMail(folder.URI);
|
|
|
-+ return folder.deletable;
|
|
|
-+ }
|
|
|
-+ let haveOnlyDeletableFolders = folders.every(checkCanDeleteFolder);
|
|
|
-+ ShowMenuItem("folderPaneContext-remove",
|
|
|
-+ haveOnlyDeletableFolders && numSelected == 1);
|
|
|
-+ if (haveOnlyDeletableFolders && numSelected == 1)
|
|
|
-+ SetMenuItemLabel("folderPaneContext-remove",
|
|
|
-+ gMessengerBundle.getString("removeFolder"));
|
|
|
-
|
|
|
--function SetupRenameMenuItem(msgFolder, numSelected, isServer, serverType, specialFolder)
|
|
|
--{
|
|
|
-- var canRename = (specialFolder == "Junk") ?
|
|
|
-- CanRenameDeleteJunkMail(msgFolder.URI) : msgFolder.canRename;
|
|
|
-- ShowMenuItem("folderPaneContext-rename", (numSelected <= 1) && canRename);
|
|
|
-- EnableMenuItem("folderPaneContext-rename", !isServer && msgFolder.isCommandEnabled("cmd_renameFolder"));
|
|
|
--
|
|
|
-- if (canRename)
|
|
|
-- SetMenuItemLabel("folderPaneContext-rename", gMessengerBundle.getString("renameFolder"));
|
|
|
--}
|
|
|
--
|
|
|
--function SetupRemoveMenuItem(msgFolder, numSelected, isServer, serverType, specialFolder)
|
|
|
--{
|
|
|
-- var isMail = serverType != 'nntp';
|
|
|
-- var canDelete = (specialFolder == "Junk") ?
|
|
|
-- CanRenameDeleteJunkMail(msgFolder.URI) : msgFolder.deletable;
|
|
|
--
|
|
|
-- var showRemove = (numSelected <=1) && isMail && canDelete;
|
|
|
-+ function checkIsDeleteEnabled(folder) {
|
|
|
-+ return folder.isCommandEnabled("cmd_delete");
|
|
|
-+ }
|
|
|
-+ let haveOnlyDeleteEnabledFolders = folders.every(checkIsDeleteEnabled);
|
|
|
-+ EnableMenuItem("folderPaneContext-remove", haveOnlyDeleteEnabledFolders);
|
|
|
-
|
|
|
-- ShowMenuItem("folderPaneContext-remove", showRemove);
|
|
|
-- if (showRemove)
|
|
|
-- EnableMenuItem("folderPaneContext-remove", msgFolder.isCommandEnabled("cmd_delete"));
|
|
|
-- if (canDelete)
|
|
|
-- SetMenuItemLabel("folderPaneContext-remove", gMessengerBundle.getString("removeFolder"));
|
|
|
--}
|
|
|
--
|
|
|
--function SetupCompactMenuItem(folder, numSelected)
|
|
|
--{
|
|
|
-- let canCompact = folder.canCompact;
|
|
|
-- ShowMenuItem("folderPaneContext-compact", numSelected <= 1 && canCompact);
|
|
|
-- EnableMenuItem("folderPaneContext-compact", folder.isCommandEnabled("cmd_compactFolder"));
|
|
|
-+ // --- Set up the compact folder menu item.
|
|
|
-+ function checkCanCompactFolder(folder) {
|
|
|
-+ return folder.canCompact &&
|
|
|
-+ !folder.getFlag(Ci.nsMsgFolderFlags.Virtual) &&
|
|
|
-+ folder.isCommandEnabled("cmd_compactFolder");
|
|
|
-+ }
|
|
|
-+ let haveOnlyCompactableFolders = folders.every(checkCanCompactFolder);
|
|
|
-+ ShowMenuItem("folderPaneContext-compact", haveOnlyCompactableFolders);
|
|
|
-+ if (haveOnlyCompactableFolders)
|
|
|
-+ SetMenuItemLabel("folderPaneContext-compact",
|
|
|
-+ PluralForm.get(numSelected, gMessengerBundle.getString("compactFolders")));
|
|
|
-
|
|
|
-- if (canCompact)
|
|
|
-- SetMenuItemLabel("folderPaneContext-compact", gMessengerBundle.getString("compactFolder"));
|
|
|
--}
|
|
|
-+ function checkIsCompactEnabled(folder) {
|
|
|
-+ return folder.isCommandEnabled("cmd_compactFolder");
|
|
|
-+ }
|
|
|
-+ let haveOnlyCompactEnabledFolders = folders.every(checkIsCompactEnabled);
|
|
|
-+ EnableMenuItem("folderPaneContext-compact", haveOnlyCompactEnabledFolders);
|
|
|
-
|
|
|
--function SetupFavoritesMenuItem(folder, numSelected, isServer, menuItemId)
|
|
|
--{
|
|
|
-- var showItem = !isServer && (numSelected <=1);
|
|
|
-- ShowMenuItem(menuItemId, showItem);
|
|
|
--
|
|
|
-- // adjust the checked state on the menu
|
|
|
-- if (showItem)
|
|
|
-- {
|
|
|
-- document.getElementById(menuItemId)
|
|
|
-+ // --- Set up favorite folder menu item.
|
|
|
-+ let showFavorite = (numSelected == 1) && !isServer;
|
|
|
-+ ShowMenuItem("folderPaneContext-favoriteFolder", showFavorite);
|
|
|
-+ if (showFavorite) {
|
|
|
-+ // Adjust the checked state on the menu item.
|
|
|
-+ document.getElementById("folderPaneContext-favoriteFolder")
|
|
|
- .setAttribute("checked",
|
|
|
- folder.getFlag(Ci.nsMsgFolderFlags.Favorite));
|
|
|
- }
|
|
|
--}
|
|
|
-+
|
|
|
-+ // --- Set up the empty trash menu item.
|
|
|
-+ ShowMenuItem("folderPaneContext-emptyTrash",
|
|
|
-+ numSelected == 1 && specialFolder == "Trash");
|
|
|
-+
|
|
|
-+ // --- Set up the empty junk menu item.
|
|
|
-+ ShowMenuItem("folderPaneContext-emptyJunk",
|
|
|
-+ numSelected == 1 && specialFolder == "Junk");
|
|
|
-
|
|
|
--function SetupNewMenuItem(folder, numSelected, isServer, serverType, specialFolder)
|
|
|
--{
|
|
|
-- var isInbox = specialFolder == "Inbox";
|
|
|
-+ // --- Set up the send unsent messages menu item.
|
|
|
-+ let showSendUnsentMessages = numSelected == 1 && specialFolder == "Outbox";
|
|
|
-+ ShowMenuItem("folderPaneContext-sendUnsentMessages", showSendUnsentMessages);
|
|
|
-+ if (showSendUnsentMessages)
|
|
|
-+ EnableMenuItem("folderPaneContext-sendUnsentMessages",
|
|
|
-+ IsSendUnsentMsgsEnabled(folder));
|
|
|
-+
|
|
|
-+ // --- Set up the subscribe menu item.
|
|
|
-+ ShowMenuItem("folderPaneContext-subscribe",
|
|
|
-+ numSelected == 1 && haveOnlySubscribableFolders);
|
|
|
-+
|
|
|
-+ // --- Set up the unsubscribe menu item.
|
|
|
-+ ShowMenuItem("folderPaneContext-newsUnsubscribe", haveOnlyNewsgroups);
|
|
|
-
|
|
|
-- let showNew = (numSelected <= 1 && serverType != "nntp" &&
|
|
|
-- folder.canCreateSubfolders) || isInbox;
|
|
|
-- ShowMenuItem("folderPaneContext-new", showNew);
|
|
|
-- EnableMenuItem("folderPaneContext-new",
|
|
|
-- folder.server.type != "imap" || !Services.io.offline);
|
|
|
-- if (showNew)
|
|
|
-- {
|
|
|
-- if (isServer || isInbox)
|
|
|
-- SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newFolder"));
|
|
|
-- else
|
|
|
-- SetMenuItemLabel("folderPaneContext-new", gMessengerBundle.getString("newSubfolder"));
|
|
|
-- }
|
|
|
-+ // --- Set up the mark newsgroup/s read menu item.
|
|
|
-+ ShowMenuItem("folderPaneContext-markNewsgroupAllRead", haveOnlyNewsgroups);
|
|
|
-+ SetMenuItemLabel("folderPaneContext-markNewsgroupAllRead",
|
|
|
-+ PluralForm.get(numSelected, gMessengerBundle.getString("markNewsgroupRead")));
|
|
|
-+
|
|
|
-+ // --- Set up the mark folder/s read menu item.
|
|
|
-+ ShowMenuItem("folderPaneContext-markMailFolderAllRead",
|
|
|
-+ haveOnlyMailFolders && !haveAnyVirtualFolders);
|
|
|
-+ SetMenuItemLabel("folderPaneContext-markMailFolderAllRead",
|
|
|
-+ PluralForm.get(numSelected, gMessengerBundle.getString("markFolderRead")));
|
|
|
-+
|
|
|
-+ // Set up the search menu item.
|
|
|
-+ ShowMenuItem("folderPaneContext-searchMessages",
|
|
|
-+ numSelected == 1 && !haveAnyVirtualFolders);
|
|
|
-+ goUpdateCommand('cmd_search');
|
|
|
-+
|
|
|
-+ ShowMenuItem("folderPaneContext-openNewWindow", numSelected == 1);
|
|
|
-+ ShowMenuItem("folderPaneContext-openNewTab", numSelected == 1);
|
|
|
-+
|
|
|
-+ // Hide / Show our menu separators based on the menu items we are showing.
|
|
|
-+ ShowMenuItem("folderPaneContext-sep-edit", numSelected == 1);
|
|
|
-+ ShowMenuItem("folderPaneContext-sep1", selectedServers.length == 0);
|
|
|
-+ ShowMenuItem("folderPaneContext-sep4", selectedServers.length > 0);
|
|
|
-+
|
|
|
-+ return true;
|
|
|
- }
|
|
|
-
|
|
|
- function ShowMenuItem(id, showItem)
|
|
|
- {
|
|
|
- var item = document.getElementById(id);
|
|
|
- if(item && item.hidden != "true")
|
|
|
- item.hidden = !showItem;
|
|
|
- }
|
|
|
-@@ -704,19 +762,18 @@ function CheckForMessageIdInFolder(folde
|
|
|
- {
|
|
|
- messageHeader = messageDatabase.getMsgHdrForMessageID(messageId);
|
|
|
- }
|
|
|
- catch (ex)
|
|
|
- {
|
|
|
- dump("Failed to find message-id in folder!");
|
|
|
- }
|
|
|
-
|
|
|
-- const nsMsgFolderFlags = Ci.nsMsgFolderFlags;
|
|
|
- if (!MailServices.mailSession.IsFolderOpenInWindow(folder) &&
|
|
|
-- !(folder.flags & (nsMsgFolderFlags.Trash | nsMsgFolderFlags.Inbox)))
|
|
|
-+ !folder.getFlag(Ci.nsMsgFolderFlags.Trash | Ci.nsMsgFolderFlags.Inbox))
|
|
|
- {
|
|
|
- folder.msgDatabase = null;
|
|
|
- }
|
|
|
-
|
|
|
- return messageHeader;
|
|
|
- }
|
|
|
-
|
|
|
- // CreateFilter opens the Message Filters and Filter Rules dialogs.
|
|
|
-diff --git a/suite/mailnews/content/mailWindowOverlay.js b/suite/mailnews/content/mailWindowOverlay.js
|
|
|
---- a/suite/mailnews/content/mailWindowOverlay.js
|
|
|
-+++ b/suite/mailnews/content/mailWindowOverlay.js
|
|
|
-@@ -41,41 +41,42 @@ var gDisallow_classes_no_html = 1; /* th
|
|
|
- if HTML is not allowed. I assume, that the user could have set this to a
|
|
|
- value > 1 in his prefs.js or user.js, but that the value will not
|
|
|
- change during runtime other than through the MsgBody*() functions below.*/
|
|
|
-
|
|
|
- // Disable the File | New | Account... menu item if the account preference is locked.
|
|
|
- // Two other affected areas are the account central and the account manager dialogs.
|
|
|
- function menu_new_init()
|
|
|
- {
|
|
|
-+ let folders = GetSelectedMsgFolders();
|
|
|
-+ if (folders.length != 1)
|
|
|
-+ return;
|
|
|
-+
|
|
|
-+ let folder = folders[0];
|
|
|
-+
|
|
|
- if (!gMessengerBundle)
|
|
|
- gMessengerBundle = document.getElementById("bundle_messenger");
|
|
|
-
|
|
|
-- var newAccountItem = document.getElementById('newAccountMenuItem');
|
|
|
- if (Services.prefs.prefIsLocked("mail.disable_new_account_addition"))
|
|
|
-- newAccountItem.setAttribute("disabled","true");
|
|
|
--
|
|
|
-- // Change New Folder... menu according to the context
|
|
|
-- var folderArray = GetSelectedMsgFolders();
|
|
|
-- if (folderArray.length == 0)
|
|
|
-- return;
|
|
|
-- var msgFolder = folderArray[0];
|
|
|
-- var isServer = msgFolder.isServer;
|
|
|
-- var serverType = msgFolder.server.type;
|
|
|
-- var canCreateNew = msgFolder.canCreateSubfolders;
|
|
|
-- var isInbox = msgFolder.isSpecialFolder(
|
|
|
-- Ci.nsMsgFolderFlags.Inbox, false);
|
|
|
-- var isIMAPFolder = serverType == "imap";
|
|
|
-- var showNew = ((serverType != 'nntp') && canCreateNew) || isInbox;
|
|
|
-+ document.getElementById("newAccountMenuItem")
|
|
|
-+ .setAttribute("disabled", "true");
|
|
|
-+
|
|
|
-+ let isInbox = folder.isSpecialFolder(Ci.nsMsgFolderFlags.Inbox, false);
|
|
|
-+ let showNew = folder.canCreateSubfolders ||
|
|
|
-+ (isInbox && !(folder.flags & Ci.nsMsgFolderFlags.Virtual));
|
|
|
- ShowMenuItem("menu_newFolder", showNew);
|
|
|
- ShowMenuItem("menu_newVirtualFolder", showNew);
|
|
|
-- EnableMenuItem("menu_newFolder", !isIMAPFolder || !Services.io.offline);
|
|
|
-- EnableMenuItem("menu_newVirtualFolder", true);
|
|
|
-- if (showNew)
|
|
|
-- SetMenuItemLabel("menu_newFolder", gMessengerBundle.getString((isServer || isInbox) ? "newFolderMenuItem" : "newSubfolderMenuItem"));
|
|
|
-+ EnableMenuItem("menu_newFolder", folder.server.type != "imap" ||
|
|
|
-+ !Services.io.offline);
|
|
|
-+ if (showNew) {
|
|
|
-+ // Change "New Folder..." menu according to the context.
|
|
|
-+ let label = (folder.isServer || isInbox) ? "newFolderMenuItem" :
|
|
|
-+ "newSubfolderMenuItem";
|
|
|
-+ SetMenuItemLabel("menu_newFolder", gMessengerBundle.getString(label));
|
|
|
-+ }
|
|
|
- }
|
|
|
-
|
|
|
- function goUpdateMailMenuItems(commandset)
|
|
|
- {
|
|
|
- for (var i = 0; i < commandset.childNodes.length; i++)
|
|
|
- {
|
|
|
- var commandID = commandset.childNodes[i].getAttribute("id");
|
|
|
- if (commandID)
|
|
|
-@@ -887,17 +888,17 @@ function GetMessagesForInboxOnServer(ser
|
|
|
- var inboxFolder = GetInboxFolder(server);
|
|
|
-
|
|
|
- // If the server doesn't support an inbox it could be an RSS server or
|
|
|
- // some other server type, just use the root folder and the server
|
|
|
- // implementation can figure out what to do.
|
|
|
- if (!inboxFolder)
|
|
|
- inboxFolder = server.rootFolder;
|
|
|
-
|
|
|
-- GetNewMessages([inboxFolder], server);
|
|
|
-+ GetNewMsgs(server, inboxFolder);
|
|
|
- }
|
|
|
-
|
|
|
- function MsgGetMessage()
|
|
|
- {
|
|
|
- // if offline, prompt for getting messages
|
|
|
- if (DoGetNewMailWhenOffline())
|
|
|
- GetFolderMessages();
|
|
|
- }
|
|
|
-@@ -1428,33 +1429,50 @@ function MsgSubscribe(folder)
|
|
|
- var preselectedFolder = folder || GetFirstSelectedMsgFolder();
|
|
|
-
|
|
|
- if (preselectedFolder && preselectedFolder.server.type == "rss")
|
|
|
- openSubscriptionsDialog(preselectedFolder); // open feed subscription dialog
|
|
|
- else
|
|
|
- Subscribe(preselectedFolder); // open imap/nntp subscription dialog
|
|
|
- }
|
|
|
-
|
|
|
--function ConfirmUnsubscribe(folder)
|
|
|
--{
|
|
|
-- if (!gMessengerBundle)
|
|
|
-- gMessengerBundle = document.getElementById("bundle_messenger");
|
|
|
--
|
|
|
-- var titleMsg = gMessengerBundle.getString("confirmUnsubscribeTitle");
|
|
|
-- var dialogMsg = gMessengerBundle.getFormattedString("confirmUnsubscribeText",
|
|
|
-- [folder.name], 1);
|
|
|
-- return Services.prompt.confirm(window, titleMsg, dialogMsg);
|
|
|
-+/**
|
|
|
-+ * Show a confirmation dialog - check if the user really want to unsubscribe
|
|
|
-+ * from the given newsgroup/s.
|
|
|
-+ * @folders an array of newsgroup folders to unsubscribe from
|
|
|
-+ * @return true if the user said it's ok to unsubscribe
|
|
|
-+ */
|
|
|
-+function ConfirmUnsubscribe(folders) {
|
|
|
-+ if (!gMessengerBundle)
|
|
|
-+ gMessengerBundle = document.getElementById("bundle_messenger");
|
|
|
-+
|
|
|
-+ let titleMsg = gMessengerBundle.getString("confirmUnsubscribeTitle");
|
|
|
-+ let dialogMsg = (folders.length == 1) ?
|
|
|
-+ gMessengerBundle.getFormattedString("confirmUnsubscribeText",
|
|
|
-+ [folders[0].name], 1) :
|
|
|
-+ gMessengerBundle.getString("confirmUnsubscribeManyText");
|
|
|
-+
|
|
|
-+ return Services.prompt.confirm(window, titleMsg, dialogMsg);
|
|
|
- }
|
|
|
-
|
|
|
--function MsgUnsubscribe()
|
|
|
--{
|
|
|
-- var folder = GetFirstSelectedMsgFolder();
|
|
|
-- if (ConfirmUnsubscribe(folder)) {
|
|
|
-- UnSubscribe(folder);
|
|
|
-- }
|
|
|
-+/**
|
|
|
-+ * Unsubscribe from selected or passed in newsgroup/s.
|
|
|
-+ * @param newsgroups (optional param) the newsgroup folders to unsubscribe from
|
|
|
-+ */
|
|
|
-+function MsgUnsubscribe(newsgroups) {
|
|
|
-+ let folders = newsgroups || GetSelectedMsgFolders();
|
|
|
-+ if (!ConfirmUnsubscribe(folders))
|
|
|
-+ return;
|
|
|
-+
|
|
|
-+ for (let folder of folders) {
|
|
|
-+ let subscribableServer =
|
|
|
-+ folder.server.QueryInterface(Ci.nsISubscribableServer);
|
|
|
-+ subscribableServer.unsubscribe(folder.name);
|
|
|
-+ subscribableServer.commitSubscribeChanges();
|
|
|
-+ }
|
|
|
- }
|
|
|
-
|
|
|
- function ToggleFavoriteFolderFlag()
|
|
|
- {
|
|
|
- var folder = GetFirstSelectedMsgFolder();
|
|
|
- folder.toggleFlag(Ci.nsMsgFolderFlags.Favorite);
|
|
|
- }
|
|
|
-
|
|
|
-@@ -1490,34 +1508,34 @@ function MsgOpenFromFile()
|
|
|
- let uri = fp.fileURL.QueryInterface(Ci.nsIURL);
|
|
|
- uri.query = "type=application/x-message-display";
|
|
|
-
|
|
|
- window.openDialog("chrome://messenger/content/messageWindow.xul", "_blank",
|
|
|
- "all,chrome,dialog=no,status,toolbar", uri);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
--function MsgOpenNewWindowForFolder(uri, key)
|
|
|
--{
|
|
|
-- var uriToOpen = uri;
|
|
|
-- var keyToSelect = key;
|
|
|
--
|
|
|
-- if (!uriToOpen)
|
|
|
-- // Use GetSelectedMsgFolders() to find out which message to open instead of
|
|
|
-- // GetLoadedMsgFolder().URI. This is required because on a right-click, the
|
|
|
-- // currentIndex value will be different from the actual row that is
|
|
|
-- // highlighted. GetSelectedMsgFolders() will return the message that is
|
|
|
-- // highlighted.
|
|
|
-- uriToOpen = GetSelectedMsgFolders()[0].URI;
|
|
|
--
|
|
|
-- if (uriToOpen) {
|
|
|
-- // get the messenger window open service and ask it to open a new window for us
|
|
|
-- var mailWindowService = Cc["@mozilla.org/messenger/windowservice;1"].getService(Ci.nsIMessengerWindowService);
|
|
|
-- if (mailWindowService)
|
|
|
-- mailWindowService.openMessengerWindowWithUri("mail:3pane", uriToOpen, keyToSelect);
|
|
|
-+function MsgOpenNewWindowForFolder(folderURI, msgKeyToSelect) {
|
|
|
-+ let mailWindowService = Cc["@mozilla.org/messenger/windowservice;1"]
|
|
|
-+ .getService(Ci.nsIMessengerWindowService);
|
|
|
-+ if (!mailWindowService)
|
|
|
-+ return;
|
|
|
-+
|
|
|
-+ if (folderURI) {
|
|
|
-+ mailWindowService.openMessengerWindowWithUri("mail:3pane", folderURI,
|
|
|
-+ msgKeyToSelect);
|
|
|
-+ return;
|
|
|
-+ }
|
|
|
-+
|
|
|
-+ // If there is a right-click happening, GetSelectedMsgFolders()
|
|
|
-+ // will tell us about it (while the selection's currentIndex would reflect
|
|
|
-+ // the node that was selected/displayed before the right-click.)
|
|
|
-+ for (let folder of GetSelectedMsgFolders()) {
|
|
|
-+ mailWindowService.openMessengerWindowWithUri("mail:3pane", folder.URI,
|
|
|
-+ msgKeyToSelect);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- function MsgOpenSelectedMessages()
|
|
|
- {
|
|
|
- // Toggle message body (feed summary) and content-base url in message pane or
|
|
|
- // load in browser, per pref, otherwise open summary or web page in new window
|
|
|
- // or tab, per that pref.
|
|
|
-@@ -1675,19 +1693,18 @@ function MsgMarkReadByDate()
|
|
|
- {
|
|
|
- window.openDialog( "chrome://messenger/content/markByDate.xul","",
|
|
|
- "chrome,modal,titlebar,centerscreen",
|
|
|
- GetLoadedMsgFolder() );
|
|
|
- }
|
|
|
-
|
|
|
- function MsgMarkAllRead()
|
|
|
- {
|
|
|
-- var folder = GetSelectedMsgFolders()[0];
|
|
|
--
|
|
|
-- if (folder)
|
|
|
-+ let folders = GetSelectedMsgFolders();
|
|
|
-+ for (let folder of folders)
|
|
|
- folder.markAllMessagesRead(msgWindow);
|
|
|
- }
|
|
|
-
|
|
|
- function MsgDownloadFlagged()
|
|
|
- {
|
|
|
- gDBView.doCommand(nsMsgViewCommandType.downloadFlaggedForOffline);
|
|
|
- }
|
|
|
-
|
|
|
-@@ -2040,28 +2057,16 @@ function IsGetNextNMessagesEnabled()
|
|
|
- menuItem.removeAttribute("hidden");
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- menuItem.setAttribute("hidden","true");
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
--function IsCompactFolderEnabled()
|
|
|
--{
|
|
|
-- let folder = GetSelectedMsgFolders()[0];
|
|
|
-- if (!folder)
|
|
|
-- return false;
|
|
|
-- let server = folder.server;
|
|
|
-- return (server &&
|
|
|
-- (server.type != 'nntp') && // compact news folder is not supported
|
|
|
-- ((server.type != 'imap') || server.canCompactFoldersOnServer) &&
|
|
|
-- isCommandEnabled("cmd_compactFolder")); // checks e.g. if IMAP is offline
|
|
|
--}
|
|
|
--
|
|
|
- function SetUpToolbarButtons(uri)
|
|
|
- {
|
|
|
- let deleteButton = document.getElementById("button-delete");
|
|
|
- let replyAllButton = document.getElementById("button-replyall");
|
|
|
-
|
|
|
- // Eventually, we might want to set up the toolbar differently for imap,
|
|
|
- // pop, and news. For now, just tweak it based on if it is news or not.
|
|
|
- let forNews = isNewsURI(uri);
|
|
|
-@@ -2211,54 +2216,73 @@ function GetDefaultAccountRootFolder()
|
|
|
- {
|
|
|
- var account = accountManager.defaultAccount;
|
|
|
- if (account) {
|
|
|
- return account.incomingServer.rootMsgFolder;
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
--function GetFolderMessages()
|
|
|
--{
|
|
|
-+/**
|
|
|
-+ * Check for new messages for all selected folders, or for the default account
|
|
|
-+ * in case no folders are selected.
|
|
|
-+ */
|
|
|
-+function GetFolderMessages() {
|
|
|
- var selectedFolders = GetSelectedMsgFolders();
|
|
|
- var defaultAccountRootFolder = GetDefaultAccountRootFolder();
|
|
|
-
|
|
|
-- // if nothing selected, use the default
|
|
|
-- var folder = selectedFolders.length ? selectedFolders[0] : defaultAccountRootFolder;
|
|
|
--
|
|
|
-- if (!folder)
|
|
|
-- return;
|
|
|
--
|
|
|
-- var serverType = folder.server.type;
|
|
|
--
|
|
|
-- if (folder.isServer && (serverType == "nntp")) {
|
|
|
-- // if we're doing "get msgs" on a news server
|
|
|
-- // update unread counts on this server
|
|
|
-- folder.server.performExpand(msgWindow);
|
|
|
-+ var folders = (selectedFolders.length) ? selectedFolders
|
|
|
-+ : [defaultAccountRootFolder];
|
|
|
-+
|
|
|
-+ if (!folders[0]) {
|
|
|
- return;
|
|
|
- }
|
|
|
-- else if (serverType == "none") {
|
|
|
-- // if "Local Folders" is selected
|
|
|
-- // and the user does "Get Msgs"
|
|
|
-- // and LocalFolders is not deferred to,
|
|
|
-- // get new mail for the default account
|
|
|
-- //
|
|
|
-- // XXX TODO
|
|
|
-- // should shift click get mail for all (authenticated) accounts?
|
|
|
-- // see bug #125885
|
|
|
-- if (!folder.server.isDeferredTo)
|
|
|
-- folder = defaultAccountRootFolder;
|
|
|
-+
|
|
|
-+ for (let folder of folders) {
|
|
|
-+ var serverType = folder.server.type;
|
|
|
-+ if (folder.isServer && (serverType == "nntp")) {
|
|
|
-+ // If we're doing "get msgs" on a news server,
|
|
|
-+ // update unread counts on this server.
|
|
|
-+ folder.server.performExpand(msgWindow);
|
|
|
-+ }
|
|
|
-+ else if (serverType == "none") {
|
|
|
-+ // If "Local Folders" is selected and the user does "Get Msgs" and
|
|
|
-+ // LocalFolders is not deferred to, get new mail for the default account
|
|
|
-+ //
|
|
|
-+ // XXX TODO
|
|
|
-+ // Should shift click get mail for all (authenticated) accounts?
|
|
|
-+ // see bug #125885.
|
|
|
-+ if (!folder.server.isDeferredTo) {
|
|
|
-+ if (!defaultAccountRootFolder) {
|
|
|
-+ continue;
|
|
|
-+ }
|
|
|
-+ GetNewMsgs(defaultAccountRootFolder.server, defaultAccountRootFolder);
|
|
|
-+ } else {
|
|
|
-+ GetNewMsgs(folder.server, folder);
|
|
|
-+ }
|
|
|
-+ }
|
|
|
-+ else {
|
|
|
-+ GetNewMsgs(folder.server, folder);
|
|
|
-+ }
|
|
|
- }
|
|
|
--
|
|
|
-- if (!folder)
|
|
|
-- return;
|
|
|
--
|
|
|
-- var folders = [folder];
|
|
|
--
|
|
|
-- GetNewMessages(folders, folder.server);
|
|
|
-+}
|
|
|
-+
|
|
|
-+/**
|
|
|
-+ * Gets new messages for the given server, for the given folder.
|
|
|
-+ * @param server which nsIMsgIncomingServer to check for new messages
|
|
|
-+ * @param folder which nsIMsgFolder folder to check for new messages
|
|
|
-+ */
|
|
|
-+function GetNewMsgs(server, folder) {
|
|
|
-+ // Note that for Global Inbox folder.server != server when we want to get
|
|
|
-+ // messages for a specific account.
|
|
|
-+
|
|
|
-+ // Whenever we do get new messages, clear the old new messages.
|
|
|
-+ folder.biffState = Ci.nsIMsgFolder.nsMsgBiffState_NoMail;
|
|
|
-+ folder.clearNewMessages();
|
|
|
-+ server.getNewMessages(folder, msgWindow, null);
|
|
|
- }
|
|
|
-
|
|
|
- function SendUnsentMessages()
|
|
|
- {
|
|
|
- var msgSendlater = Cc["@mozilla.org/messengercompose/sendlater;1"]
|
|
|
- .getService(Ci.nsIMsgSendLater);
|
|
|
- var allIdentities, numMessages, msgFolder;
|
|
|
-
|
|
|
-diff --git a/suite/mailnews/content/mailWindowOverlay.xul b/suite/mailnews/content/mailWindowOverlay.xul
|
|
|
---- a/suite/mailnews/content/mailWindowOverlay.xul
|
|
|
-+++ b/suite/mailnews/content/mailWindowOverlay.xul
|
|
|
-@@ -453,17 +453,17 @@
|
|
|
- <menuitem id="folderPaneContext-rename"
|
|
|
- label="&folderContextRename.label;"
|
|
|
- accesskey="&folderContextRename.accesskey;"
|
|
|
- oncommand="gFolderTreeController.renameFolder();"/>
|
|
|
-
|
|
|
- <menuitem id="folderPaneContext-compact"
|
|
|
- label="&folderContextCompact.label;"
|
|
|
- accesskey="&folderContextCompact.accesskey;"
|
|
|
-- oncommand="gFolderTreeController.compactFolder(false);"/>
|
|
|
-+ oncommand="gFolderTreeController.compactFolders();"/>
|
|
|
- <menuitem id="folderPaneContext-markMailFolderAllRead"
|
|
|
- label="&folderContextMarkMailFolderRead.label;"
|
|
|
- accesskey="&folderContextMarkMailFolderRead.accesskey;"
|
|
|
- oncommand="MsgMarkAllRead();"/>
|
|
|
- <menuitem id="folderPaneContext-markNewsgroupAllRead"
|
|
|
- label="&folderContextMarkNewsgroupRead.label;"
|
|
|
- accesskey="&folderContextMarkNewsgroupRead.accesskey;"
|
|
|
- oncommand="MsgMarkAllRead();"/>
|