/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * The contents of this file are subject to the Netscape Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is Mozilla Communicator client code, released * March 31, 1998. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998-1999 Netscape Communications Corporation. All * Rights Reserved. * * Contributors: timeless * slucy@objectivesw.co.uk * Håkan Waara * Jan Varga * Seth Spitzer */ var gMessengerBundle; var gPromptService; var gOfflinePromptsBundle; var nsPrefBranch = null; var gOfflineManager; var gWindowManagerInterface; var gPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); var gTimelineService = null; var gTimelineEnabled = gPrefs.getBoolPref("mailnews.timeline_is_enabled"); try { gTimelineService = Components.classes["@mozilla.org;timeline-service;1"].getService(Components.interfaces.nsITimelineService); } catch (ex) { gTimelineEnabled = false; } // Disable the new account menu item if the account preference is locked. // Two other affected areas are the account central and the account manager // dialog. function menu_new_init() { if (!nsPrefBranch) { var prefService = Components.classes["@mozilla.org/preferences-service;1"]; prefService = prefService.getService(); prefService = prefService.QueryInterface(Components.interfaces.nsIPrefService); nsPrefBranch = prefService.getBranch(null); } var newAccountItem = document.getElementById('newAccountMenuItem'); if (nsPrefBranch.prefIsLocked("mail.accountmanager.accounts")) newAccountItem.setAttribute("disabled","true"); } function goUpdateMailMenuItems(commandset) { // dump("Updating commands for " + commandset.id + "\n"); for (var i = 0; i < commandset.childNodes.length; i++) { var commandID = commandset.childNodes[i].getAttribute("id"); if (commandID) { goUpdateCommand(commandID); } } } function file_init() { if (!gMessengerBundle) gMessengerBundle = document.getElementById("bundle_messenger"); file_attachments(); /* file_attachments() can return false to indicate a load failure, but if you return false to oncreate then the popup menu will not display which is not a good thing. */ document.commandDispatcher.updateCommands('create-menu-file'); } function file_attachments() { var numAttachments = GetNumberOfAttachmentsForDisplayedMessage(); var amParent=document.getElementById('fileAttachmentMenu'); if (!amParent) return false; // hide the attachment menu item if the message does not have any messages.. if (numAttachments > 0) { amParent.removeAttribute('hidden'); } else amParent.setAttribute('hidden',true); return true; } function InitEditMessagesMenu() { document.commandDispatcher.updateCommands('create-menu-edit'); } function InitSearchMessagesMenu() { document.commandDispatcher.updateCommands('create-menu-search'); } function InitGoMessagesMenu() { document.commandDispatcher.updateCommands('create-menu-go'); } function view_init() { if (!gMessengerBundle) gMessengerBundle = document.getElementById("bundle_messenger"); var message_menuitem=document.getElementById('menu_showMessage'); if (message_menuitem) { var message_menuitem_hidden = message_menuitem.getAttribute("hidden"); if(message_menuitem_hidden != "true"){ message_menuitem.setAttribute('checked',!IsThreadAndMessagePaneSplitterCollapsed()); } } var threadColumn = document.getElementById('ThreadColumnHeader'); var thread_menuitem=document.getElementById('menu_showThreads'); if (threadColumn && thread_menuitem){ thread_menuitem.setAttribute('checked',threadColumn.getAttribute('currentView')=='threaded'); } document.commandDispatcher.updateCommands('create-menu-view'); } function setSortByMenuItemCheckState(id, value) { var menuitem = document.getElementById(id); if (menuitem) { menuitem.setAttribute("checked", value); } } function InitViewSortByMenu() { var sortType = gDBView.sortType; setSortByMenuItemCheckState("sortByDateMenuitem", (sortType == nsMsgViewSortType.byDate)); setSortByMenuItemCheckState("sortByFlagMenuitem", (sortType == nsMsgViewSortType.byFlagged)); setSortByMenuItemCheckState("sortByOrderReceivedMenuitem", (sortType == nsMsgViewSortType.byId)); setSortByMenuItemCheckState("sortByPriorityMenuitem", (sortType == nsMsgViewSortType.byPriority)); setSortByMenuItemCheckState("sortBySizeMenuitem", (sortType == nsMsgViewSortType.bySize)); setSortByMenuItemCheckState("sortByStatusMenuitem", (sortType == nsMsgViewSortType.byStatus)); setSortByMenuItemCheckState("sortBySubjectMenuitem", (sortType == nsMsgViewSortType.bySubject)); setSortByMenuItemCheckState("sortByThreadMenuitem", (sortType == nsMsgViewSortType.byThread)); setSortByMenuItemCheckState("sortByUnreadMenuitem", (sortType == nsMsgViewSortType.byUnread)); setSortByMenuItemCheckState("sortByLabelMenuitem", (sortType == nsMsgViewSortType.byLabel)); // the Sender / Recipient menu is dynamic setSortByMenuItemCheckState("sortBySenderOrRecipientMenuitem", (sortType == nsMsgViewSortType.byAuthor) || (sortType == nsMsgViewSortType.byRecipient)); var senderOrRecipientMenuitem = document.getElementById("sortBySenderOrRecipientMenuitem"); if (senderOrRecipientMenuitem) { var currentFolder = gDBView.msgFolder; if (IsSpecialFolder(currentFolder, MSG_FOLDER_FLAG_SENTMAIL | MSG_FOLDER_FLAG_DRAFTS | MSG_FOLDER_FLAG_QUEUE)) { senderOrRecipientMenuitem.setAttribute('label',gMessengerBundle.getString('recipientColumnHeader')); senderOrRecipientMenuitem.setAttribute('accesskey',gMessengerBundle.getString('recipientAccessKey')); } else { senderOrRecipientMenuitem.setAttribute('label',gMessengerBundle.getString('senderColumnHeader')); senderOrRecipientMenuitem.setAttribute('accesskey',gMessengerBundle.getString('senderAccessKey')); } } var sortOrder = gDBView.sortOrder; setSortByMenuItemCheckState("sortAscending", (sortOrder == nsMsgViewSortOrder.ascending)); setSortByMenuItemCheckState("sortDescending", (sortOrder == nsMsgViewSortOrder.descending)); } function InitViewMessagesMenu() { var allMenuItem = document.getElementById("viewAllMessagesMenuItem"); var viewFlags = gDBView.viewFlags; var viewType = gDBView.viewType; if(allMenuItem) allMenuItem.setAttribute("checked", (viewFlags & nsMsgViewFlagsType.kUnreadOnly) == 0 && (viewType == nsMsgViewType.eShowAllThreads)); var unreadMenuItem = document.getElementById("viewUnreadMessagesMenuItem"); if(unreadMenuItem) unreadMenuItem.setAttribute("checked", (viewFlags & nsMsgViewFlagsType.kUnreadOnly) != 0); var theadedMenuItem = document.getElementById("menu_showThreads"); if (theadedMenuItem) theadedMenuItem.setAttribute("checked", (viewFlags & nsMsgViewFlagsType.kThreadedDisplay) != 0); document.commandDispatcher.updateCommands('create-menu-view'); var theadsWithUnreadMenuItem = document.getElementById("viewThreadsWithUnreadMenuItem"); if(theadsWithUnreadMenuItem) theadsWithUnreadMenuItem.setAttribute("checked", viewType == nsMsgViewType.eShowThreadsWithUnread); var watchedTheadsWithUnreadMenuItem = document.getElementById("viewWatchedThreadsWithUnreadMenuItem"); if(watchedTheadsWithUnreadMenuItem) watchedTheadsWithUnreadMenuItem.setAttribute("checked", viewType == nsMsgViewType.eShowWatchedThreadsWithUnread); var ignoredTheadsMenuItem = document.getElementById("viewIgnoredThreadsMenuItem"); if(ignoredTheadsMenuItem) ignoredTheadsMenuItem.setAttribute("checked", (viewFlags & nsMsgViewFlagsType.kShowIgnored) != 0); } function InitMessageMenu() { var aMessage = GetFirstSelectedMessage(); var isNews = false; if(aMessage) { isNews = IsNewsMessage(aMessage); } //We show reply to Newsgroups only for news messages. var replyNewsgroupMenuItem = document.getElementById("replyNewsgroupMainMenu"); if(replyNewsgroupMenuItem) { replyNewsgroupMenuItem.setAttribute("hidden", isNews ? "" : "true"); } //For mail messages we say reply. For news we say ReplyToSender. var replyMenuItem = document.getElementById("replyMainMenu"); if(replyMenuItem) { replyMenuItem.setAttribute("hidden", !isNews ? "" : "true"); } var replySenderMenuItem = document.getElementById("replySenderMainMenu"); if(replySenderMenuItem) { replySenderMenuItem.setAttribute("hidden", isNews ? "" : "true"); } // we only kill and watch threads for news var threadMenuSeparator = document.getElementById("threadItemsSeparator"); if (threadMenuSeparator) { threadMenuSeparator.setAttribute("hidden", isNews ? "" : "true"); } var killThreadMenuItem = document.getElementById("killThread"); if (killThreadMenuItem) { killThreadMenuItem.setAttribute("hidden", isNews ? "" : "true"); } var watchThreadMenuItem = document.getElementById("watchThread"); if (watchThreadMenuItem) { watchThreadMenuItem.setAttribute("hidden", isNews ? "" : "true"); } //disable the move and copy menus only if there are no messages selected. var moveMenu = document.getElementById("moveMenu"); if(moveMenu) moveMenu.setAttribute("disabled", !aMessage); var copyMenu = document.getElementById("copyMenu"); if(copyMenu) copyMenu.setAttribute("disabled", !aMessage); document.commandDispatcher.updateCommands('create-menu-message'); } function InitViewHeadersMenu() { var id = null; var headerchoice = 1; try { headerchoice = pref.getIntPref("mail.show_headers"); } catch (ex) { dump("failed to get the header pref\n"); } switch (headerchoice) { case 2: id = "viewallheaders"; break; case 1: default: id = "viewnormalheaders"; break; } var menuitem = document.getElementById(id); if (menuitem) menuitem.setAttribute("checked", "true"); } function IsNewsMessage(messageUri) { if (!messageUri) return false; return (messageUri.substring(0,14) == "news-message:/") } function InitMessageMark() { InitMarkReadItem("markReadMenuItem"); InitMarkReadItem("markReadToolbarItem"); InitMarkFlaggedItem("markFlaggedMenuItem"); InitMarkFlaggedItem("markFlaggedToolbarItem"); document.commandDispatcher.updateCommands('create-menu-mark'); } function SetMenuItemLabel(menuItemId, customLabel) { var menuItem = document.getElementById(menuItemId); if(menuItem) menuItem.setAttribute('label', customLabel); } function InitMessageLabel(menuType) { /* this code gets the label strings and changes the menu labels */ var prefs = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPref); var prefBranch = prefs.getDefaultBranch(null); var color; for (var i = 0;i <= 5; i++) { try { var prefString = prefs.getComplexValue("mailnews.labels.description." + i, Components.interfaces.nsIPrefLocalizedString); var formattedPrefString = gMessengerBundle.getFormattedString("labelMenuItemFormat" + i, [prefString], 1); SetMenuItemLabel(menuType + '-labelMenuItem' + i, formattedPrefString); // commented out for now until UE decides on how to show the Labels menu items. // This code will color either the text or background for the Labels menu items. /***** if (i != 0) { color = prefBranch.getCharPref("mailnews.labels.color." + i); // this colors the text of the menuitem only. document.getElementById(menuType + "-labelMenuItem" + i).setAttribute("style", ("color: " + color)); // this colors the background of the menuitem and // when selected, text becomes white. //document.getElementById(menuType + "-labelMenuItem" + i).setAttribute("style", ("color: #FFFFFF")); //document.getElementById(menuType + "-labelMenuItem" + i).setAttribute("style", ("background-color: " + color)); } ****/ } catch(ex) { dump("bad! " + ex + "\n"); } } document.commandDispatcher.updateCommands('create-menu-label'); } function InitMarkReadItem(id) { var areMessagesRead = SelectedMessagesAreRead(); var item = document.getElementById(id); if(item) item.setAttribute("checked", areMessagesRead); } function InitMarkFlaggedItem(id) { var areMessagesFlagged = SelectedMessagesAreFlagged(); var item = document.getElementById(id); if(item) item.setAttribute("checked", areMessagesFlagged); } function SelectedMessagesAreRead() { var isRead; try { isRead = gDBView.hdrForFirstSelectedMessage.isRead; } catch (ex) { isRead = false; } return isRead; } function SelectedMessagesAreFlagged() { var isFlagged; try { isFlagged = gDBView.hdrForFirstSelectedMessage.isFlagged; } catch (ex) { isFlagged = false; } return isFlagged; } function getMsgToolbarMenu_init() { document.commandDispatcher.updateCommands('create-menu-getMsgToolbar'); } function GetFirstSelectedMsgFolder() { var result = null; var selectedFolders = GetSelectedMsgFolders(); if (selectedFolders.length > 0) { result = selectedFolders[0]; } return result; } function GetWindowMediator() { if (gWindowManagerInterface) return gWindowManagerInterface; var windowManager = Components.classes['@mozilla.org/rdf/datasource;1?name=window-mediator'].getService(); return (gWindowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator)); } function GetInboxFolder(server) { try { var rootMsgFolder = server.rootMsgFolder; //now find Inbox var outNumFolders = new Object(); var inboxFolder = rootMsgFolder.getFoldersWithFlag(0x1000, 1, outNumFolders); return inboxFolder.QueryInterface(Components.interfaces.nsIMsgFolder); } catch (ex) { dump(ex + "\n"); } return null; } function GetMessagesForInboxOnServer(server) { var inboxFolder = GetInboxFolder(server); if (!inboxFolder) return; var folders = new Array(1); folders[0] = inboxFolder; var compositeDataSource = GetCompositeDataSource("GetNewMessages"); GetNewMessages(folders, compositeDataSource); } function MsgGetMessage() { // if offline, prompt for getting messages if(CheckOnline()) { GetFolderMessages(); } else { var option = PromptGetMessagesOffline(); if(option == 0) { if (!gOfflineManager) GetOfflineMgrService(); gOfflineManager.goOnline(false /* sendUnsentMessages */, false /* playbackOfflineImapOperations */, msgWindow); GetFolderMessages(); } } } function MsgGetMessagesForAllServers(defaultServer) { // now log into any server try { var allServers = accountManager.allServers; for (var i=0;i 0) { messenger.SendUnsentMessages(currentIdentity); // right now, all identities point to the same unsent messages // folder, so to avoid sending multiple copies of the // unsent messages, we only call messenger.SendUnsentMessages() once // see bug #89150 for details break; } } } } } function GetMessagesForAllAuthenticatedAccounts() { try { var allServers = accountManager.allServers; for (var i=0;i