This is just some static backup of the original site, don't expect every link to work!

source: content/vI_upgrade.js @ 509348

ng_0.9
Last change on this file since 509348 was 509348, checked in by rene <rene@…>, 8 years ago

code formatting (no code changes)

  • Property mode set to 100644
File size: 9.0 KB
Line 
1/* ***** BEGIN LICENSE BLOCK *****
2    This program is free software; you can redistribute it and/or modify
3    it under the terms of the GNU General Public License as published by
4    the Free Software Foundation; either version 2 of the License, or
5    (at your option) any later version.
6
7    This program is distributed in the hope that it will be useful,
8    but WITHOUT ANY WARRANTY; without even the implied warranty of
9    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10    GNU General Public License for more details.
11
12    You should have received a copy of the GNU General Public License
13    along with this program; if not, write to the Free Software
14    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
15
16    The Original Code is the Virtual Identity Extension.
17
18    The Initial Developer of the Original Code is Rene Ejury.
19    Portions created by the Initial Developer are Copyright (C) 2007
20    the Initial Developer. All Rights Reserved.
21
22    Contributor(s):
23 * ***** END LICENSE BLOCK ***** */
24
25Components.utils.import("resource://v_identity/vI_nameSpaceWrapper.js");
26virtualIdentityExtension.ns(function () {
27  with(virtualIdentityExtension.LIB) {
28
29    let Log = vI.setupLogging("virtualIdentity.upgrade");
30    Components.utils.import("resource://v_identity/vI_rdfDatasource.js", virtualIdentityExtension);
31    Components.utils.import("resource://v_identity/vI_account.js", virtualIdentityExtension);
32    Components.utils.import("resource://v_identity/vI_prefs.js", virtualIdentityExtension);
33
34    var upgrade = {
35      versionChecker: Components.classes["@mozilla.org/xpcom/version-comparator;1"]
36        .getService(Components.interfaces.nsIVersionComparator),
37
38      rdfDatasource: null,
39
40      quickUpgrade: function (currentVersion) {
41        upgrade.rdfDatasource = new vI.rdfDatasource("virtualIdentity.rdf", true);
42        if (upgrade.rdfDatasource.extUpgradeRequired())
43          upgrade.extUpgrade();
44        upgrade.rdfDatasource.refreshAccountInfo();
45        upgrade.rdfDatasource.clean();
46        return true;
47      },
48
49      extUpgrade: function () {
50        var currentVersion = upgrade.rdfDatasource.getCurrentExtFileVersion();
51        Log.debug("checking for previous version, found " +
52          currentVersion + "... extension-upgrade required.")
53        switch (currentVersion) {
54        case null:
55          // no break
56        default:
57          upgrade.__transferMovedUserPrefs(currentVersion);
58          upgrade.__removeObsoleteUserPrefs(currentVersion);
59          upgrade.__removeExtraAddedHeaders(currentVersion);
60          upgrade.__cleanupSmartMailboxFolders(currentVersion);
61        }
62        upgrade.rdfDatasource.storeExtVersion();
63        Log.debug("extension-upgrade to " + upgrade.rdfDatasource.getCurrentExtFileVersion() + " done.");
64      },
65
66      __cleanupSmartMailboxFolders: function (currentVersion) {
67        if ((!currentVersion || upgrade.versionChecker.compare(currentVersion, "0.9.26") < 0)) {
68          Log.debug("cleaning leftover 'smart mailboxes' == 'unified folder mailboxes'");
69          // remove obsolete 'smart mailboxes'=='unified folder' server entries
70          // this is only required because of a virtualIdentity bug introduced in 0.9.22 and fixed in 0.9.26
71
72          //  compare against all accounts, getAccountsArray() does not include 'smart mailboxes' == 'unified folders'
73          var all_accounts = vI.prefroot.getCharPref("mail.accountmanager.accounts").split(",");
74
75          for each(let pref in vI.prefroot.getChildList("mail.server")) {
76            if (pref.indexOf(".hostname") == pref.length - 9 && vI.prefroot.getCharPref(pref) == "smart mailboxes") {
77              // ok, smart mailbox server found, check if it still in use
78              let server = pref.replace(/^mail\.server\./, "").replace(/\.hostname$/, "");
79              let inUse = false;
80              for each(let account in all_accounts) {
81                if (vI.prefroot.getCharPref("mail.account." + account + ".server") == server)
82                  inUse = true;
83              }
84              if (!inUse) {
85                Log.debug("cleaning leftover 'smart mailbox' for server " + server);
86                for each(let obsoletePref in vI.prefroot.getChildList("mail.server." + server)) {
87                  if (obsoletePref.indexOf(".directory") == obsoletePref.length - 10) {
88                    // remove obsolete 'smart mailbox' directory
89                    try {
90                      let file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
91                      file.initWithPath(vI.prefroot.getCharPref(obsoletePref));
92                      Log.debug("removing obsolete storage Folder " + vI.prefroot.getCharPref(obsoletePref));
93                      file.remove(true);
94                    } catch (NS_ERROR_FILE_UNRECOGNIZED_PATH) {};
95                  }
96                  vI.prefroot.clearUserPref(obsoletePref);
97                }
98              }
99            }
100          }
101        }
102      },
103
104      __removeExtraAddedHeaders: function (currentVersion) {
105        if ((!currentVersion || upgrade.versionChecker.compare(currentVersion, "0.6.9") < 0) &&
106          vI.prefroot.getCharPref("mailnews.headers.extraExpandedHeaders") != "") {
107          // clean extraExpandedHeaders once, because the whole header-saving and restoring was broken too long
108          Log.debug("cleaning extraExpandedHeaders");
109          vI.prefroot.setCharPref("mailnews.headers.extraExpandedHeaders", "")
110          Log.debug("cleaned extraExpandedHeaders");
111        }
112      },
113
114      __transferMovedUserPrefs: function (currentVersion) {
115        // transfer renamed preferences
116        var transferPrefs = [{
117          version: "0.5.3",
118          prefs: Array({
119            sourcePref: "smart_reply_ask",
120            targetPref: "idSelection_ask"
121          }, {
122            sourcePref: "smart_reply_ask_always",
123            targetPref: "idSelection_ask_always"
124          }, {
125            sourcePref: "smart_reply_autocreate",
126            targetPref: "idSelection_autocreate"
127          }, {
128            sourcePref: "smart_timestamp",
129            targetPref: "autoTimestamp"
130          }, {
131            sourcePref: "storage_prefer_smart_reply",
132            targetPref: "idSelection_storage_prefer_smart_reply"
133          }, {
134            sourcePref: "storage_ignore_smart_reply",
135            targetPref: "idSelection_storage_ignore_smart_reply"
136          })
137        }];
138        // remove obsolete preference-tree virtualIdentity
139        for (var i = 0; i < transferPrefs.length; i++) {
140          // if former version of extension was at least 0.5.0, start with WizardPage 0.5.2
141          if (!currentVersion || (upgrade.versionChecker.compare(currentVersion, transferPrefs[i].version) < 0)) {
142            // remove any obsolete preferences under extensions.virtualIdentity
143            Log.debug("transfer changed preferences of pre-" + transferPrefs[i].version + " release...")
144            for each(let transferPref in transferPrefs[i].prefs) {
145              try {
146                vI.vIprefs.commit(transferPref.targetPref,
147                  vI.vIprefs.get(transferPref.sourcePref));
148                vI.vIprefs.clearUserPref(transferPref.sourcePref);
149              } catch (e) {};
150            }
151            Log.debug("done.")
152          }
153        }
154      },
155
156      __removeObsoleteUserPrefs: function (currentVersion) {
157        var obsoletePrefs = [{
158          version: "0.5.0",
159          prefs: Array("aBook_use", "aBook_storedefault", "aBook_dont_update_multiple",
160            "aBook_show_switch", "aBook_warn_update", "aBook_use_for_smart_reply",
161            "aBook_prefer_smart_reply", "aBook_ignore_smart_reply", "aBook_warn_vI_replace",
162            "aBook_use_non_vI", "aBook_notification", "storeVIdentity", "experimental",
163            "storage_use_for_smart_reply")
164        }, {
165          version: "0.5.3",
166          prefs: Array("storage_use_for_smart_reply")
167        }, {
168          version: "0.5.6",
169          prefs: Array("copyEnigmailSettings")
170        }, {
171          version: "0.9",
172          prefs: Array("extensions.virtualIdentity.{2ab1b709-ba03-4361-abf9-c50b964ff75d}",
173            "extensions.virtualIdentity.{847b3a00-7ab1-11d4-8f02-006008948af5}",
174            "extensions.virtualIdentity.smart_reply_added_extraHeaders",
175            "mailnews.headers.extraExpandedHeaders")
176        }];
177        // remove obsolete preference-tree virtualIdentity
178        for (var i = 0; i < obsoletePrefs.length; i++) {
179          // if former version of extension was at least 0.5.0, start with WizardPage 0.5.2
180          if (!currentVersion || (upgrade.versionChecker.compare(currentVersion, obsoletePrefs[i].version) < 0)) {
181            // remove any obsolete preferences under extensions.virtualIdentity
182            Log.debug("removing obsolete preferences of pre-" + obsoletePrefs[i].version + " release...")
183            for each(let pref in obsoletePrefs[i].prefs) {
184              try {
185                vI.vIprefs.clearUserPref(pref);
186                Log.debug(".")
187              } catch (e) {};
188            }
189            Log.debug("done.")
190          }
191        }
192      },
193    }
194    vI.upgrade = upgrade;
195  }
196});
Note: See TracBrowser for help on using the repository browser.