Changeset 509348 for content/vI_upgrade.js
- Timestamp:
- Nov 3, 2014, 12:35:40 PM (8 years ago)
- Branches:
- ng_0.9
- Children:
- 7204cb
- Parents:
- 3c9c29
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
content/vI_upgrade.js
r3c9c29 r509348 24 24 25 25 Components.utils.import("resource://v_identity/vI_nameSpaceWrapper.js"); 26 virtualIdentityExtension.ns(function() { with (virtualIdentityExtension.LIB) { 26 virtualIdentityExtension.ns(function () { 27 with(virtualIdentityExtension.LIB) { 27 28 28 let Log = vI.setupLogging("virtualIdentity.upgrade");29 Components.utils.import("resource://v_identity/vI_rdfDatasource.js", virtualIdentityExtension);30 Components.utils.import("resource://v_identity/vI_account.js", virtualIdentityExtension);31 Components.utils.import("resource://v_identity/vI_prefs.js", virtualIdentityExtension);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); 32 33 33 var upgrade = { 34 versionChecker : Components.classes["@mozilla.org/xpcom/version-comparator;1"] 35 .getService(Components.interfaces.nsIVersionComparator), 36 37 rdfDatasource : null, 34 var upgrade = { 35 versionChecker: Components.classes["@mozilla.org/xpcom/version-comparator;1"] 36 .getService(Components.interfaces.nsIVersionComparator), 38 37 39 quickUpgrade : function(currentVersion) { 40 upgrade.rdfDatasource = new vI.rdfDatasource("virtualIdentity.rdf", true); 41 if (upgrade.rdfDatasource.extUpgradeRequired()) 42 upgrade.extUpgrade(); 43 upgrade.rdfDatasource.refreshAccountInfo(); 44 upgrade.rdfDatasource.clean(); 45 return true; 46 }, 38 rdfDatasource: null, 47 39 48 extUpgrade : function() { 49 var currentVersion = upgrade.rdfDatasource.getCurrentExtFileVersion(); 50 Log.debug("checking for previous version, found " + 51 currentVersion + "... extension-upgrade required.") 52 switch (currentVersion) { 53 case null: 54 // no break 55 default: 56 upgrade.__transferMovedUserPrefs(currentVersion); 57 upgrade.__removeObsoleteUserPrefs(currentVersion); 58 upgrade.__removeExtraAddedHeaders(currentVersion); 59 upgrade.__cleanupSmartMailboxFolders(currentVersion); 60 } 61 upgrade.rdfDatasource.storeExtVersion(); 62 Log.debug("extension-upgrade to " + upgrade.rdfDatasource.getCurrentExtFileVersion() + " done."); 63 }, 64 65 __cleanupSmartMailboxFolders : function(currentVersion) { 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) { 66 67 if ((!currentVersion || upgrade.versionChecker.compare(currentVersion, "0.9.26") < 0)) { 67 68 69 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 70 71 71 72 72 // compare against all accounts, getAccountsArray() does not include 'smart mailboxes' == 'unified folders' 73 var all_accounts = vI.prefroot.getCharPref("mail.accountmanager.accounts").split(","); 73 74 74 for each (let pref in vI.prefroot.getChildList("mail.server")) { 75 if (pref.indexOf(".hostname") == pref.length - 9 && vI.prefroot.getCharPref(pref) == "smart mailboxes") { 76 // ok, smart mailbox server found, check if it still in use 77 let server = pref.replace(/^mail\.server\./,"").replace(/\.hostname$/,""); 78 let inUse = false; 79 for each (let account in all_accounts) { 80 if (vI.prefroot.getCharPref("mail.account." + account + ".server") == server) 81 inUse = true; 82 } 83 if (!inUse) { 84 Log.debug("cleaning leftover 'smart mailbox' for server " + server); 85 for each (let obsoletePref in vI.prefroot.getChildList("mail.server." + server)) { 86 if (obsoletePref.indexOf(".directory") == obsoletePref.length - 10) { 87 // remove obsolete 'smart mailbox' directory 88 try { 89 let file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile); 90 file.initWithPath(vI.prefroot.getCharPref(obsoletePref)); 91 Log.debug("removing obsolete storage Folder " + vI.prefroot.getCharPref(obsoletePref)); 92 file.remove(true); 93 } catch (NS_ERROR_FILE_UNRECOGNIZED_PATH) { }; 94 } 95 vI.prefroot.clearUserPref(obsoletePref); 96 } 97 } 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); 98 97 } 98 } 99 99 } 100 } 100 101 } 101 },102 103 __removeExtraAddedHeaders : function(currentVersion) {104 if ((!currentVersion || upgrade.versionChecker.compare(currentVersion, "0.6.9") < 0) && 105 106 107 108 109 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"); 110 111 } 111 }, 112 113 __transferMovedUserPrefs : function(currentVersion) { 114 // transfer renamed preferences 115 var transferPrefs = [ { version : "0.5.3", 116 prefs : Array({ sourcePref : "smart_reply_ask", targetPref : "idSelection_ask" }, 117 { sourcePref : "smart_reply_ask_always", targetPref : "idSelection_ask_always" }, 118 { sourcePref : "smart_reply_autocreate", targetPref : "idSelection_autocreate" }, 119 { sourcePref : "smart_timestamp", targetPref : "autoTimestamp" }, 120 { sourcePref : "storage_prefer_smart_reply", targetPref : "idSelection_storage_prefer_smart_reply" }, 121 { sourcePref : "storage_ignore_smart_reply", targetPref : "idSelection_storage_ignore_smart_reply" }) }]; 122 // remove obsolete preference-tree virtualIdentity 123 for (var i = 0; i < transferPrefs.length; i++) { 124 // if former version of extension was at least 0.5.0, start with WizardPage 0.5.2 125 if (!currentVersion || (upgrade.versionChecker.compare(currentVersion, transferPrefs[i].version) < 0)) { 126 // remove any obsolete preferences under extensions.virtualIdentity 127 Log.debug("transfer changed preferences of pre-" + transferPrefs[i].version + " release...") 128 for each (let transferPref in transferPrefs[i].prefs) { 129 try { vI.vIprefs.commit(transferPref.targetPref, 130 vI.vIprefs.get(transferPref.sourcePref)); 131 vI.vIprefs.clearUserPref(transferPref.sourcePref); 132 } 133 catch (e) { }; 134 } 135 Log.debug("done.") 136 } 137 } 138 }, 139 140 __removeObsoleteUserPrefs : function(currentVersion) { 141 var obsoletePrefs = [ { version : "0.5.0", 142 prefs : Array("aBook_use", "aBook_storedefault", "aBook_dont_update_multiple", 143 "aBook_show_switch", "aBook_warn_update", "aBook_use_for_smart_reply", 144 "aBook_prefer_smart_reply", "aBook_ignore_smart_reply", "aBook_warn_vI_replace", 145 "aBook_use_non_vI", "aBook_notification", "storeVIdentity", "experimental", 146 "storage_use_for_smart_reply") }, 147 { version : "0.5.3", prefs : Array("storage_use_for_smart_reply") }, 148 { version : "0.5.6", prefs : Array("copyEnigmailSettings") }, 149 { version: "0.9", prefs : Array("extensions.virtualIdentity.{2ab1b709-ba03-4361-abf9-c50b964ff75d}", 150 "extensions.virtualIdentity.{847b3a00-7ab1-11d4-8f02-006008948af5}", 151 "extensions.virtualIdentity.smart_reply_added_extraHeaders", 152 "mailnews.headers.extraExpandedHeaders") } 153 ]; 154 // remove obsolete preference-tree virtualIdentity 155 for (var i = 0; i < obsoletePrefs.length; i++) { 156 // if former version of extension was at least 0.5.0, start with WizardPage 0.5.2 157 if (!currentVersion || (upgrade.versionChecker.compare(currentVersion, obsoletePrefs[i].version) < 0)) { 158 // remove any obsolete preferences under extensions.virtualIdentity 159 Log.debug("removing obsolete preferences of pre-" + obsoletePrefs[i].version + " release...") 160 for each (let pref in obsoletePrefs[i].prefs) { 161 try { vI.vIprefs.clearUserPref(pref); Log.debug(".") } 162 catch (e) { }; 163 } 164 Log.debug("done.") 165 } 166 } 167 }, 168 } 169 vI.upgrade = upgrade; 170 }}); 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 TracChangeset
for help on using the changeset viewer.