www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit a2d7dfd206bdadb71003656983d3ef587c0deb3a
parent e6ccca323004786c6f9781b4db1c9d7a59a0c7d4
Author: Dan Stillman <dstillman@zotero.org>
Date:   Sun, 22 Mar 2015 16:03:01 -0400

More bundled files fixes

Diffstat:
Mchrome/content/zotero/xpcom/schema.js | 40++++++++++++++++++++--------------------
Mchrome/content/zotero/xpcom/translation/translators.js | 134+++++++++++++++++++++++++++++++++++++------------------------------------------
2 files changed, 83 insertions(+), 91 deletions(-)

diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js @@ -1011,7 +1011,7 @@ Zotero.Schema = new function(){ var lastUpdated = yield this.getDBVersion('repository'); try { - var url = ZOTERO_CONFIG.REPOSITORY_URL + '/updated?' + var url = ZOTERO_CONFIG.REPOSITORY_URL + 'updated?' + (lastUpdated ? 'last=' + lastUpdated + '&' : '') + 'version=' + Zotero.version; @@ -1669,7 +1669,7 @@ Zotero.Schema = new function(){ * * @return {Promise} */ - function _translatorXMLToFile(xmlnode) { + var _translatorXMLToFile = Zotero.Promise.coroutine(function* (xmlnode) { // Don't split >4K chunks into multiple nodes // https://bugzilla.mozilla.org/show_bug.cgi?id=194231 xmlnode.normalize(); @@ -1678,9 +1678,9 @@ Zotero.Schema = new function(){ // Delete local version of remote translators with priority 0 if (xmlnode.getElementsByTagName('priority')[0].firstChild.nodeValue === "0") { - if (translator && translator.file.exists()) { + if (translator && (yield OS.File.exists(translator.path))) { Zotero.debug("Deleting translator '" + translator.label + "'"); - translator.file.remove(false); + yield OS.File.remove(translator.path); } return false; } @@ -1707,7 +1707,7 @@ Zotero.Schema = new function(){ metadata.browserSupport = browserSupport; } - for each(var attr in ["configOptions", "displayOptions", "hiddenPrefs"]) { + for (let attr of ["configOptions", "displayOptions", "hiddenPrefs"]) { try { var tags = xmlnode.getElementsByTagName(attr); if(tags.length && tags[0].firstChild) { @@ -1730,14 +1730,14 @@ Zotero.Schema = new function(){ code = (detectCode ? detectCode + "\n\n" : "") + code; return Zotero.Translators.save(metadata, code); - } + }); /** * Traverse an XML style node from the repository and * update the local styles folder with the style data */ - function _styleXMLToFile(xmlnode) { + var _styleXMLToFile = Zotero.Promise.coroutine(function* (xmlnode) { // Don't split >4K chunks into multiple nodes // https://bugzilla.mozilla.org/show_bug.cgi?id=194231 xmlnode.normalize(); @@ -1749,7 +1749,7 @@ Zotero.Schema = new function(){ if (!xmlnode.firstChild) { var style = Zotero.Styles.get(uri); if (style) { - style.file.remove(null); + yield OS.File.remove(style.path); } return; } @@ -1758,19 +1758,17 @@ Zotero.Schema = new function(){ var oldID = xmlnode.getAttribute('oldID'); if (oldID) { var style = Zotero.Styles.get(oldID, true); - if (style && style.file.exists()) { + if (style && (yield OS.File.exists(style.path))) { Zotero.debug("Deleting renamed style '" + oldID + "'"); - style.file.remove(false); + yield OS.File.remove(style.path); } } var str = xmlnode.firstChild.nodeValue; var style = Zotero.Styles.get(uri); if (style) { - if (style.file.exists()) { - style.file.remove(false); - } - var destFile = style.file; + yield Zotero.File.removeIfExists(style.path); + var destFile = style.path; } else { // Get last part of URI for filename @@ -1778,17 +1776,19 @@ Zotero.Schema = new function(){ if (!matches) { throw ("Invalid style URI '" + uri + "' from repository"); } - var destFile = Zotero.getStylesDirectory(); - destFile.append(matches[1] + ".csl"); - if (destFile.exists()) { - throw ("Different style with filename '" + matches[1] - + "' already exists in Zotero.Schema._styleXMLToFile()"); + var destFile = OS.Path.join( + Zotero.getStylesDirectory().path, + matches[1] + ".csl" + ); + if (yield OS.File.exists(destFile)) { + throw new Error("Different style with filename '" + matches[1] + + "' already exists"); } } Zotero.debug("Saving style '" + uri + "'"); return Zotero.File.putContentsAsync(destFile, str); - } + }); // TODO diff --git a/chrome/content/zotero/xpcom/translation/translators.js b/chrome/content/zotero/xpcom/translation/translators.js @@ -38,11 +38,6 @@ Zotero.Translators = new function() { * Initializes translator cache, loading all translator metadata into memory */ this.reinit = Zotero.Promise.coroutine(function* () { - if (_initialized) { - Zotero.debug("Translators already initialized", 2); - return; - } - Zotero.debug("Initializing translators"); var start = new Date; _initialized = true; @@ -80,7 +75,6 @@ Zotero.Translators = new function() { else { lastModifiedTime = (yield OS.File.stat(path)).lastModificationDate.getTime(); } - let lastModified var dbCacheEntry = false; if (dbCache[fileName]) { @@ -90,12 +84,12 @@ Zotero.Translators = new function() { } } + // Get JSON from cache if possible if(dbCacheEntry) { - // get JSON from cache if possible var translator = Zotero.Translators.load(dbCacheEntry.metadataJSON, path); - filesInCache[fileName] = true; - } else { - // otherwise, load from file + } + // Otherwise, load from file + else { var translator = yield Zotero.Translators.loadFromFile(path); } @@ -105,30 +99,44 @@ Zotero.Translators = new function() { continue; } + // Check if there's already a cached translator with the same id if (_translators[translator.translatorID]) { - // same translator is already cached - translator.logError('Translator with ID '+ - translator.translatorID+' already loaded from "'+ - _translators[translator.translatorID].fileName + '"'); - } else { - // add to cache - _translators[translator.translatorID] = translator; - for(var type in TRANSLATOR_TYPES) { - if(translator.translatorType & TRANSLATOR_TYPES[type]) { - _cache[type].push(translator); - } + let existingTranslator = _translators[translator.translatorID]; + // If cached translator is older, delete it + if (existingTranslator.lastUpdated < translator.lastUpdated) { + translator.logError("Deleting older translator " + + existingTranslator.fileName + " with same ID as " + + translator.fileName); + yield OS.File.remove(existingTranslator.path); + delete _translators[translator.translatorID]; } - - if (!dbCacheEntry) { - yield Zotero.Translators.cacheInDB( - fileName, - translator.serialize(TRANSLATOR_REQUIRED_PROPERTIES. - concat(TRANSLATOR_OPTIONAL_PROPERTIES)), - lastModifiedTime - ); + // If cached translator is newer or the same, delete the current one + else { + translator.logError("Translator " + existingTranslator.fileName + + " with same ID is already loaded -- deleting " + + translator.fileName); + yield OS.File.remove(translator.path); + continue; + } + } + + // add to cache + _translators[translator.translatorID] = translator; + for (let type in TRANSLATOR_TYPES) { + if (translator.translatorType & TRANSLATOR_TYPES[type]) { + _cache[type].push(translator); } } + if (!dbCacheEntry) { + yield Zotero.Translators.cacheInDB( + fileName, + translator.serialize(TRANSLATOR_REQUIRED_PROPERTIES. + concat(TRANSLATOR_OPTIONAL_PROPERTIES)), + lastModifiedTime + ); + } + numCached++; } } @@ -137,7 +145,7 @@ Zotero.Translators = new function() { iterator.close(); } - // Remove translators from DB as necessary + // Remove translators from DB cache if no file for (let fileName in dbCache) { if (!filesInCache[fileName]) { yield Zotero.DB.queryAsync( @@ -358,15 +366,15 @@ Zotero.Translators = new function() { * @param {String} code * @return {Promise<nsIFile>} */ - this.save = function(metadata, code) { + this.save = Zotero.Promise.coroutine(function* (metadata, code) { if (!metadata.translatorID) { throw ("metadata.translatorID not provided in Zotero.Translators.save()"); } if (!metadata.translatorType) { var found = false; - for each(var type in TRANSLATOR_TYPES) { - if (metadata.translatorType & type) { + for (let type in TRANSLATOR_TYPES) { + if (metadata.translatorType & TRANSLATOR_TYPES[type]) { found = true; break; } @@ -377,26 +385,25 @@ Zotero.Translators = new function() { } if (!metadata.label) { - throw ("metadata.label not provided in Zotero.Translators.save()"); + throw new Error("metadata.label not provided"); } if (!metadata.priority) { - throw ("metadata.priority not provided in Zotero.Translators.save()"); + throw new Error("metadata.priority not provided"); } if (!metadata.lastUpdated) { - throw ("metadata.lastUpdated not provided in Zotero.Translators.save()"); + throw new Error("metadata.lastUpdated not provided"); } if (!code) { - throw ("code not provided in Zotero.Translators.save()"); + throw new Error("code not provided"); } var fileName = Zotero.Translators.getFileNameFromLabel( metadata.label, metadata.translatorID ); - var destFile = Zotero.getTranslatorsDirectory(); - destFile.append(fileName); + var destFile = OS.Path.join(Zotero.getTranslatorsDirectory().path, fileName); // JSON.stringify has the benefit of indenting JSON var metadataJSON = JSON.stringify(metadata, null, "\t"); @@ -404,38 +411,23 @@ Zotero.Translators = new function() { var str = metadataJSON + "\n\n" + code, translator; - return Zotero.Translators.get(metadata.translatorID) - .then(function(gTranslator) { - translator = gTranslator; - var sameFile = translator && destFile.equals(translator.file); - if (sameFile) return; - - return Zotero.Promise.resolve(OS.File.exists(destFile.path)) - .then(function (exists) { - if (exists) { - var msg = "Overwriting translator with same filename '" - + fileName + "'"; - Zotero.debug(msg, 1); - Zotero.debug(metadata, 1); - Components.utils.reportError(msg); - } - }); - }) - .then(function () { - if (!translator) return; - - return Zotero.Promise.resolve(OS.File.exists(translator.file.path)) - .then(function (exists) { - translator.file.remove(false); - }); - }) - .then(function () { - Zotero.debug("Saving translator '" + metadata.label + "'"); - Zotero.debug(str); - return Zotero.File.putContentsAsync(destFile, str) - .thenResolve(destFile); - }); - } + var translator = Zotero.Translators.get(metadata.translatorID); + var sameFile = translator && destFile == translator.path; + if (sameFile) return; + + var exists = yield OS.File.exists(destFile); + if (exists) { + var msg = "Overwriting translator with same filename '" + + fileName + "'"; + Zotero.debug(msg, 1); + Zotero.debug(metadata, 1); + Components.utils.reportError(msg); + } + + Zotero.debug("Saving translator '" + metadata.label + "'"); + Zotero.debug(metadata); + return Zotero.File.putContentsAsync(destFile, str).return(destFile); + }); this.cacheInDB = function(fileName, metadataJSON, lastModifiedTime) { return Zotero.DB.queryAsync(