diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js index f94b9fd50..ef2620f31 100644 --- a/chrome/content/zotero/xpcom/zotero.js +++ b/chrome/content/zotero/xpcom/zotero.js @@ -639,6 +639,68 @@ Components.utils.import("resource://gre/modules/Services.jsm"); + Zotero.getString('startupError.zoteroVersionIsOlder.current', Zotero.version) + "\n\n" + Zotero.getString('general.seeForMoreInformation', kbURL); Zotero.startupError = msg; + _startupErrorHandler = function() { + var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] + .getService(Components.interfaces.nsIPromptService); + var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING) + + (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL) + + ps.BUTTON_POS_0_DEFAULT; + + var index = ps.confirmEx( + null, + Zotero.getString('general.error'), + Zotero.startupError, + buttonFlags, + Zotero.getString('general.checkForUpdate'), + null, null, null, {} + ); + + // "Check for updates" button + if(index === 0) { + if(Zotero.isStandalone) { + Components.classes["@mozilla.org/embedcomp/window-watcher;1"] + .getService(Components.interfaces.nsIWindowWatcher) + .openWindow(null, 'chrome://mozapps/content/update/updates.xul', + 'updateChecker', 'chrome,centerscreen', null); + } else { + // In Firefox, show the add-on manager + Components.utils.import("resource://gre/modules/AddonManager.jsm"); + AddonManager.getAddonByID(ZOTERO_CONFIG['GUID'], + function (addon) { + // Disable auto-update so that the user is presented with the option + var initUpdateState = addon.applyBackgroundUpdates; + addon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_DISABLE; + addon.findUpdates({ + onNoUpdateAvailable: function() { + ps.alert( + null, + Zotero.getString('general.noUpdatesFound'), + Zotero.getString('general.isUpToDate', 'Zotero') + ); + }, + onUpdateAvailable: function() { + // Show available update + Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator) + .getMostRecentWindow('navigator:browser') + .BrowserOpenAddonsMgr('addons://updates/available'); + }, + onUpdateFinished: function() { + // Restore add-on auto-update state, but don't fire + // too quickly or the update will not show in the + // add-on manager + setTimeout(function() { + addon.applyBackgroundUpdates = initUpdateState; + }, 1000); + } + }, + AddonManager.UPDATE_WHEN_USER_REQUESTED + ); + } + ); + } + } + }; } else { Zotero.startupError = Zotero.getString('startupError.databaseUpgradeError') + "\n\n" + e; diff --git a/chrome/locale/en-US/zotero/zotero.properties b/chrome/locale/en-US/zotero/zotero.properties index a993f0265..24039dc6f 100644 --- a/chrome/locale/en-US/zotero/zotero.properties +++ b/chrome/locale/en-US/zotero/zotero.properties @@ -20,10 +20,12 @@ general.tryAgainLater = Please try again in a few minutes. general.serverError = The server returned an error. Please try again. general.restartFirefox = Please restart %S. general.restartFirefoxAndTryAgain = Please restart %S and try again. -general.checkForUpdate = Check for update +general.checkForUpdate = Check for Update general.actionCannotBeUndone = This action cannot be undone. general.install = Install general.updateAvailable = Update Available +general.noUpdatesFound = No Updates Found +general.isUpToDate = %S is up to date. general.upgrade = Upgrade general.yes = Yes general.no = No