summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/base/content/msgSynchronize.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/base/content/msgSynchronize.js')
-rw-r--r--comm/mailnews/base/content/msgSynchronize.js192
1 files changed, 192 insertions, 0 deletions
diff --git a/comm/mailnews/base/content/msgSynchronize.js b/comm/mailnews/base/content/msgSynchronize.js
new file mode 100644
index 0000000000..4393a2d301
--- /dev/null
+++ b/comm/mailnews/base/content/msgSynchronize.js
@@ -0,0 +1,192 @@
+/* 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 { MailUtils } = ChromeUtils.import("resource:///modules/MailUtils.jsm");
+
+var gSynchronizeTree = null;
+var gParentMsgWindow;
+var gMsgWindow;
+
+var gInitialFolderStates = {};
+
+window.addEventListener("DOMContentLoaded", onLoad);
+
+document.addEventListener("dialogaccept", syncOkButton);
+
+function onLoad() {
+ gParentMsgWindow = window.arguments?.[0]?.msgWindow;
+
+ document.getElementById("syncMail").checked = Services.prefs.getBoolPref(
+ "mailnews.offline_sync_mail"
+ );
+ document.getElementById("syncNews").checked = Services.prefs.getBoolPref(
+ "mailnews.offline_sync_news"
+ );
+ document.getElementById("sendMessage").checked = Services.prefs.getBoolPref(
+ "mailnews.offline_sync_send_unsent"
+ );
+ document.getElementById("workOffline").checked = Services.prefs.getBoolPref(
+ "mailnews.offline_sync_work_offline"
+ );
+}
+
+function syncOkButton() {
+ var syncMail = document.getElementById("syncMail").checked;
+ var syncNews = document.getElementById("syncNews").checked;
+ var sendMessage = document.getElementById("sendMessage").checked;
+ var workOffline = document.getElementById("workOffline").checked;
+
+ Services.prefs.setBoolPref("mailnews.offline_sync_mail", syncMail);
+ Services.prefs.setBoolPref("mailnews.offline_sync_news", syncNews);
+ Services.prefs.setBoolPref("mailnews.offline_sync_send_unsent", sendMessage);
+ Services.prefs.setBoolPref("mailnews.offline_sync_work_offline", workOffline);
+
+ if (syncMail || syncNews || sendMessage || workOffline) {
+ var offlineManager = Cc[
+ "@mozilla.org/messenger/offline-manager;1"
+ ].getService(Ci.nsIMsgOfflineManager);
+ if (offlineManager) {
+ offlineManager.synchronizeForOffline(
+ syncNews,
+ syncMail,
+ sendMessage,
+ workOffline,
+ gParentMsgWindow
+ );
+ }
+ }
+}
+
+function OnSelect() {
+ top.window.openDialog(
+ "chrome://messenger/content/msgSelectOfflineFolders.xhtml",
+ "",
+ "centerscreen,chrome,modal,titlebar,resizable=yes"
+ );
+ return true;
+}
+
+// All the code below is only used by Seamonkey.
+
+function selectOkButton() {
+ return true;
+}
+
+function selectCancelButton() {
+ for (var resourceValue in gInitialFolderStates) {
+ let folder = MailUtils.getExistingFolder(resourceValue);
+ if (gInitialFolderStates[resourceValue]) {
+ folder.setFlag(Ci.nsMsgFolderFlags.Offline);
+ } else {
+ folder.clearFlag(Ci.nsMsgFolderFlags.Offline);
+ }
+ }
+ return true;
+}
+
+function SortSynchronizePane(column, sortKey) {
+ var node = FindInWindow(window, column);
+ if (!node) {
+ dump("Couldn't find sort column\n");
+ return;
+ }
+
+ node.setAttribute("sort", sortKey);
+ node.setAttribute("sortDirection", "natural");
+ var col = gSynchronizeTree.columns[column];
+ gSynchronizeTree.view.cycleHeader(col);
+}
+
+function FindInWindow(currentWindow, id) {
+ var item = currentWindow.document.getElementById(id);
+ if (item) {
+ return item;
+ }
+
+ for (var i = 0; i < currentWindow.frames.length; i++) {
+ var frameItem = FindInWindow(currentWindow.frames[i], id);
+ if (frameItem) {
+ return frameItem;
+ }
+ }
+
+ return null;
+}
+
+function onSynchronizeClick(event) {
+ // we only care about button 0 (left click) events
+ if (event.button != 0) {
+ return;
+ }
+
+ let treeCellInfo = gSynchronizeTree.getCellAt(event.clientX, event.clientY);
+ if (treeCellInfo.row == -1) {
+ return;
+ }
+
+ if (treeCellInfo.childElt == "twisty") {
+ var folderResource = GetFolderResource(gSynchronizeTree, treeCellInfo.row);
+ var folder = folderResource.QueryInterface(Ci.nsIMsgFolder);
+
+ if (!gSynchronizeTree.view.isContainerOpen(treeCellInfo.row)) {
+ var serverType = folder.server.type;
+ // imap is the only server type that does folder discovery
+ if (serverType != "imap") {
+ return;
+ }
+
+ if (folder.isServer) {
+ var server = folder.server;
+ server.performExpand(gMsgWindow);
+ } else {
+ var imapFolder = folderResource.QueryInterface(Ci.nsIMsgImapMailFolder);
+ if (imapFolder) {
+ imapFolder.performExpand(gMsgWindow);
+ }
+ }
+ }
+ } else if (treeCellInfo.col.id == "syncCol") {
+ UpdateNode(
+ GetFolderResource(gSynchronizeTree, treeCellInfo.row),
+ treeCellInfo.row
+ );
+ }
+}
+
+function onSynchronizeTreeKeyPress(event) {
+ // for now, only do something on space key
+ if (event.charCode != KeyEvent.DOM_VK_SPACE) {
+ return;
+ }
+
+ var treeSelection = gSynchronizeTree.view.selection;
+ for (let i = 0; i < treeSelection.getRangeCount(); i++) {
+ var start = {},
+ end = {};
+ treeSelection.getRangeAt(i, start, end);
+ for (let k = start.value; k <= end.value; k++) {
+ UpdateNode(GetFolderResource(gSynchronizeTree, k), k);
+ }
+ }
+}
+
+function UpdateNode(resource, row) {
+ var folder = resource.QueryInterface(Ci.nsIMsgFolder);
+
+ if (folder.isServer) {
+ return;
+ }
+
+ if (!(resource.Value in gInitialFolderStates)) {
+ gInitialFolderStates[resource.Value] = folder.getFlag(
+ Ci.nsMsgFolderFlags.Offline
+ );
+ }
+
+ folder.toggleFlag(Ci.nsMsgFolderFlags.Offline);
+}
+
+function GetFolderResource(aTree, aIndex) {
+ return aTree.view.getResourceAtIndex(aIndex);
+}