From 3d78c2b4d85657c621bd0cbbb73469e52daf340f Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Tue, 29 Dec 2009 22:21:54 +0000 Subject: [PATCH] Closes #1543, Add db integrity check for 1.0 to 2.0 upgrades Also added different text coming from 1.0 with a link to http://zotero.org/support/upgrade, which needs content --- chrome/content/zotero/upgrade.xul | 72 +++++++++++++++++--- chrome/content/zotero/xpcom/schema.js | 19 +++++- chrome/content/zotero/xpcom/zotero.js | 13 ++-- chrome/locale/en-US/zotero/zotero.dtd | 4 ++ chrome/locale/en-US/zotero/zotero.properties | 4 ++ chrome/skin/default/zotero/upgrade.css | 2 +- 6 files changed, 96 insertions(+), 18 deletions(-) diff --git a/chrome/content/zotero/upgrade.xul b/chrome/content/zotero/upgrade.xul index a97336148..5a214291b 100644 --- a/chrome/content/zotero/upgrade.xul +++ b/chrome/content/zotero/upgrade.xul @@ -14,7 +14,6 @@ this.init = init; this.onAdvance = onAdvance; this.doUpgrade = doUpgrade; - this.onChangeLogLinkClick = onChangeLogLinkClick; var obj = window.arguments[0].wrappedJSObject; var Zotero = obj.Zotero; @@ -23,9 +22,18 @@ function init() { var wizard = document.getElementById('zotero-schema-upgrade'); - var continueButtonName = wizard.getButton('next').getAttribute('label'); + var continueButton = wizard.getButton('next'); + continueButton.focus(); // prevent focusing upgrade instructions link + + // Use proper button name in text + var continueButtonName = continueButton.getAttribute('label'); var str = Zotero.getString('upgrade.advanceMessage', continueButtonName); document.getElementById('zotero-advance-message').setAttribute('value', str); + + if (data.majorUpgrade) { + document.getElementById('zotero-major-upgrade').hidden = false; + document.getElementById('zotero-upgrade-required').hidden = true; + } } @@ -45,6 +53,28 @@ onAdvance(); try { + if (data.integrityCheck) { + if (!Zotero.DB.integrityCheck()) { + var pr = Components.classes["@mozilla.org/network/default-prompt;1"] + .createInstance(Components.interfaces.nsIPrompt); + var buttonFlags = (pr.BUTTON_POS_0) * (pr.BUTTON_TITLE_IS_STRING) + + (pr.BUTTON_POS_1) * (pr.BUTTON_TITLE_CANCEL); + var index = pr.confirmEx( + Zotero.getString('general.error'), + Zotero.getString('upgrade.integrityCheckFailed'), + buttonFlags, Zotero.getString('upgrade.loadDBRepairTool'), + null, null, null, {}); + + if (index == 0) { + Zotero.initialURL = 'https://www.zotero.org/utils/dbfix/'; + } + + _setStartupError(); + _clickCancel(); + return; + } + } + Zotero.Schema.updateSchema(); } catch (e) { @@ -53,9 +83,7 @@ Components.utils.reportError(e); - var cancelButton = wizard.getButton('cancel'); - cancelButton.setAttribute('disabled', false); - cancelButton.click(); + _clickCancel(); return; } @@ -65,17 +93,45 @@ } - function onChangeLogLinkClick() { + this.onUpgradeInstructionsLinkClick = function () { + _setStartupError(); + Zotero.initialURL = 'http://zotero.org/support/upgrade'; + _clickCancel(); + } + + + this.onChangeLogLinkClick = function () { Zotero.initialURL = 'http://zotero.org/support/changelog'; document.getElementById('zotero-schema-upgrade').getButton('finish').click(); } + + + function _setStartupError() { + Zotero.startupError = Zotero.localeJoin([ + Zotero.getString('upgrade.dbUpdateRequired'), Zotero.getString('general.restartFirefox') + ]); + } + + + function _clickCancel() { + var cancelButton = document.getElementById('zotero-schema-upgrade').getButton('cancel'); + cancelButton.setAttribute('disabled', false); + cancelButton.click(); + } } ]]> &zotero.upgrade.newVersionInstalled; - &zotero.upgrade.upgradeRequired; &zotero.upgrade.autoBackup; + &zotero.upgrade.upgradeRequired; &zotero.upgrade.autoBackup; + @@ -88,7 +144,7 @@ &zotero.upgrade.upgradeSucceeded; &zotero.upgrade.changeLogBeforeLink; - diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js index ccc68aa22..79499021a 100644 --- a/chrome/content/zotero/xpcom/schema.js +++ b/chrome/content/zotero/xpcom/schema.js @@ -52,9 +52,24 @@ Zotero.Schema = new function(){ var dbVersion = _getDBVersion('userdata'); var schemaVersion = _getSchemaSQLVersion('userdata'); + // Upgrading from 1.0 or earlier + if (dbVersion <= 36) { + var integrityCheck = true; + var majorUpgrade = true; + } + else { + var integrityCheck = false; + var majorUpgrade = false; + } + var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] - .getService(Components.interfaces.nsIWindowWatcher); - var obj = { Zotero: Zotero, data: { success: false } }; + .getService(Components.interfaces.nsIWindowWatcher); + var data = { + success: false, + majorUpgrade: majorUpgrade, + integrityCheck: integrityCheck + }; + var obj = { Zotero: Zotero, data: data }; var io = { wrappedJSObject: obj }; var win = ww.openWindow(null, "chrome://zotero/content/upgrade.xul", "zotero-schema-upgrade", "chrome,centerscreen,modal", io); diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js index fb5c03212..43459c2fa 100644 --- a/chrome/content/zotero/xpcom/zotero.js +++ b/chrome/content/zotero/xpcom/zotero.js @@ -71,7 +71,7 @@ var Zotero = new function(){ // Public properties this.initialized = false; this.skipLoading = false; - this.__defineGetter__("startupError", function() { return _startupError; }); + this.startupError; this.__defineGetter__("startupErrorHandler", function() { return _startupErrorHandler; }); this.version; this.platform; @@ -146,7 +146,6 @@ var Zotero = new function(){ */ this.__defineGetter__('locked', function () _locked); - var _startupError; var _startupErrorHandler; var _zoteroDirectory = false; var _localizedStringBundle; @@ -255,7 +254,7 @@ var Zotero = new function(){ catch (e) { // Zotero dir not found if (e.name == 'NS_ERROR_FILE_NOT_FOUND') { - _startupError = Zotero.getString('dataDir.notFound'); + this.startupError = Zotero.getString('dataDir.notFound'); _startupErrorHandler = function() { var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); @@ -268,7 +267,7 @@ var Zotero = new function(){ + (ps.BUTTON_POS_2) * (ps.BUTTON_TITLE_IS_STRING); var index = ps.confirmEx(win, Zotero.getString('general.error'), - _startupError + '\n\n' + + this.startupError + '\n\n' + Zotero.getString('dataDir.previousDir') + ' ' + Zotero.Prefs.get('lastDataDir'), buttonFlags, null, @@ -332,7 +331,7 @@ var Zotero = new function(){ Zotero.getString('startupError.databaseCannotBeOpened'), Zotero.getString('startupError.checkPermissions') ]); - _startupError = msg; + this.startupError = msg; } Components.utils.reportError(e); @@ -371,10 +370,10 @@ var Zotero = new function(){ var kbURL = "http://zotero.org/support/kb/newer_db_version"; var seeKB = "See " + kbURL + " for more information."; var msg = Zotero.localeJoin([zoteroVersionIsOlder, upgradeToLatestVersion]) + "\n\n" + currentVersion + "\n\n" + seeKB; - _startupError = msg; + this.startupError = msg; } else { - _startupError = "Database upgrade error"; + this.startupError = "Database upgrade error"; } Components.utils.reportError(e); return false; diff --git a/chrome/locale/en-US/zotero/zotero.dtd b/chrome/locale/en-US/zotero/zotero.dtd index a179b5dfb..267ff1771 100644 --- a/chrome/locale/en-US/zotero/zotero.dtd +++ b/chrome/locale/en-US/zotero/zotero.dtd @@ -11,6 +11,10 @@ + + + + diff --git a/chrome/locale/en-US/zotero/zotero.properties b/chrome/locale/en-US/zotero/zotero.properties index 006d7d9c9..a2a08d1d8 100644 --- a/chrome/locale/en-US/zotero/zotero.properties +++ b/chrome/locale/en-US/zotero/zotero.properties @@ -31,8 +31,12 @@ install.quickStartGuide.message.welcome = Welcome to Zotero! install.quickStartGuide.message.clickViewPage = Click the "View Page" button above to visit our Quick Start Guide and learn how to get started collecting, managing, and citing your research. install.quickStartGuide.message.thanks = Thanks for installing Zotero. +upgrade.failed.title = Upgrade Failed upgrade.failed = Upgrading of the Zotero database failed: upgrade.advanceMessage = Press %S to upgrade now. +upgrade.dbUpdateRequired = The Zotero database must be updated. +upgrade.integrityCheckFailed = Your Zotero database must be repaired before the upgrade can continue. +upgrade.loadDBRepairTool = Load Database Repair Tool errorReport.reportErrors = Report Errors... errorReport.reportInstructions = You can report this error by selecting "%S" from the Actions (gear) menu. diff --git a/chrome/skin/default/zotero/upgrade.css b/chrome/skin/default/zotero/upgrade.css index 8ea22a6cf..6b85fdf83 100644 --- a/chrome/skin/default/zotero/upgrade.css +++ b/chrome/skin/default/zotero/upgrade.css @@ -2,6 +2,6 @@ description { margin-bottom: 1.5em; } -#zotero-change-log-link { +description > label { margin: 0; }