home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / mail.xpi / bin / chrome / messenger.jar / content / messenger / msgSynchronize.js < prev    next >
Text File  |  2001-08-21  |  7KB  |  197 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  * The contents of this file are subject to the Netscape Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/NPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * 
  13.  * The Initial Developer of the Original Code is Netscape
  14.  * Communications Corporation. Portions created by Netscape are
  15.  * Copyright (C) 1998-2001 Netscape Communications Corporation. All
  16.  * Rights Reserved.
  17.  * 
  18.  * Contributors:
  19.  *   dianesun@netscape.com
  20.  */
  21.  
  22. var gSyncMail = false;
  23. var gSyncNews = false;
  24. var gSendMessage = true;
  25. var gWorkOffline = false;
  26. var gSynchronizeOutliner = null;
  27. var gAccountManager = null;
  28. var gParentMsgWindow;
  29. var gMsgWindow;
  30.  
  31. // RDF needs to be defined for GetFolderAttribute in msgMail3PaneWindow.js
  32. var RDF = Components.classes['@mozilla.org/rdf/rdf-service;1'].getService().QueryInterface(Components.interfaces.nsIRDFService);
  33.  
  34. const MSG_FOLDER_FLAG_OFFLINE = 0x8000000;
  35.  
  36. function OnLoad()
  37. {    
  38.     if (window.arguments && window.arguments[0]) {
  39.         if (window.arguments[0].msgWindow) {
  40.             gParentMsgWindow = window.arguments[0].msgWindow;
  41.         }
  42.     }
  43.                  
  44.     doSetOKCancel(syncOkButton, syncCancelButton);
  45.     var prefs = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPref);
  46.     gSyncMail = prefs.GetBoolPref("mailnews.offline_sync_mail");
  47.     gSyncNews = prefs.GetBoolPref("mailnews.offline_sync_news");
  48.     gSendMessage = prefs.GetBoolPref("mailnews.offline_sync_send_unsent");
  49.     gWorkOffline = prefs.GetBoolPref("mailnews.offline_sync_work_offline");
  50.     document.getElementById("syncMail").checked = gSyncMail;
  51.     document.getElementById("syncNews").checked = gSyncNews;
  52.     document.getElementById("sendMessage").checked = gSendMessage;
  53.     document.getElementById("workOffline").checked = gWorkOffline;
  54.  
  55.     return true;
  56. }
  57.  
  58. function syncOkButton()
  59. {
  60.  
  61.     gSyncMail = document.getElementById("syncMail").checked;
  62.     gSyncNews = document.getElementById("syncNews").checked;    
  63.     gSendMessage = document.getElementById("sendMessage").checked;
  64.     gWorkOffline = document.getElementById("workOffline").checked;
  65.  
  66.     var prefs = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPref);
  67.     prefs.SetBoolPref("mailnews.offline_sync_mail", gSyncMail);
  68.     prefs.SetBoolPref("mailnews.offline_sync_news", gSyncNews);
  69.     prefs.SetBoolPref("mailnews.offline_sync_send_unsent", gSendMessage);
  70.     prefs.SetBoolPref("mailnews.offline_sync_work_offline", gWorkOffline);
  71.     
  72.     if( gSyncMail || gSyncNews || gSendMessage || gWorkOffline) {
  73.  
  74.         var offlineManager = Components.classes["@mozilla.org/messenger/offline-manager;1"].getService(Components.interfaces.nsIMsgOfflineManager);
  75.         if(offlineManager)
  76.             offlineManager.synchronizeForOffline(gSyncNews, gSyncMail, gSendMessage, gWorkOffline, gParentMsgWindow)
  77.  
  78.     }    
  79.  
  80.     return true;
  81. }
  82.  
  83. function syncCancelButton()
  84. {
  85.     //dump("in syncCancelButton()\n");
  86.     return true;
  87. }
  88.  
  89. function OnSelect()
  90. {      
  91.    top.window.openDialog("chrome://messenger/content/msgSelectOffline.xul", "", "centerscreen,chrome,modal,titlebar,resizable=yes");
  92.    return true;
  93. }
  94.  
  95. function selectOkButton()
  96. {
  97.     return true;
  98. }
  99.  
  100. function selectCancelButton()
  101. {    
  102.     return true;
  103. }
  104.  
  105. function selectOnLoad()
  106. {
  107.     doSetOKCancel(selectOkButton,selectCancelButton);
  108.  
  109.     gMsgWindow = Components.classes[msgWindowContractID].createInstance(Components.interfaces.nsIMsgWindow);
  110.     gMsgWindow.SetDOMWindow(window);
  111.  
  112.     gAccountManager = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
  113.     gSynchronizeOutliner = document.getElementById('synchronizeOutliner');
  114.  
  115.     SortSynchronizePane('folderNameCol', '?folderTreeNameSort');
  116.  
  117. function SortSynchronizePane(column, sortKey)
  118. {
  119.     var node = FindInWindow(window, column);
  120.     if(!node) {
  121.         dump('Couldnt find sort column\n');
  122.         return false;
  123.     }
  124.  
  125.     node.setAttribute("sort", sortKey);
  126.     node.setAttribute("sortDirection", "natural");
  127.     gSynchronizeOutliner.outlinerBoxObject.view.cycleHeader(column, node);
  128. }
  129.  
  130. function FindInWindow(currentWindow, id)
  131. {
  132.     var item = currentWindow.document.getElementById(id);
  133.     if(item)
  134.     return item;
  135.  
  136.     for(var i = 0; i < currentWindow.frames.length; i++) {
  137.         var frameItem = FindInWindow(currentWindow.frames[i], id);
  138.         if(frameItem)
  139.             return frameItem;
  140.     }
  141.  
  142.     return null;
  143. }
  144.  
  145.  
  146. function onSynchronizeClick(event)
  147. {
  148.     // we only care about button 0 (left click) events
  149.     if (event.button != 0)
  150.       return;
  151.  
  152.     var row = {}
  153.     var col = {}
  154.     var elt = {}
  155.  
  156.     gSynchronizeOutliner.outlinerBoxObject.getCellAt(event.clientX, event.clientY, row, col, elt);
  157.  
  158.     if (elt.value == "twisty") {
  159.         var folderResource = GetFolderResource(gSynchronizeOutliner, row.value);
  160.         var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
  161.  
  162.         if (!(gSynchronizeOutliner.outlinerBoxObject.view.isContainerOpen(row.value))) {
  163.             var serverType = GetFolderAttribute(gSynchronizeOutliner, folderResource, "ServerType");
  164.             // imap is the only server type that does folder discovery
  165.             if (serverType != "imap") return;
  166.  
  167.             if (GetFolderAttribute(gSynchronizeOutliner, folderResource, "IsServer") == "true") {
  168.                 var server = msgFolder.server;
  169.                 server.performExpand(gMsgWindow);
  170.             }
  171.             else {
  172.                 var imapFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgImapMailFolder);
  173.                 if (imapFolder) {
  174.                   imapFolder.performExpand(gMsgWindow);
  175.                 }
  176.             }
  177.         }
  178.     }
  179.     else {
  180.       if (col.value == "syncCol") {
  181.         UpdateNode(GetFolderResource(gSynchronizeOutliner, row.value), row.value);
  182.       }
  183.     }
  184. }  
  185.  
  186. function UpdateNode(resource, row)
  187. {
  188.     var folder = resource.QueryInterface(Components.interfaces.nsIMsgFolder);
  189.  
  190.     if (folder.isServer)
  191.       return;
  192.  
  193.     var oldFlag = folder.toggleFlag(MSG_FOLDER_FLAG_OFFLINE);
  194. }
  195.  
  196.