[Pkg-mozext-commits] [firetray] 144/399: handle version changes

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:23:30 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 9d2c74ce13fdb12560c12e6bb98bda73a6d3754e
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Wed Jan 18 22:13:32 2012 +0100

    handle version changes
    
    For now, display a web page for release notes on install, upgrade and re-install.
---
 TODO                                  |    3 +
 src/defaults/preferences/prefs.js     |    1 +
 src/modules/FiretrayHandler.jsm       |    3 +
 src/modules/FiretrayVersionChange.jsm |  113 +++++++++++++++++++++++++++++++++
 4 files changed, 120 insertions(+)

diff --git a/TODO b/TODO
index 7c76f3b..2e0068e 100644
--- a/TODO
+++ b/TODO
@@ -1,6 +1,9 @@
 TODO
 ----
 
+* when updating from 0.3 to 0.4, since prefs names have changed, will we need
+  to unsinstall addon ?
+
 * add entry to popup menu when registering
 
 WONTFIX
diff --git a/src/defaults/preferences/prefs.js b/src/defaults/preferences/prefs.js
index 495476b..70fbaa9 100644
--- a/src/defaults/preferences/prefs.js
+++ b/src/defaults/preferences/prefs.js
@@ -5,6 +5,7 @@ pref("extensions.{9533f794-00b4-4354-aa15-c2bbda6989f8}.description", "chrome://
 pref("browser.tabs.warnOnClose", false);
 
 // Extension prefs
+pref("extensions.firetray.firstrun", true);
 
 pref("extensions.firetray.hides_on_close", true);
 pref("extensions.firetray.hides_on_minimize", true);
diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index c035ca1..5f5db44 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -11,6 +11,7 @@ Cu.import("resource://gre/modules/ctypes.jsm");
 Cu.import("resource://firetray/ctypes/gobject.jsm");
 Cu.import("resource://firetray/ctypes/gtk.jsm");
 Cu.import("resource://firetray/commons.js");
+Cu.import("resource://firetray/FiretrayVersionChange.jsm");
 
 /**
  * firetray namespace.
@@ -97,6 +98,8 @@ firetray.Handler = {
     Services.obs.addObserver(this, this.getAppStartupTopic(this.appId), false);
     Services.obs.addObserver(this, "xpcom-will-shutdown", false);
 
+    firetray.VersionChange.watch();
+
     this.initialized = true;
     return true;
   },
diff --git a/src/modules/FiretrayVersionChange.jsm b/src/modules/FiretrayVersionChange.jsm
new file mode 100644
index 0000000..4f1a710
--- /dev/null
+++ b/src/modules/FiretrayVersionChange.jsm
@@ -0,0 +1,113 @@
+var EXPORTED_SYMBOLS = [ "firetray" ];
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+const Cu = Components.utils;
+
+Cu.import("resource://gre/modules/AddonManager.jsm");
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://firetray/commons.js");
+
+const FIRETRAY_ID = "{9533f794-00b4-4354-aa15-c2bbda6989f8}";
+const FIRETRAY_SPLASH_PAGE = "http://foudfou.github.com/FireTray/";
+
+/**
+ * handles version changes, by doing things like opening a tab for release notes
+ */
+firetray.VersionChange = {
+
+  watch: function() {
+    AddonManager.addAddonListener(this.uninstallListener);
+    AddonManager.getAddonByID(FIRETRAY_ID, this.onVersionChange.bind(this));
+    LOG("version change watching enabled");
+  },
+
+  // we need to remove pref 'installedVersion' on uninstalling to be able to
+  // detect reinstall later
+  uninstallListener: {
+    onUninstalling: function(addon) {
+      if (addon.id !== FIRETRAY_ID) return;
+      firetray.Utils.prefService.clearUserPref("installedVersion");
+    },
+    onOperationCancelled: function(addon) {
+      if (addon.id !== FIRETRAY_ID) return;
+      let beingUninstalled = (addon.pendingOperations & AddonManager.PENDING_UNINSTALL) != 0;
+      if (beingUninstalled)
+        firetray.Utils.prefService.clearUserPref("installedVersion");
+    }
+  },
+
+  openMailTab: function() {
+    let mail3PaneWindow = Services.wm.getMostRecentWindow("mail:3pane");
+    if (mail3PaneWindow) {
+      var tabmail = mail3PaneWindow.document.getElementById("tabmail");
+      mail3PaneWindow.focus();
+    }
+
+    if (tabmail) {
+      var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
+      timer.initWithCallback({ notify: function() {
+        LOG("openMailTab");
+        tabmail.openTab("contentTab", {contentPage: FIRETRAY_SPLASH_PAGE});
+      }}, FIRETRAY_BROWSER_STARTUP_DELAY_MILLISECONDS, Ci.nsITimer.TYPE_ONE_SHOT);
+    }
+  },
+
+  openBrowserTab: function() {
+    let win = Services.wm.getMostRecentWindow("navigator:browser");
+    WARN("WIN="+win);
+    if (win) {
+      var mainWindow = win.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
+            .getInterface(Components.interfaces.nsIWebNavigation)
+            .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
+            .rootTreeItem
+            .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
+            .getInterface(Components.interfaces.nsIDOMWindow);
+
+      mainWindow.setTimeout(function(win){
+        LOG("openBrowser");
+        mainWindow.gBrowser.selectedTab = mainWindow.gBrowser.addTab(FIRETRAY_SPLASH_PAGE);
+      }, 1000);
+    }
+  },
+
+  openTab: function() {
+    let appId = Services.appinfo.ID;
+    if (appId === THUNDERBIRD_ID)
+      this.openMailTab();
+    else if (appId === FIREFOX_ID || appId === SEAMONKEY_ID)
+      this.openBrowserTab();
+    else
+      ERROR("unsupported application");
+  },
+
+  onVersionChange: function(addon) {
+    LOG("VERSION: "+addon.version);
+
+    var curVersion = addon.version;
+    var firstrun = firetray.Utils.prefService.getBoolPref("firstrun");
+
+    if (firstrun) {
+      firetray.Utils.prefService.setBoolPref("firstrun", false);
+      firetray.Utils.prefService.setCharPref("installedVersion", curVersion);
+      WARN("FIRST RUN");
+      this.openTab();
+
+    } else {
+      try {
+        var installedVersion = firetray.Utils.prefService.getCharPref("installedVersion");
+        var versionDelta = Cc["@mozilla.org/xpcom/version-comparator;1"].getService(Ci.nsIVersionComparator)
+              .compare(curVersion, installedVersion);
+        if (versionDelta > 0) {
+          firetray.Utils.prefService.setCharPref("installedVersion", curVersion);
+          WARN("UPGRADE");
+          this.openTab();
+        }
+      } catch (ex) {
+        WARN("REINSTALL");
+        this.openTab();
+      }
+    }
+  }
+
+};

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