commit f00a50bf5a07f22ae638206e84a35833581c953d
parent 2ad537e4c660b2b5b5facde276733051c655d1fd
Author: Dan Stillman <dstillman@zotero.org>
Date: Thu, 10 Nov 2016 00:55:30 -0500
Better handling of startup errors
- Show toolbar icon on startup error (fixes #742)
- Don't show DB upgrade error message for other startup errors
- Fix some cases of a startup error not being logged/presented
- Show actual error in error dialog for more errors
Diffstat:
2 files changed, 91 insertions(+), 74 deletions(-)
diff --git a/chrome/content/zotero/overlay.js b/chrome/content/zotero/overlay.js
@@ -176,7 +176,7 @@ var ZoteroOverlay = new function()
*/
this.toggleDisplay = function(makeVisible, dontRefocus)
{
- if (!Zotero || Zotero.skipLoading) {
+ if (!Zotero || Zotero.startupError || Zotero.skipLoading) {
ZoteroPane.displayStartupError();
return;
}
diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js
@@ -302,6 +302,7 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
Zotero.chooseZoteroDirectory();
}
}
+ _addToolbarIcon();
return;
} else if(e.name == "ZOTERO_DIR_MAY_EXIST") {
var app = Zotero.isStandalone ? Zotero.getString('app.standalone') : Zotero.getString('app.firefox');
@@ -392,8 +393,8 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
Zotero.getString('startupError.checkPermissions')
]);
Zotero.startupError = msg;
- Zotero.debug(e, 1);
- Components.utils.reportError(e);
+ Zotero.logError(e);
+ _addToolbarIcon();
return false;
}
throw (e);
@@ -434,13 +435,16 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
}
} else {
Zotero.debug("Loading in full mode");
- return Zotero.Promise.try(_initFull)
+ return _initFull()
.then(function (success) {
- if(!success) return false;
+ if (!success) {
+ _addToolbarIcon();
+ return false;
+ }
if(Zotero.isStandalone) Zotero.Standalone.init();
Zotero.initComplete();
- });
+ })
}
return true;
@@ -459,13 +463,7 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
this.initializationDeferred.resolve();
if(Zotero.isConnector) {
- // Add toolbar icon
- try {
- Services.scriptloader.loadSubScript("chrome://zotero/content/icon.js", {}, "UTF-8");
- }
- catch (e) {
- Zotero.logError(e);
- }
+ _addToolbarIcon();
Zotero.Repo.init();
Zotero.locked = false;
@@ -481,6 +479,21 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
Services.obs.notifyObservers(Zotero, "zotero-loaded", null);
}
+
+ var _addToolbarIcon = function () {
+ // Add toolbar icon
+ try {
+ Services.scriptloader.loadSubScript("chrome://zotero/content/icon.js", {}, "UTF-8");
+ }
+ catch (e) {
+ if (Zotero) {
+ Zotero.debug(e, 1);
+ }
+ Components.utils.reportError(e);
+ }
+ };
+
+
/**
* Initialization function to be called only if Zotero is in full mode
*
@@ -527,6 +540,7 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
catch (e) {
// Restore from backup?
alert(e);
+ return false;
}
}
@@ -599,65 +613,6 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
try {
var updated = yield Zotero.Schema.updateSchema();
-
- yield Zotero.Users.init();
- yield Zotero.Libraries.init();
-
- yield Zotero.ItemTypes.init();
- yield Zotero.ItemFields.init();
- yield Zotero.CreatorTypes.init();
- yield Zotero.FileTypes.init();
- yield Zotero.CharacterSets.init();
- yield Zotero.RelationPredicates.init();
-
- Zotero.locked = false;
-
- // Initialize various services
- Zotero.Integration.init();
-
- if(Zotero.Prefs.get("httpServer.enabled")) {
- Zotero.Server.init();
- }
-
- yield Zotero.Fulltext.init();
-
- Zotero.Notifier.registerObserver(Zotero.Tags, 'setting', 'tags');
-
- yield Zotero.Sync.Data.Local.init();
- yield Zotero.Sync.Data.Utilities.init();
- Zotero.Sync.EventListeners.init();
- Zotero.Sync.Runner = new Zotero.Sync.Runner_Module;
-
- Zotero.MIMETypeHandler.init();
- yield Zotero.Proxies.init();
-
- // Initialize keyboard shortcuts
- Zotero.Keys.init();
-
- // Initialize Locate Manager
- Zotero.LocateManager.init();
-
- yield Zotero.ID.init();
- yield Zotero.Collections.init();
- yield Zotero.Items.init();
- yield Zotero.Searches.init();
- yield Zotero.Tags.init();
- yield Zotero.Creators.init();
- yield Zotero.Groups.init();
- yield Zotero.Relations.init();
-
- // Load all library data except for items, which are loaded when libraries are first
- // clicked on or if otherwise necessary
- yield Zotero.Promise.each(
- Zotero.Libraries.getAll(),
- library => Zotero.Promise.coroutine(function* () {
- yield Zotero.SyncedSettings.loadAll(library.libraryID);
- if (library.libraryType != 'feed') {
- yield Zotero.Collections.loadAll(library.libraryID);
- yield Zotero.Searches.loadAll(library.libraryID);
- }
- })()
- );
}
catch (e) {
Zotero.logError(e);
@@ -755,7 +710,66 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
Zotero.startupError = Zotero.getString('startupError.databaseUpgradeError') + "\n\n" + e;
throw e;
- };
+ }
+
+ yield Zotero.Users.init();
+ yield Zotero.Libraries.init();
+
+ yield Zotero.ItemTypes.init();
+ yield Zotero.ItemFields.init();
+ yield Zotero.CreatorTypes.init();
+ yield Zotero.FileTypes.init();
+ yield Zotero.CharacterSets.init();
+ yield Zotero.RelationPredicates.init();
+
+ Zotero.locked = false;
+
+ // Initialize various services
+ Zotero.Integration.init();
+
+ if(Zotero.Prefs.get("httpServer.enabled")) {
+ Zotero.Server.init();
+ }
+
+ yield Zotero.Fulltext.init();
+
+ Zotero.Notifier.registerObserver(Zotero.Tags, 'setting', 'tags');
+
+ yield Zotero.Sync.Data.Local.init();
+ yield Zotero.Sync.Data.Utilities.init();
+ Zotero.Sync.EventListeners.init();
+ Zotero.Sync.Runner = new Zotero.Sync.Runner_Module;
+
+ Zotero.MIMETypeHandler.init();
+ yield Zotero.Proxies.init();
+
+ // Initialize keyboard shortcuts
+ Zotero.Keys.init();
+
+ // Initialize Locate Manager
+ Zotero.LocateManager.init();
+ yield Zotero.ID.init();
+ yield Zotero.Collections.init();
+ yield Zotero.Items.init();
+ yield Zotero.Searches.init();
+ yield Zotero.Tags.init();
+ yield Zotero.Creators.init();
+ yield Zotero.Groups.init();
+ yield Zotero.Relations.init();
+
+ // Load all library data except for items, which are loaded when libraries are first
+ // clicked on or if otherwise necessary
+ yield Zotero.Promise.each(
+ Zotero.Libraries.getAll(),
+ library => Zotero.Promise.coroutine(function* () {
+ yield Zotero.SyncedSettings.loadAll(library.libraryID);
+ if (library.libraryType != 'feed') {
+ yield Zotero.Collections.loadAll(library.libraryID);
+ yield Zotero.Searches.loadAll(library.libraryID);
+ }
+ })()
+ );
+
Zotero.Items.startEmptyTrashTimer();
@@ -768,7 +782,10 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
return true;
}
catch (e) {
- Zotero.skipLoading = true;
+ Zotero.logError(e);
+ if (!Zotero.startupError) {
+ Zotero.startupError = Zotero.getString('startupError') + "\n\n" + e;
+ }
return false;
}
});