More bundled files fixes

This commit is contained in:
Dan Stillman 2015-03-22 16:03:01 -04:00
parent e6ccca3230
commit a2d7dfd206
2 changed files with 83 additions and 91 deletions

View file

@ -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

View file

@ -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(