Wait for schema update before updating save icon
Technically rather than waiting for the schema update we should wait for translator initialization, which should wait for the schema update itself, but the schema update also needs to initialize the translators, so avoiding a hang is tricky, particularly with the use of Zotero.lazy() for Zotero.Translators.init(). For now, just wait for the schema update.
This commit is contained in:
parent
c590aa0eb4
commit
2a5b026f65
3 changed files with 27 additions and 16 deletions
|
@ -44,12 +44,9 @@ var Zotero_Browser = new function() {
|
||||||
this.toggleMode = toggleMode;
|
this.toggleMode = toggleMode;
|
||||||
this.toggleCollapsed = toggleCollapsed;
|
this.toggleCollapsed = toggleCollapsed;
|
||||||
this.chromeLoad = chromeLoad;
|
this.chromeLoad = chromeLoad;
|
||||||
this.contentLoad = contentLoad;
|
|
||||||
this.itemUpdated = itemUpdated;
|
this.itemUpdated = itemUpdated;
|
||||||
this.contentHide = contentHide;
|
|
||||||
this.tabClose = tabClose;
|
this.tabClose = tabClose;
|
||||||
this.resize = resize;
|
this.resize = resize;
|
||||||
this.updateStatus = updateStatus;
|
|
||||||
|
|
||||||
this.tabbrowser = null;
|
this.tabbrowser = null;
|
||||||
this.appcontent = null;
|
this.appcontent = null;
|
||||||
|
@ -243,6 +240,7 @@ var Zotero_Browser = new function() {
|
||||||
gBrowser.tabContainer.addEventListener("TabSelect",
|
gBrowser.tabContainer.addEventListener("TabSelect",
|
||||||
function(e) {
|
function(e) {
|
||||||
//Zotero.debug("TabSelect");
|
//Zotero.debug("TabSelect");
|
||||||
|
// Note: async
|
||||||
Zotero_Browser.updateStatus();
|
Zotero_Browser.updateStatus();
|
||||||
}, false);
|
}, false);
|
||||||
// this is for pageshow, for updating the status of the book icon
|
// this is for pageshow, for updating the status of the book icon
|
||||||
|
@ -284,7 +282,11 @@ var Zotero_Browser = new function() {
|
||||||
* An event handler called when a new document is loaded. Creates a new document
|
* An event handler called when a new document is loaded. Creates a new document
|
||||||
* object, and updates the status of the capture icon
|
* object, and updates the status of the capture icon
|
||||||
*/
|
*/
|
||||||
function contentLoad(event) {
|
var contentLoad = Zotero.Promise.coroutine(function* (event) {
|
||||||
|
if (Zotero.Schema.schemaUpdatePromise.isPending()) {
|
||||||
|
yield Zotero.Schema.schemaUpdatePromise;
|
||||||
|
}
|
||||||
|
|
||||||
var doc = event.originalTarget;
|
var doc = event.originalTarget;
|
||||||
var isHTML = doc instanceof HTMLDocument;
|
var isHTML = doc instanceof HTMLDocument;
|
||||||
var rootDoc = (doc instanceof HTMLDocument ? doc.defaultView.top.document : doc);
|
var rootDoc = (doc instanceof HTMLDocument ? doc.defaultView.top.document : doc);
|
||||||
|
@ -352,12 +354,12 @@ var Zotero_Browser = new function() {
|
||||||
contentWin.haveZoteroEventListener = true;
|
contentWin.haveZoteroEventListener = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* called to unregister Zotero icon, etc.
|
* called to unregister Zotero icon, etc.
|
||||||
*/
|
*/
|
||||||
function contentHide(event) {
|
this.contentHide = function (event) {
|
||||||
var doc = event.originalTarget;
|
var doc = event.originalTarget;
|
||||||
if(!(doc instanceof HTMLDocument)) return;
|
if(!(doc instanceof HTMLDocument)) return;
|
||||||
|
|
||||||
|
@ -377,7 +379,8 @@ var Zotero_Browser = new function() {
|
||||||
|
|
||||||
// update status
|
// update status
|
||||||
if(Zotero_Browser.tabbrowser.selectedBrowser == browser) {
|
if(Zotero_Browser.tabbrowser.selectedBrowser == browser) {
|
||||||
updateStatus();
|
// Note: async
|
||||||
|
this.updateStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,7 +428,11 @@ var Zotero_Browser = new function() {
|
||||||
* Updates the status of the capture icon to reflect the scrapability or lack
|
* Updates the status of the capture icon to reflect the scrapability or lack
|
||||||
* thereof of the current page
|
* thereof of the current page
|
||||||
*/
|
*/
|
||||||
function updateStatus() {
|
this.updateStatus = Zotero.Promise.coroutine(function* () {
|
||||||
|
if (Zotero.Schema.schemaUpdatePromise.isPending()) {
|
||||||
|
yield Zotero.Schema.schemaUpdatePromise;
|
||||||
|
}
|
||||||
|
|
||||||
if (!Zotero_Browser.tabbrowser) return;
|
if (!Zotero_Browser.tabbrowser) return;
|
||||||
var tab = _getTabObject(Zotero_Browser.tabbrowser.selectedBrowser);
|
var tab = _getTabObject(Zotero_Browser.tabbrowser.selectedBrowser);
|
||||||
|
|
||||||
|
@ -455,7 +462,7 @@ var Zotero_Browser = new function() {
|
||||||
} else {
|
} else {
|
||||||
document.getElementById('zotero-annotate-tb').hidden = true;
|
document.getElementById('zotero-annotate-tb').hidden = true;
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
function getSaveButtons() {
|
function getSaveButtons() {
|
||||||
Components.utils.import("resource:///modules/CustomizableUI.jsm");
|
Components.utils.import("resource:///modules/CustomizableUI.jsm");
|
||||||
|
@ -1011,6 +1018,7 @@ Zotero_Browser.Tab.prototype._translatorsAvailable = function(translate, transla
|
||||||
|
|
||||||
if(!translators || !translators.length) Zotero.debug("Translate: No translators found");
|
if(!translators || !translators.length) Zotero.debug("Translate: No translators found");
|
||||||
|
|
||||||
|
// Note: async
|
||||||
Zotero_Browser.updateStatus();
|
Zotero_Browser.updateStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -958,7 +958,9 @@ Zotero.Schema = new function(){
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
yield Zotero[Mode].reinit(cache);
|
yield Zotero[Mode].reinit({
|
||||||
|
metadataCache: cache
|
||||||
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
|
@ -39,13 +39,12 @@ Zotero.Translators = new function() {
|
||||||
/**
|
/**
|
||||||
* Initializes translator cache, loading all translator metadata into memory
|
* Initializes translator cache, loading all translator metadata into memory
|
||||||
*
|
*
|
||||||
* @param {Object} [memCache] - Translator metadata keyed by filename, if already available
|
* @param {Object} [options.metadataCache] - Translator metadata keyed by filename, if already
|
||||||
* (e.g., in updateBundledFiles()), to avoid unnecesary file reads
|
* available (e.g., in updateBundledFiles()), to avoid unnecesary file reads
|
||||||
*/
|
*/
|
||||||
this.reinit = Zotero.Promise.coroutine(function* (memCache) {
|
this.reinit = Zotero.Promise.coroutine(function* (options = {}) {
|
||||||
Zotero.debug("Initializing translators");
|
Zotero.debug("Initializing translators");
|
||||||
var start = new Date;
|
var start = new Date;
|
||||||
_initialized = true;
|
|
||||||
|
|
||||||
_cache = {"import":[], "export":[], "web":[], "search":[]};
|
_cache = {"import":[], "export":[], "web":[], "search":[]};
|
||||||
_translators = {};
|
_translators = {};
|
||||||
|
@ -83,8 +82,8 @@ Zotero.Translators = new function() {
|
||||||
|
|
||||||
// Check passed cache for metadata
|
// Check passed cache for metadata
|
||||||
let memCacheJSON = false;
|
let memCacheJSON = false;
|
||||||
if (memCache && memCache[fileName]) {
|
if (options.metadataCache && options.metadataCache[fileName]) {
|
||||||
memCacheJSON = memCache[fileName];
|
memCacheJSON = options.metadataCache[fileName];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check DB cache
|
// Check DB cache
|
||||||
|
@ -183,6 +182,8 @@ Zotero.Translators = new function() {
|
||||||
_cache[type].sort(cmp);
|
_cache[type].sort(cmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_initialized = true;
|
||||||
|
|
||||||
Zotero.debug("Cached " + numCached + " translators in " + ((new Date) - start) + " ms");
|
Zotero.debug("Cached " + numCached + " translators in " + ((new Date) - start) + " ms");
|
||||||
});
|
});
|
||||||
this.init = Zotero.lazy(this.reinit);
|
this.init = Zotero.lazy(this.reinit);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue