[Pkg-mozext-commits] [firetray] 266/399: add 'im' to mail server types and have VersionChange hooks applied synchronously

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:23:56 UTC 2013


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch dfsg-clean
in repository firetray.

commit c608058971bda3e34ad4d97103b072253fdf515e
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Fri Aug 3 15:53:36 2012 +0200

    add 'im' to mail server types and have VersionChange hooks applied synchronously
    
    This forces us to hard code the addon version :(
---
 src/defaults/preferences/prefs.js |    2 +-
 src/install.rdf                   |    2 +-
 src/modules/FiretrayHandler.jsm   |   47 ++++++++++++++++-----------
 src/modules/FiretrayMessaging.jsm |    4 +--
 src/modules/VersionChange.jsm     |   64 ++++++++++++++++++++++++-------------
 src/modules/commons.js            |   20 ++++++------
 6 files changed, 85 insertions(+), 54 deletions(-)

diff --git a/src/defaults/preferences/prefs.js b/src/defaults/preferences/prefs.js
index e02085b..89e27b5 100644
--- a/src/defaults/preferences/prefs.js
+++ b/src/defaults/preferences/prefs.js
@@ -31,4 +31,4 @@ pref("extensions.firetray.folder_count_recursive", true);
 // Ci.nsMsgFolderFlags.Archive|Drafts|Junk|Queue|SentMail|Trash|Virtual
 pref("extensions.firetray.excluded_folders_flags", 1077956384);
 // exposed in 1 tree, hence 2 branches: serverTypes, excludedAccounts
-pref("extensions.firetray.mail_accounts", '{ "serverTypes": {"pop3":{"order":1,"excluded":false}, "imap":{"order":1,"excluded":false}, "movemail":{"order":2,"excluded":true}, "none":{"order":3,"excluded":false}, "rss":{"order":4,"excluded":true}, "nntp":{"order":5,"excluded":true}}, "excludedAccounts": [] }'); // JSON
+pref("extensions.firetray.mail_accounts", '{ "serverTypes": {"pop3":{"order":1,"excluded":false}, "imap":{"order":1,"excluded":false}, "movemail":{"order":2,"excluded":true}, "none":{"order":3,"excluded":false}, "rss":{"order":4,"excluded":true}, "nntp":{"order":5,"excluded":true}, "im":{"order":6,"excluded":true}}, "excludedAccounts": [] }'); // JSON
diff --git a/src/install.rdf b/src/install.rdf
index e6aa128..b8f9633 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -5,7 +5,7 @@
     <em:unpack>true</em:unpack> <!-- needed for embedded icons -->
     <em:type>2</em:type>
     <em:name>FireTray</em:name>
-    <em:version>0.4.2</em:version>
+    <em:version>0.4.2</em:version> <!-- change FIRETRAY_VERSION accordingly ! -->
     <em:creator>Hua Luo, Francesco Solero, Foudil BRÉTEL</em:creator>
     <em:contributor>Hua Luo, Francesco Solero (Firetray original authors)</em:contributor>
     <em:homepageURL>https://github.com/foudfou/firetray</em:homepageURL>
diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index c64469f..806318e 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -27,10 +27,7 @@ if ("undefined" == typeof(firetray)) {
 // other global functions
 // (https://developer.mozilla.org/en/XUL_School/JavaScript_Object_Management)
 firetray.Handler = {
-  FILENAME_DEFAULT: null,
-  FILENAME_SUFFIX: "32.png",
   FILENAME_BLANK: null,
-  FILENAME_NEWMAIL: null,
 
   initialized: false,
   inMailApp: false,
@@ -77,12 +74,15 @@ firetray.Handler = {
       this.inBrowserApp = true;
     F.LOG('inMailApp: '+this.inMailApp+', inBrowserApp: '+this.inBrowserApp);
 
-    this.FILENAME_DEFAULT = firetray.Utils.chromeToPath(
-      "chrome://firetray/skin/" +  this.appName.toLowerCase() + this.FILENAME_SUFFIX);
     this.FILENAME_BLANK = firetray.Utils.chromeToPath(
       "chrome://firetray/skin/blank-icon.png");
-    this.FILENAME_NEWMAIL = firetray.Utils.chromeToPath(
-      "chrome://firetray/skin/message-mail-new.png");
+
+    VersionChange.init(FIRETRAY_ID, FIRETRAY_VERSION, FIRETRAY_PREF_BRANCH);
+    VersionChange.addHook(["install", "upgrade", "reinstall"], firetray.VersionChangeHandler.showReleaseNotes);
+    VersionChange.addHook(["upgrade", "reinstall"], firetray.VersionChangeHandler.tryEraseOldOptions);
+    VersionChange.addHook(["upgrade", "reinstall"], firetray.VersionChangeHandler.correctMailNotificationType);
+    VersionChange.addHook(["upgrade", "reinstall"], firetray.VersionChangeHandler.addIMServerTypePrefMaybe);
+    VersionChange.applyHooksAndWatchUninstall();
 
     firetray.StatusIcon.init();
     firetray.Handler.showHideIcon();
@@ -105,11 +105,6 @@ firetray.Handler = {
     Services.obs.addObserver(this, "xpcom-will-shutdown", false);
     Services.obs.addObserver(this, "profile-change-teardown", false);
 
-    VersionChange.addHook(["install", "upgrade", "reinstall"], firetray.VersionChangeHandler.showReleaseNotes);
-    VersionChange.addHook(["upgrade", "reinstall"], firetray.VersionChangeHandler.tryEraseOldOptions);
-    VersionChange.addHook(["upgrade", "reinstall"], firetray.VersionChangeHandler.correctMailNotificationType);
-    VersionChange.watch();
-
     this.preventWarnOnClose();
 
     this.initialized = true;
@@ -348,10 +343,10 @@ firetray.PrefListener = new PrefListener(
 
 firetray.VersionChangeHandler = {
 
-  showReleaseNotes: function(ver) {
-    firetray.Handler.openTab(FIRETRAY_SPLASH_PAGE+"#v"+ver);
-    firetray.Handler.tryEraseOldOptions();
-    firetray.Handler.correctMailNotificationType();
+  showReleaseNotes: function() {
+    firetray.VersionChangeHandler.openTab(FIRETRAY_SPLASH_PAGE+"#v"+FIRETRAY_VERSION);
+    firetray.VersionChangeHandler.tryEraseOldOptions();
+    firetray.VersionChangeHandler.correctMailNotificationType();
   },
 
   openTab: function(url) {
@@ -412,16 +407,32 @@ firetray.VersionChangeHandler = {
 
     for (let i = 0, length = oldOptions.length; i<length; ++i) {
       try {
-        firetray.Utils.prefService.clearUserPref(oldOptions[i]);
+        let option = oldOptions[i];
+        firetray.Utils.prefService.clearUserPref(option);
       } catch (x) {}
     }
   },
 
   correctMailNotificationType: function() {
     if (firetray.Utils.prefService.getIntPref('message_count_type') ===
-        FIRETRAY_MESSAGE_COUNT_TYPE_NEW)
+        FIRETRAY_MESSAGE_COUNT_TYPE_NEW) {
       firetray.Utils.prefService.setIntPref('mail_notification_type',
         FIRETRAY_NOTIFICATION_NEWMAIL_ICON);
+      F.WARN("mail notification type set to newmail icon.");
+    }
+  },
+
+  addIMServerTypePrefMaybe: function() {
+    let mailAccounts = firetray.Utils.getObjPref('mail_accounts');
+    let serverTypes = mailAccounts["serverTypes"];
+
+    if (!serverTypes["im"])
+      serverTypes["im"] = {"order":6,"excluded":true};
+
+    let prefObj = {"serverTypes":serverTypes, "excludedAccounts":mailAccounts["excludedAccounts"]};
+    firetray.Utils.setObjPref('mail_accounts', prefObj);
+
+    F.WARN("server type 'im' added to prefs.");
   }
 
 };
diff --git a/src/modules/FiretrayMessaging.jsm b/src/modules/FiretrayMessaging.jsm
index c362a39..66dcf0e 100644
--- a/src/modules/FiretrayMessaging.jsm
+++ b/src/modules/FiretrayMessaging.jsm
@@ -234,8 +234,8 @@ firetray.Messaging = {
       let accounts = new this.Accounts();
       for (let accountServer in accounts) {
         F.LOG("is servertype excluded: "+serverTypes[accountServer.type].excluded+", account exclusion index: "+excludedAccounts.indexOf(accountServer.key));
-        if ( (serverTypes[accountServer.type].excluded)
-          || (excludedAccounts.indexOf(accountServer.key) >= 0) )
+        if (serverTypes[accountServer.type].excluded ||
+            (excludedAccounts.indexOf(accountServer.key) >= 0))
           continue;
 
         let rootFolder = accountServer.rootFolder; // nsIMsgFolder
diff --git a/src/modules/VersionChange.jsm b/src/modules/VersionChange.jsm
index 8fa7730..04fd1b7 100644
--- a/src/modules/VersionChange.jsm
+++ b/src/modules/VersionChange.jsm
@@ -5,7 +5,8 @@ const Ci = Components.interfaces;
 const Cu = Components.utils;
 
 Cu.import("resource://gre/modules/AddonManager.jsm");
-Cu.import("resource://firetray/commons.js");
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://firetray/logging.jsm");
 
 
 /**
@@ -14,14 +15,27 @@ Cu.import("resource://firetray/commons.js");
  */
 var VersionChange = {
 
-  curVersion: null,
+  initialized:  false,
+  addonId:      null,
+  addonVersion: null,
+  addOnPrefs: null,
+
+  init: function(id, version, prefBranch) {
+    F.LOG("VersionChange got: id="+id+" ver="+version+" prefBranch="+prefBranch);
+    this.addOnId = id;
+    this.addonVersion = version;
+    this.addOnPrefs = Services.prefs.getBranch(prefBranch);
+
+    this.initialized = true;
+  },
 
   versionComparator: Cc["@mozilla.org/xpcom/version-comparator;1"]
     .getService(Ci.nsIVersionComparator),
 
-  watch: function() {
+  applyHooksAndWatchUninstall: function() {
+    if (!this.initialized) throw "VersionChange not initialized";
+    this.onVersionChange(this.addonVersion); // AddonManager.getAddonByID() async, whereas we need sync call
     AddonManager.addAddonListener(this.uninstallListener);
-    AddonManager.getAddonByID(FIRETRAY_ID, this.onVersionChange.bind(this));
     F.LOG("version change watching enabled");
   },
 
@@ -29,22 +43,21 @@ var VersionChange = {
   // detect reinstall later
   uninstallListener: {
     onUninstalling: function(addon) {
-      if (addon.id !== FIRETRAY_ID) return;
-      firetray.Utils.prefService.clearUserPref("installedVersion");
+      if (addon.id !== this.addonId) return;
+      this.addOnPrefs.clearUserPref("installedVersion");
     },
     onOperationCancelled: function(addon) {
-      if (addon.id !== FIRETRAY_ID) return;
+      if (addon.id !== this.addonId) return;
       let beingUninstalled = (addon.pendingOperations & AddonManager.PENDING_UNINSTALL) != 0;
       if (beingUninstalled)
-        firetray.Utils.prefService.clearUserPref("installedVersion");
+        this.addOnPrefs.clearUserPref("installedVersion");
     }
   },
 
-  onVersionChange: function(addon) {
-    F.LOG("VERSION: "+addon.version);
+  onVersionChange: function() {
+    F.LOG("VERSION: "+this.addonVersion);
 
-    this.curVersion = addon.version;
-    var firstrun = firetray.Utils.prefService.getBoolPref("firstrun");
+    var firstrun = this.addOnPrefs.getBoolPref("firstrun");
 
     if (firstrun) {
       F.LOG("FIRST RUN");
@@ -53,10 +66,10 @@ var VersionChange = {
 
     } else {
       try {
-        var installedVersion = firetray.Utils.prefService.getCharPref("installedVersion");
-        var versionDelta = this.versionComparator.compare(this.curVersion, installedVersion);
+        var installedVersion = this.addOnPrefs.getCharPref("installedVersion");
+        var versionDelta = this.versionComparator.compare(this.addonVersion, installedVersion);
         if (versionDelta > 0) {
-          firetray.Utils.prefService.setCharPref("installedVersion", this.curVersion);
+          this.addOnPrefs.setCharPref("installedVersion", this.addonVersion);
           F.LOG("UPGRADE");
           this._applyHooks("upgrade");
         }
@@ -67,17 +80,18 @@ var VersionChange = {
         this._applyHooks("reinstall");
       }
     }
+
   },
 
   initPrefs: function() {
-    firetray.Utils.prefService.setBoolPref("firstrun", false);
-    firetray.Utils.prefService.setCharPref("installedVersion", VersionChange.curVersion);
+    this.addOnPrefs.setBoolPref("firstrun", false);
+    this.addOnPrefs.setCharPref("installedVersion", VersionChange.addonVersion);
   },
 
-  _hooks: [],      // collection of callbacks {id: 1, categories: [], fun: function}
+  _hooks: [], // collection of callbacks {id: 1, categories: [], fun: function}
 
   addHook: function(categories, fun) {
-    if (!firetray.js.isArray(categories)) throw new CategoryError();
+    if (Object.prototype.toString.call(categories) !== "[object Array]") throw new TypeError();
     let id = this._hooks.push({})-1;
     this._hooks[id] = {id: id, categories: categories, fun: fun};
     return id;
@@ -89,10 +103,14 @@ var VersionChange = {
   },
 
   _applyHooks: function(category) {
-    for (let i=0,len=this._hooks.length; i<len; ++i) {
-      let cb = this._hooks[i];
-      if (cb.categories.indexOf(category)) cb.fun(this.curVersion);
-    }
+    try {
+      F.LOG("_hooks.len="+this._hooks.length+" category="+category);
+      for (let i=0,len=this._hooks.length; i<len; ++i) {
+        let cb = this._hooks[i];
+        if (cb.categories.indexOf(category) > -1) cb.fun();
+        else F.LOG("cb id="+cb.id+" not in category: "+cb.categories+"\n"+cb.fun);
+      }
+    } catch(x){F.ERROR(x);}
   }
 
 };
diff --git a/src/modules/commons.js b/src/modules/commons.js
index 47e7caa..ac64ed6 100644
--- a/src/modules/commons.js
+++ b/src/modules/commons.js
@@ -3,8 +3,8 @@
 /* for now, logging facilities (imported from logging.jsm) are automatically
    provided by this module */
 var EXPORTED_SYMBOLS =
-  [ "firetray", "F", "FIRETRAY_ID", "FIRETRAY_SPLASH_PAGE",
-    "FIRETRAY_APPLICATION_ICON_TYPE_THEMED",
+  [ "firetray", "F", "FIRETRAY_ID", "FIRETRAY_VERSION", "FIRETRAY_PREF_BRANCH",
+    "FIRETRAY_SPLASH_PAGE", "FIRETRAY_APPLICATION_ICON_TYPE_THEMED",
     "FIRETRAY_APPLICATION_ICON_TYPE_CUSTOM",
     "FIRETRAY_NOTIFICATION_UNREAD_MESSAGE_COUNT",
     "FIRETRAY_NOTIFICATION_NEWMAIL_ICON", "FIRETRAY_NOTIFICATION_CUSTOM_ICON",
@@ -20,11 +20,16 @@ const Cu = Components.utils;
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://firetray/logging.jsm");
 
+const FIRETRAY_VERSION     = "0.4.2"; // needed for sync call of onVersionChange() :(
+const FIRETRAY_PREF_BRANCH = "extensions.firetray.";
 const FIRETRAY_ID          = "{9533f794-00b4-4354-aa15-c2bbda6989f8}";
 const FIRETRAY_SPLASH_PAGE = "http://foudfou.github.com/FireTray/";
 
-const FIRETRAY_APPLICATION_ICON_TYPE_THEMED      = 0;
-const FIRETRAY_APPLICATION_ICON_TYPE_CUSTOM      = 1;
+const FIRETRAY_APPLICATION_ICON_TYPE_THEMED = 0;
+const FIRETRAY_APPLICATION_ICON_TYPE_CUSTOM = 1;
+
+const FIRETRAY_MESSAGE_COUNT_TYPE_UNREAD         = 0;
+const FIRETRAY_MESSAGE_COUNT_TYPE_NEW            = 1;
 
 const FIRETRAY_NOTIFICATION_UNREAD_MESSAGE_COUNT = 0;
 const FIRETRAY_NOTIFICATION_NEWMAIL_ICON         = 1;
@@ -34,9 +39,6 @@ const FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS = 500;
 const FIRETRAY_DELAY_NOWAIT_MILLISECONDS          = 0;
 const FIRETRAY_DELAY_PREF_CLEANING_MILLISECONDS   = 15*60*1000;
 
-const FIRETRAY_MESSAGE_COUNT_TYPE_UNREAD = 0;
-const FIRETRAY_MESSAGE_COUNT_TYPE_NEW    = 1;
-
 if ("undefined" == typeof(F)) {
   var F = {};                   // helper wrapper
 };
@@ -57,7 +59,7 @@ if ("undefined" == typeof(firetray)) {
 };
 
 firetray.Utils = {
-  prefService: Services.prefs.getBranch("extensions.firetray."),
+  prefService: Services.prefs.getBranch(FIRETRAY_PREF_BRANCH),
   strings: Services.strings.createBundle("chrome://firetray/locale/overlay.properties"),
 
   getObjPref: function(prefStr) {
@@ -70,7 +72,7 @@ firetray.Utils = {
     return objPref;
   },
   setObjPref: function(prefStr, obj) {
-    F.LOG(obj);
+    F.LOG("setObjPref: "+obj);
     try {
       firetray.Utils.prefService.setCharPref(prefStr, JSON.stringify(obj));
     } catch (x) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/firetray.git



More information about the Pkg-mozext-commits mailing list