home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December / PCWorld_2005-12_cd.bin / komunikace / netscape / nsb-install-8-0.exe / components / offlineStartup.js < prev    next >
Text File  |  2005-09-26  |  10KB  |  279 lines

  1. /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  * ***** BEGIN LICENSE BLOCK *****
  3.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Mozilla Public License Version
  6.  * 1.1 (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/MPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is the Offline Startup Handler
  16.  *
  17.  *
  18.  * Contributor(s):
  19.  *  David Bienvenu <bienvenu@nventure.com> (Original Author) 
  20.  *
  21.  * Alternatively, the contents of this file may be used under the terms of
  22.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  23.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  24.  * in which case the provisions of the GPL or the LGPL are applicable instead
  25.  * of those above. If you wish to allow use of your version of this file only
  26.  * under the terms of either the GPL or the LGPL, and not to allow others to
  27.  * use your version of this file under the terms of the MPL, indicate your
  28.  * decision by deleting the provisions above and replace them with the notice
  29.  * and other provisions required by the GPL or the LGPL. If you do not delete
  30.  * the provisions above, a recipient may use your version of this file under
  31.  * the terms of any one of the MPL, the GPL or the LGPL.
  32.  *
  33.  * ***** END LICENSE BLOCK ***** */
  34. const kDebug               = false;
  35. const kBundleURI         = "chrome://messenger/locale/offlineStartup.properties";
  36. const kOfflineStartupPref = "offline.startup_state";
  37. var gShuttingDown = false;
  38. var gOfflineStartupMode; //0 = remember last state, 1 = ask me, 2 == online, 3 == offline
  39. const kRememberLastState = 0;
  40. const kAskForOnlineState = 1;
  41. ////////////////////////////////////////////////////////////////////////
  42. // 
  43. //   nsOfflineStartup : nsIProfileStartupListener, nsIObserver
  44. //
  45. //   Check if the user has set the pref to be prompted for
  46. //   online/offline startup mode. If so, prompt the user. Also,
  47. //   check if the user wants to remember their offline state
  48. //   the next time they start up.
  49. //
  50. ////////////////////////////////////////////////////////////////////////
  51.  
  52. var nsOfflineStartup = 
  53. {
  54.   onProfileStartup: function()
  55.   {
  56.     debug("onProfileStartup");
  57.  
  58.       var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  59.         getService(Components.interfaces.nsIPrefBranch);
  60.       var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
  61.   
  62.       //gOfflineStartupMode = prefs.getIntPref(kOfflineStartupPref);
  63.       
  64.       if (prefs.getPrefType(kOfflineStartupPref) == prefs.PREF_INT) { 
  65.            gOfflineStartupMode = prefs.getIntPref(kOfflineStartupPref); 
  66.            } else { 
  67.                return; 
  68.       }
  69.       
  70.  
  71.     if (gOfflineStartupMode == kRememberLastState)
  72.     {    
  73.       var offline = !prefs.getBoolPref("network.online");
  74.       // if the user checked "work offline" in the profile mgr UI
  75.       // and forced us offline, remember that in prefs
  76.       // if checked, the "work offline" checkbox overrides our 
  77.       // persisted state
  78.       if (ioService.offline)
  79.         prefs.setBoolPref("network.online", false);
  80.        else
  81.        {
  82.          // if user did not check "work offline" in the profile manager UI
  83.          // use the persisted online state pref to restore our offline state
  84.       ioService.offline = offline;
  85.        }
  86.  
  87.       var observerService = Components.
  88.         classes["@mozilla.org/observer-service;1"].
  89.         getService(Components.interfaces.nsIObserverService);
  90.       observerService.addObserver(this, "network:offline-status-changed", false);
  91.       observerService.addObserver(this, "quit-application", false);
  92.       observerService.addObserver(this, "xpcom-shutdown", false);
  93.     }
  94.     else if (gOfflineStartupMode == kAskForOnlineState)
  95.     {
  96.       var promptService = Components.
  97.         classes["@mozilla.org/embedcomp/prompt-service;1"].
  98.         getService(Components.interfaces.nsIPromptService);
  99.       
  100.       var bundle = getBundle(kBundleURI);
  101.       if (!bundle)
  102.         return;
  103.  
  104.       var title = bundle.GetStringFromName("title");
  105.       var desc = bundle.GetStringFromName("desc");
  106.       var button0Text = bundle.GetStringFromName("workOnline");
  107.       var button1Text = bundle.GetStringFromName("workOffline");
  108.       var checkVal = {value:0};
  109.  
  110.       var result = promptService.confirmEx(null, title, desc, 
  111.         (promptService.BUTTON_POS_0 * promptService.BUTTON_TITLE_IS_STRING) +
  112.         (promptService.BUTTON_POS_1 * promptService.BUTTON_TITLE_IS_STRING),
  113.         button0Text, button1Text, null, null, checkVal);
  114.       debug ("result = " + result + "\n");
  115.       if (result == 1)
  116.         ioService.offline = true;
  117.     }
  118.   },
  119.  
  120.   observe: function(aSubject, aTopic, aData)
  121.   {
  122.     debug("observe: " + aTopic);
  123.  
  124.     if (aTopic == "network:offline-status-changed")
  125.     {
  126.       debug("network:offline-status-changed: " + aData);
  127.       // if we're not shutting down, and startup mode is "remember online state"
  128.       if (!gShuttingDown && gOfflineStartupMode == kRememberLastState)
  129.       {
  130.         debug("remembering offline state: ");
  131.         var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  132.           getService(Components.interfaces.nsIPrefBranch);
  133.         prefs.setBoolPref("network.online", aData == "online");
  134.       }
  135.  
  136.     }
  137.     else if (aTopic == "app-startup")
  138.     {
  139.       var observerService = Components.
  140.         classes["@mozilla.org/observer-service;1"].
  141.         getService(Components.interfaces.nsIObserverService);
  142.       observerService.addObserver(this, "profile-after-change", false);
  143.     }
  144.     else if (aTopic == "xpcom-shutdown" || aTopic == "quit-application")
  145.     {
  146.       gShuttingDown = true;
  147.     }
  148.     else if (aTopic == "profile-after-change")
  149.     {
  150.       this.onProfileStartup();
  151.     }
  152.   },
  153.  
  154.  
  155.   QueryInterface: function(aIID)
  156.   {
  157.     if (!aIID.equals(Components.interfaces.nsIObserver) &&
  158.         !aIID.equals(Components.interfaces.nsISupports))
  159.       throw Components.results.NS_ERROR_NO_INTERFACE;
  160.  
  161.     return this;
  162.   }
  163. }
  164.  
  165.  
  166. var nsOfflineStartupModule = 
  167. {
  168.   mClassName:     "Offline Startup",
  169.   mContractID:    "@mozilla.org/offline-startup;1",
  170.   mClassID:       Components.ID("3028a3c8-2165-42a4-b878-398da5d32736"),
  171.  
  172.   getClassObject: function(aCompMgr, aCID, aIID)
  173.   {
  174.     if (!aCID.equals(this.mClassID))
  175.       throw Components.results.NS_ERROR_NO_INTERFACE;
  176.     if (!aIID.equals(Components.interfaces.nsIFactory))
  177.       throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
  178.  
  179.     return this.mFactory;
  180.   },
  181.  
  182.   registerSelf: function(aCompMgr, aFileSpec, aLocation, aType)
  183.   {
  184.     if (kDebug)
  185.       dump("*** Registering nsOfflineStartupModule (a JavaScript Module)\n");
  186.  
  187.     aCompMgr = aCompMgr.QueryInterface(
  188.                  Components.interfaces.nsIComponentRegistrar);
  189.     aCompMgr.registerFactoryLocation(this.mClassID, this.mClassName, 
  190.       this.mContractID, aFileSpec, aLocation, aType);
  191.  
  192.     // Receive startup notification.
  193.     // We are |getService()|d at app-startup (before profile selection)
  194.     this.getCategoryManager().addCategoryEntry("app-startup", 
  195.       "Offline-startup", "service," + this.mContractID, true, true);
  196.   },
  197.  
  198.   unregisterSelf: function(aCompMgr, aFileSpec, aLocation)
  199.   {
  200.     aCompMgr = aCompMgr.QueryInterface(
  201.                  Components.interfaces.nsIComponentRegistrar);
  202.     aCompMgr.unregisterFactoryLocation(this.mClassID, aFileSpec);
  203.  
  204.     this.getCategoryManager().deleteCategoryEntry("app-startup", 
  205.       "Offline-startup", true);
  206.   },
  207.  
  208.   canUnload: function(aCompMgr)
  209.   {
  210.     return true;
  211.   },
  212.  
  213.   getCategoryManager: function()
  214.   {
  215.     return Components.classes["@mozilla.org/categorymanager;1"].
  216.       getService(Components.interfaces.nsICategoryManager);
  217.   },
  218.  
  219.   //////////////////////////////////////////////////////////////////////
  220.   //
  221.   //   mFactory : nsIFactory
  222.   //
  223.   //////////////////////////////////////////////////////////////////////
  224.   mFactory:
  225.   {
  226.     createInstance: function(aOuter, aIID)
  227.     {
  228.       if (aOuter != null)
  229.         throw Components.results.NS_ERROR_NO_AGGREGATION;
  230.       // return the singleton 
  231.       return nsOfflineStartup.QueryInterface(aIID);
  232.     },
  233.  
  234.     lockFactory: function(aLock)
  235.     {
  236.       // quiten warnings
  237.     }
  238.   }
  239. };
  240.  
  241. function NSGetModule(aCompMgr, aFileSpec)
  242. {
  243.   return nsOfflineStartupModule;
  244. }
  245.  
  246. function getBundle(aURI)
  247. {
  248.   if (!aURI)
  249.     return null;
  250.  
  251.   debug(aURI);
  252.   var bundle = null;
  253.   try
  254.   {
  255.     var strBundleService = Components.
  256.       classes["@mozilla.org/intl/stringbundle;1"].
  257.       getService(Components.interfaces.nsIStringBundleService);
  258.     bundle = strBundleService.createBundle(aURI);
  259.   }
  260.   catch (ex)
  261.   {
  262.     bundle = null;
  263.     debug("Exception getting bundle " + aURI + ": " + ex);
  264.   }
  265.  
  266.   return bundle;
  267. }
  268.  
  269.  
  270. ////////////////////////////////////////////////////////////////////////
  271. //
  272. //   Debug helper
  273. //
  274. ////////////////////////////////////////////////////////////////////////
  275. if (!kDebug)
  276.   debug = function(m) {};
  277. else
  278.   debug = function(m) {dump("\t *** nsOfflineStartup: " + m + "\n");};
  279.