[Pkg-mozext-commits] [firetray] 265/399: refactor VersionChange handling

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 d8448f421bc5d965ba0535b24947ef72625b0a17
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Fri Aug 3 13:53:40 2012 +0200

    refactor VersionChange handling
---
 src/modules/FiretrayHandler.jsm |  141 ++++++++++++++++++++-------------------
 src/modules/VersionChange.jsm   |   33 ++++++---
 2 files changed, 97 insertions(+), 77 deletions(-)

diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index 8176467..c64469f 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -105,14 +105,9 @@ firetray.Handler = {
     Services.obs.addObserver(this, "xpcom-will-shutdown", false);
     Services.obs.addObserver(this, "profile-change-teardown", false);
 
-    let welcome = function(ver) {
-      firetray.Handler.openTab(FIRETRAY_SPLASH_PAGE+"#v"+ver);
-      firetray.Handler.tryEraseOldOptions();
-      firetray.Handler.correctMailNotificationType();
-    };
-    VersionChange.setInstallHook(welcome);
-    VersionChange.setUpgradeHook(welcome);
-    VersionChange.setReinstallHook(welcome);
+    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();
@@ -292,10 +287,78 @@ firetray.Handler = {
     } catch (x) { F.ERROR(x); }
   },
 
+  quitApplication: function() {
+    try {
+      firetray.Utils.timer(function() {
+        let appStartup = Cc['@mozilla.org/toolkit/app-startup;1']
+          .getService(Ci.nsIAppStartup);
+        appStartup.quit(Ci.nsIAppStartup.eAttemptQuit);
+      }, FIRETRAY_DELAY_NOWAIT_MILLISECONDS, Ci.nsITimer.TYPE_ONE_SHOT);
+    } catch (x) { F.ERROR(x); }
+  },
+
+  preventWarnOnClose: function() {
+    if (!this.inBrowserApp) return;
+    let generalTabsPrefs = Services.prefs.getBranch("browser.tabs.");
+    this.warnOnCloseTmp = generalTabsPrefs.getBoolPref('warnOnClose');
+    F.LOG("warnOnClose saved. was: "+this.warnOnCloseTmp);
+    generalTabsPrefs.setBoolPref('warnOnClose', false);
+  },
+  restoreWarnOnClose: function() {
+    if (!this.inBrowserApp && !this.warnOnCloseTmp) return;
+    let generalTabsPrefs = Services.prefs.getBranch("browser.tabs.");
+    generalTabsPrefs.setBoolPref('warnOnClose', this.warnOnCloseTmp);
+    F.LOG("warnOnClose restored to: "+this.warnOnCloseTmp);
+  }
+
+}; // firetray.Handler
+
+
+firetray.PrefListener = new PrefListener(
+  "extensions.firetray.",
+  function(branch, name) {
+    F.LOG('Pref changed: '+name);
+    switch (name) {
+    case 'hides_single_window':
+      firetray.Handler.showHidePopupMenuItems();
+      break;
+    case 'show_icon_on_hide':
+      firetray.Handler.showHideIcon();
+      break;
+    case 'new_mail_icon_names':
+      firetray.StatusIcon.loadThemedIcons();
+    case 'message_count_type':
+    case 'folder_count_recursive':
+      firetray.Messaging.updateMsgCountWithCb();
+      break;
+    case 'app_mail_icon_names':
+    case 'app_browser_icon_names':
+    case 'app_default_icon_names':
+      firetray.StatusIcon.loadThemedIcons();
+    case 'app_icon_type':
+      if (firetray.Handler.inMailApp)
+        firetray.Messaging.updateMsgCountWithCb();
+      else
+        firetray.Handler.setIconImageDefault();
+      break;
+    default:
+    }
+  });
+
+
+firetray.VersionChangeHandler = {
+
+  showReleaseNotes: function(ver) {
+    firetray.Handler.openTab(FIRETRAY_SPLASH_PAGE+"#v"+ver);
+    firetray.Handler.tryEraseOldOptions();
+    firetray.Handler.correctMailNotificationType();
+  },
+
   openTab: function(url) {
-    if (this.appId === F.THUNDERBIRD_ID)
+    if (firetray.Handler.appId === F.THUNDERBIRD_ID)
       this.openMailTab(url);
-    else if (this.appId === F.FIREFOX_ID || this.appId === F.SEAMONKEY_ID)
+    else if (firetray.Handler.appId === F.FIREFOX_ID ||
+             firetray.Handler.appId === F.SEAMONKEY_ID)
       this.openBrowserTab(url);
     else
       F.ERROR("unsupported application");
@@ -359,62 +422,6 @@ firetray.Handler = {
         FIRETRAY_MESSAGE_COUNT_TYPE_NEW)
       firetray.Utils.prefService.setIntPref('mail_notification_type',
         FIRETRAY_NOTIFICATION_NEWMAIL_ICON);
-  },
-
-  quitApplication: function() {
-    try {
-      firetray.Utils.timer(function() {
-        let appStartup = Cc['@mozilla.org/toolkit/app-startup;1']
-          .getService(Ci.nsIAppStartup);
-        appStartup.quit(Ci.nsIAppStartup.eAttemptQuit);
-      }, FIRETRAY_DELAY_NOWAIT_MILLISECONDS, Ci.nsITimer.TYPE_ONE_SHOT);
-    } catch (x) { F.ERROR(x); }
-  },
-
-  preventWarnOnClose: function() {
-    if (!this.inBrowserApp) return;
-    let generalTabsPrefs = Services.prefs.getBranch("browser.tabs.");
-    this.warnOnCloseTmp = generalTabsPrefs.getBoolPref('warnOnClose');
-    F.LOG("warnOnClose saved. was: "+this.warnOnCloseTmp);
-    generalTabsPrefs.setBoolPref('warnOnClose', false);
-  },
-  restoreWarnOnClose: function() {
-    if (!this.inBrowserApp && !this.warnOnCloseTmp) return;
-    let generalTabsPrefs = Services.prefs.getBranch("browser.tabs.");
-    generalTabsPrefs.setBoolPref('warnOnClose', this.warnOnCloseTmp);
-    F.LOG("warnOnClose restored to: "+this.warnOnCloseTmp);
   }
 
-}; // firetray.Handler
-
-
-firetray.PrefListener = new PrefListener(
-  "extensions.firetray.",
-  function(branch, name) {
-    F.LOG('Pref changed: '+name);
-    switch (name) {
-    case 'hides_single_window':
-      firetray.Handler.showHidePopupMenuItems();
-      break;
-    case 'show_icon_on_hide':
-      firetray.Handler.showHideIcon();
-      break;
-    case 'new_mail_icon_names':
-      firetray.StatusIcon.loadThemedIcons();
-    case 'message_count_type':
-    case 'folder_count_recursive':
-      firetray.Messaging.updateMsgCountWithCb();
-      break;
-    case 'app_mail_icon_names':
-    case 'app_browser_icon_names':
-    case 'app_default_icon_names':
-      firetray.StatusIcon.loadThemedIcons();
-    case 'app_icon_type':
-      if (firetray.Handler.inMailApp)
-        firetray.Messaging.updateMsgCountWithCb();
-      else
-        firetray.Handler.setIconImageDefault();
-      break;
-    default:
-    }
-  });
+};
diff --git a/src/modules/VersionChange.jsm b/src/modules/VersionChange.jsm
index dcf579b..8fa7730 100644
--- a/src/modules/VersionChange.jsm
+++ b/src/modules/VersionChange.jsm
@@ -10,7 +10,6 @@ Cu.import("resource://firetray/commons.js");
 
 /**
  * handles version changes.
- * use setInstallHook(), setUpgradeHook(), setReinstallHook()
  * http://mike.kaply.com/2011/02/02/running-add-on-code-at-first-run-and-upgrade/
  */
 var VersionChange = {
@@ -50,7 +49,7 @@ var VersionChange = {
     if (firstrun) {
       F.LOG("FIRST RUN");
       this.initPrefs();
-      this.installHook(this.curVersion);
+      this._applyHooks("install");
 
     } else {
       try {
@@ -59,13 +58,13 @@ var VersionChange = {
         if (versionDelta > 0) {
           firetray.Utils.prefService.setCharPref("installedVersion", this.curVersion);
           F.LOG("UPGRADE");
-          this.upgradeHook(this.curVersion);
+          this._applyHooks("upgrade");
         }
 
       } catch (ex) {
         F.LOG("REINSTALL");
         this.initPrefs();
-        this.reinstallHook(this.curVersion);
+        this._applyHooks("reinstall");
       }
     }
   },
@@ -75,11 +74,25 @@ var VersionChange = {
     firetray.Utils.prefService.setCharPref("installedVersion", VersionChange.curVersion);
   },
 
-  installHook: function(ver){},
-  upgradeHook: function(ver){},
-  reinstallHook: function(ver){},
-  setInstallHook: function(fun) {this.installHook = fun;},
-  setUpgradeHook: function(fun) {this.upgradeHook = fun;},
-  setReinstallHook: function(fun) {this.reinstallHook = fun;}
+  _hooks: [],      // collection of callbacks {id: 1, categories: [], fun: function}
+
+  addHook: function(categories, fun) {
+    if (!firetray.js.isArray(categories)) throw new CategoryError();
+    let id = this._hooks.push({})-1;
+    this._hooks[id] = {id: id, categories: categories, fun: fun};
+    return id;
+  },
+
+  removeHook: function(id) {return this._hooks[id].splice(id-1, 1);},
+  removeCategoryFromHook: function(category, id) {
+    throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
+  },
+
+  _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);
+    }
+  }
 
 };

-- 
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