More bundled files fixes
This commit is contained in:
parent
e6ccca3230
commit
a2d7dfd206
2 changed files with 83 additions and 91 deletions
|
@ -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
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Add table
Reference in a new issue