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

source: content/vI_upgrade.js @ 0f7e1c

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

for each is deprecated

  • Property mode set to 100644
File size: 9.1 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(window, "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 (let pref of vI.prefroot.getChildList("mail.server")) {
76             
77             
78            if (pref.indexOf(".hostname") == pref.length - 9 && vI.prefroot.getCharPref(pref) == "smart mailboxes") {
79              // ok, smart mailbox server found, check if it still in use
80              let server = pref.replace(/^mail\.server\./, "").replace(/\.hostname$/, "");
81              let inUse = false;
82              for (let account of all_accounts) {
83                if (vI.prefroot.getCharPref("mail.account." + account + ".server") == server)
84                  inUse = true;
85              }
86              if (!inUse) {
87                Log.debug("cleaning leftover 'smart mailbox' for server " + server);
88                for (let obsoletePref of vI.prefroot.getChildList("mail.server." + server)) {
89                  if (obsoletePref.indexOf(".directory") == obsoletePref.length - 10) {
90                    // remove obsolete 'smart mailbox' directory
91                    try {
92                      let file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
93                      file.initWithPath(vI.prefroot.getCharPref(obsoletePref));
94                      Log.debug("removing obsolete storage Folder " + vI.prefroot.getCharPref(obsoletePref));
95                      file.remove(true);
96                    } catch (NS_ERROR_FILE_UNRECOGNIZED_PATH) {};
97                  }
98                  vI.prefroot.clearUserPref(obsoletePref);
99                }
100              }
101            }
102          }
103        }
104      },
105
106      __removeExtraAddedHeaders: function (currentVersion) {
107        if ((!currentVersion || upgrade.versionChecker.compare(currentVersion, "0.6.9") < 0) &&
108          vI.prefroot.getCharPref("mailnews.headers.extraExpandedHeaders") != "") {
109          // clean extraExpandedHeaders once, because the whole header-saving and restoring was broken too long
110          Log.debug("cleaning extraExpandedHeaders");
111          vI.prefroot.setCharPref("mailnews.headers.extraExpandedHeaders", "")
112          Log.debug("cleaned extraExpandedHeaders");
113        }
114      },
115
116      __transferMovedUserPrefs: function (currentVersion) {
117        // transfer renamed preferences
118        var transferPrefs = [{
119          version: "0.5.3",
120          prefs: Array({
121            sourcePref: "smart_reply_ask",
122            targetPref: "idSelection_ask"
123          }, {
124            sourcePref: "smart_reply_ask_always",
125            targetPref: "idSelection_ask_always"
126          }, {
127            sourcePref: "smart_reply_autocreate",
128            targetPref: "idSelection_autocreate"
129          }, {
130            sourcePref: "smart_timestamp",
131            targetPref: "autoTimestamp"
132          }, {
133            sourcePref: "storage_prefer_smart_reply",
134            targetPref: "idSelection_storage_prefer_smart_reply"
135          }, {
136            sourcePref: "storage_ignore_smart_reply",
137            targetPref: "idSelection_storage_ignore_smart_reply"
138          })
139        }];
140        // remove obsolete preference-tree virtualIdentity
141        for (var i = 0; i < transferPrefs.length; i++) {
142          // if former version of extension was at least 0.5.0, start with WizardPage 0.5.2
143          if (!currentVersion || (upgrade.versionChecker.compare(currentVersion, transferPrefs[i].version) < 0)) {
144            // remove any obsolete preferences under extensions.virtualIdentity
145            Log.debug("transfer changed preferences of pre-" + transferPrefs[i].version + " release...")
146            for (let transferPref of transferPrefs[i].prefs) {
147              try {
148                vI.vIprefs.commit(transferPref.targetPref,
149                  vI.vIprefs.get(transferPref.sourcePref));
150                vI.vIprefs.clearUserPref(transferPref.sourcePref);
151              } catch (e) {};
152            }
153            Log.debug("done.")
154          }
155        }
156      },
157
158      __removeObsoleteUserPrefs: function (currentVersion) {
159        var obsoletePrefs = [{
160          version: "0.5.0",
161          prefs: Array("aBook_use", "aBook_storedefault", "aBook_dont_update_multiple",
162            "aBook_show_switch", "aBook_warn_update", "aBook_use_for_smart_reply",
163            "aBook_prefer_smart_reply", "aBook_ignore_smart_reply", "aBook_warn_vI_replace",
164            "aBook_use_non_vI", "aBook_notification", "storeVIdentity", "experimental",
165            "storage_use_for_smart_reply")
166        }, {
167          version: "0.5.3",
168          prefs: Array("storage_use_for_smart_reply")
169        }, {
170          version: "0.5.6",
171          prefs: Array("copyEnigmailSettings")
172        }, {
173          version: "0.9",
174          prefs: Array("extensions.virtualIdentity.{2ab1b709-ba03-4361-abf9-c50b964ff75d}",
175            "extensions.virtualIdentity.{847b3a00-7ab1-11d4-8f02-006008948af5}",
176            "extensions.virtualIdentity.smart_reply_added_extraHeaders",
177            "mailnews.headers.extraExpandedHeaders")
178        }];
179        // remove obsolete preference-tree virtualIdentity
180        for (var i = 0; i < obsoletePrefs.length; i++) {
181          // if former version of extension was at least 0.5.0, start with WizardPage 0.5.2
182          if (!currentVersion || (upgrade.versionChecker.compare(currentVersion, obsoletePrefs[i].version) < 0)) {
183            // remove any obsolete preferences under extensions.virtualIdentity
184            Log.debug("removing obsolete preferences of pre-" + obsoletePrefs[i].version + " release...")
185            for (let pref of obsoletePrefs[i].prefs) {
186              try {
187                vI.vIprefs.clearUserPref(pref);
188                Log.debug(".")
189              } catch (e) {};
190            }
191            Log.debug("done.")
192          }
193        }
194      },
195    }
196    vI.upgrade = upgrade;
197  }
198});
Note: See TracBrowser for help on using the repository browser.