commit e17bffcdd4cfd8cacf95b3a8829453e50d50d146
parent 80f504768763924f467aa76e79853e88f7d565de
Author: Dan Stillman <dstillman@zotero.org>
Date: Sun, 29 Aug 2010 18:45:59 +0000
Disable unresponsive script warning during translator initialization, since subsequent runs should be much quicker due to cache
(Change is just an indent, despite messiness of diff)
Diffstat:
1 file changed, 85 insertions(+), 77 deletions(-)
diff --git a/chrome/content/zotero/xpcom/translate.js b/chrome/content/zotero/xpcom/translate.js
@@ -52,97 +52,105 @@ Zotero.Translators = new function() {
var start = (new Date()).getTime();
var transactionStarted = false;
- _cache = {"import":[], "export":[], "web":[], "search":[]};
- _translators = {};
-
- var dbCacheResults = Zotero.DB.query("SELECT leafName, translatorJSON, "+
- "code, lastModifiedTime FROM translatorCache");
- var dbCache = {};
- for each(var cacheEntry in dbCacheResults) {
- dbCache[cacheEntry.leafName] = cacheEntry;
- }
-
- var i = 0;
- var filesInCache = {};
- var contents = Zotero.getTranslatorsDirectory().directoryEntries;
- while(contents.hasMoreElements()) {
- var file = contents.getNext().QueryInterface(Components.interfaces.nsIFile);
- var leafName = file.leafName;
- if(!leafName || leafName[0] == ".") continue;
- var lastModifiedTime = file.lastModifiedTime;
-
- var dbCacheEntry = false;
- if(dbCache[leafName]) {
- filesInCache[leafName] = true;
- if(dbCache[leafName].lastModifiedTime == lastModifiedTime) {
- dbCacheEntry = dbCache[file.leafName];
- }
- }
+ Zotero.UnresponsiveScriptIndicator.disable();
+
+ // Use try/finally so that we always reset the unresponsive script warning
+ try {
+ _cache = {"import":[], "export":[], "web":[], "search":[]};
+ _translators = {};
- if(dbCacheEntry) {
- // get JSON from cache if possible
- var translator = new Zotero.Translator(file, dbCacheEntry.translatorJSON, dbCacheEntry.code);
- filesInCache[leafName] = true;
- } else {
- // otherwise, load from file
- var translator = new Zotero.Translator(file);
+ var dbCacheResults = Zotero.DB.query("SELECT leafName, translatorJSON, "+
+ "code, lastModifiedTime FROM translatorCache");
+ var dbCache = {};
+ for each(var cacheEntry in dbCacheResults) {
+ dbCache[cacheEntry.leafName] = cacheEntry;
}
- if(translator.translatorID) {
- if(_translators[translator.translatorID]) {
- // same translator is already cached
- translator.logError('Translator with ID '+
- translator.translatorID+' already loaded from "'+
- _translators[translator.translatorID].file.leafName+'"');
+ var i = 0;
+ var filesInCache = {};
+ var contents = Zotero.getTranslatorsDirectory().directoryEntries;
+ while(contents.hasMoreElements()) {
+ var file = contents.getNext().QueryInterface(Components.interfaces.nsIFile);
+ var leafName = file.leafName;
+ if(!leafName || leafName[0] == ".") continue;
+ var lastModifiedTime = file.lastModifiedTime;
+
+ var dbCacheEntry = false;
+ if(dbCache[leafName]) {
+ filesInCache[leafName] = true;
+ if(dbCache[leafName].lastModifiedTime == lastModifiedTime) {
+ dbCacheEntry = dbCache[file.leafName];
+ }
+ }
+
+ if(dbCacheEntry) {
+ // get JSON from cache if possible
+ var translator = new Zotero.Translator(file, dbCacheEntry.translatorJSON, dbCacheEntry.code);
+ filesInCache[leafName] = true;
} else {
- // add to cache
- _translators[translator.translatorID] = translator;
- for(var type in TRANSLATOR_TYPES) {
- if(translator.translatorType & TRANSLATOR_TYPES[type]) {
- _cache[type].push(translator);
+ // otherwise, load from file
+ var translator = new Zotero.Translator(file);
+ }
+
+ if(translator.translatorID) {
+ if(_translators[translator.translatorID]) {
+ // same translator is already cached
+ translator.logError('Translator with ID '+
+ translator.translatorID+' already loaded from "'+
+ _translators[translator.translatorID].file.leafName+'"');
+ } else {
+ // add to cache
+ _translators[translator.translatorID] = translator;
+ for(var type in TRANSLATOR_TYPES) {
+ if(translator.translatorType & TRANSLATOR_TYPES[type]) {
+ _cache[type].push(translator);
+ }
}
- }
-
- if(!dbCacheEntry) {
- // Add cache misses to DB
- if(!transactionStarted) {
- transactionStarted = true;
- Zotero.DB.beginTransaction();
+
+ if(!dbCacheEntry) {
+ // Add cache misses to DB
+ if(!transactionStarted) {
+ transactionStarted = true;
+ Zotero.DB.beginTransaction();
+ }
+ Zotero.Translators.cacheInDB(leafName, translator.metadataString, translator.cacheCode ? translator.code : null, lastModifiedTime);
+ delete translator.metadataString;
}
- Zotero.Translators.cacheInDB(leafName, translator.metadataString, translator.cacheCode ? translator.code : null, lastModifiedTime);
- delete translator.metadataString;
}
}
+
+ i++;
}
- i++;
- }
-
- // Remove translators from DB as necessary
- for(var leafName in dbCache) {
- if(!filesInCache[leafName]) {
- Zotero.DB.query("DELETE FROM translatorCache WHERE leafName = ?", [leafName]);
+ // Remove translators from DB as necessary
+ for(var leafName in dbCache) {
+ if(!filesInCache[leafName]) {
+ Zotero.DB.query("DELETE FROM translatorCache WHERE leafName = ?", [leafName]);
+ }
}
- }
-
- // Close transaction
- if(transactionStarted) {
- Zotero.DB.commitTransaction();
- }
-
- // Sort by priority
- var collation = Zotero.getLocaleCollation();
- var cmp = function (a, b) {
- if (a.priority > b.priority) {
- return 1;
+
+ // Close transaction
+ if(transactionStarted) {
+ Zotero.DB.commitTransaction();
+ }
+
+ // Sort by priority
+ var collation = Zotero.getLocaleCollation();
+ var cmp = function (a, b) {
+ if (a.priority > b.priority) {
+ return 1;
+ }
+ else if (a.priority < b.priority) {
+ return -1;
+ }
+ return collation.compareString(1, a.label, b.label);
}
- else if (a.priority < b.priority) {
- return -1;
+ for(var type in _cache) {
+ _cache[type].sort(cmp);
}
- return collation.compareString(1, a.label, b.label);
}
- for(var type in _cache) {
- _cache[type].sort(cmp);
+ finally {
+ Zotero.UnresponsiveScriptIndicator.enable();
}
Zotero.debug("Cached "+i+" translators in "+((new Date()).getTime() - start)+" ms");