Addresses #161, interface with CSL repository
Client-side updates (Note that translator updates were broken anyway, since the translator table was changed and the update mechanism wasn't, so that's fixed now too, and <=1.0.0b2.r1 won't be served updates via the repository.)
This commit is contained in:
parent
61fab3a2dd
commit
43bc723876
|
@ -401,7 +401,8 @@ Zotero.Schema = new function(){
|
||||||
|
|
||||||
var currentTime = xmlhttp.responseXML.
|
var currentTime = xmlhttp.responseXML.
|
||||||
getElementsByTagName('currentTime')[0].firstChild.nodeValue;
|
getElementsByTagName('currentTime')[0].firstChild.nodeValue;
|
||||||
var updates = xmlhttp.responseXML.getElementsByTagName('translator');
|
var translatorUpdates = xmlhttp.responseXML.getElementsByTagName('translator');
|
||||||
|
var styleUpdates = xmlhttp.responseXML.getElementsByTagName('style');
|
||||||
|
|
||||||
Zotero.DB.beginTransaction();
|
Zotero.DB.beginTransaction();
|
||||||
|
|
||||||
|
@ -412,29 +413,32 @@ Zotero.Schema = new function(){
|
||||||
var d = new Date();
|
var d = new Date();
|
||||||
_updateDBVersion('lastcheck', Math.round(d.getTime()/1000)); // JS uses ms
|
_updateDBVersion('lastcheck', Math.round(d.getTime()/1000)); // JS uses ms
|
||||||
|
|
||||||
if (!updates.length){
|
if (!translatorUpdates.length && !styleUpdates.length){
|
||||||
Zotero.debug('All scrapers are up-to-date');
|
Zotero.debug('All translators and styles are up-to-date');
|
||||||
Zotero.DB.commitTransaction();
|
Zotero.DB.commitTransaction();
|
||||||
_setRepositoryTimer(ZOTERO_CONFIG['REPOSITORY_CHECK_INTERVAL']);
|
_setRepositoryTimer(ZOTERO_CONFIG['REPOSITORY_CHECK_INTERVAL']);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i=0, len=updates.length; i<len; i++){
|
try {
|
||||||
try {
|
for (var i=0, len=translatorUpdates.length; i<len; i++){
|
||||||
_scraperXMLToDBQuery(updates[i]);
|
_translatorXMLToDB(translatorUpdates[i]);
|
||||||
}
|
}
|
||||||
catch (e) {
|
|
||||||
Zotero.debug(e, 1);
|
for (var i=0, len=styleUpdates.length; i<len; i++){
|
||||||
Zotero.DB.rollbackTransaction();
|
_styleXMLToDB(styleUpdates[i]);
|
||||||
var breakout = true;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (e) {
|
||||||
|
Zotero.debug(e, 1);
|
||||||
|
Zotero.DB.rollbackTransaction();
|
||||||
|
_setRepositoryTimer(ZOTERO_CONFIG['REPOSITORY_RETRY_INTERVAL']);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!breakout){
|
Zotero.DB.commitTransaction();
|
||||||
Zotero.DB.commitTransaction();
|
_setRepositoryTimer(ZOTERO_CONFIG['REPOSITORY_CHECK_INTERVAL']);
|
||||||
_setRepositoryTimer(ZOTERO_CONFIG['REPOSITORY_CHECK_INTERVAL']);
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -467,30 +471,49 @@ Zotero.Schema = new function(){
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Traverse an XML scraper node from the repository and
|
* Traverse an XML translator node from the repository and
|
||||||
* update the local scrapers table with the scraper data
|
* update the local scrapers table with the scraper data
|
||||||
**/
|
**/
|
||||||
function _scraperXMLToDBQuery(xmlnode){
|
function _translatorXMLToDB(xmlnode){
|
||||||
var sqlValues = [
|
var sqlValues = [
|
||||||
{'string':xmlnode.getAttribute('id')},
|
{string: xmlnode.getAttribute('id')},
|
||||||
{'string':xmlnode.getAttribute('lastUpdated')},
|
{string: xmlnode.getAttribute('lastUpdated')},
|
||||||
{'string':xmlnode.getAttribute('type')},
|
1, // inRepository
|
||||||
{'string':xmlnode.getElementsByTagName('label')[0].firstChild.nodeValue},
|
{int: xmlnode.getElementsByTagName('priority')[0].firstChild.nodeValue},
|
||||||
{'string':xmlnode.getElementsByTagName('creator')[0].firstChild.nodeValue},
|
{int: xmlnode.getAttribute('type')},
|
||||||
|
{string: xmlnode.getElementsByTagName('label')[0].firstChild.nodeValue},
|
||||||
|
{string: xmlnode.getElementsByTagName('creator')[0].firstChild.nodeValue},
|
||||||
// target
|
// target
|
||||||
(xmlnode.getElementsByTagName('target').item(0) &&
|
(xmlnode.getElementsByTagName('target').item(0) &&
|
||||||
xmlnode.getElementsByTagName('target')[0].firstChild)
|
xmlnode.getElementsByTagName('target')[0].firstChild)
|
||||||
? {'string':xmlnode.getElementsByTagName('target')[0].firstChild.nodeValue}
|
? {string: xmlnode.getElementsByTagName('target')[0].firstChild.nodeValue}
|
||||||
: {'null':true},
|
: {null: true},
|
||||||
// detectCode can not exist or be empty
|
// detectCode can not exist or be empty
|
||||||
(xmlnode.getElementsByTagName('detectCode').item(0) &&
|
(xmlnode.getElementsByTagName('detectCode').item(0) &&
|
||||||
xmlnode.getElementsByTagName('detectCode')[0].firstChild)
|
xmlnode.getElementsByTagName('detectCode')[0].firstChild)
|
||||||
? {'string':xmlnode.getElementsByTagName('detectCode')[0].firstChild.nodeValue}
|
? {string: xmlnode.getElementsByTagName('detectCode')[0].firstChild.nodeValue}
|
||||||
: {'null':true},
|
: {null: true},
|
||||||
{'string':xmlnode.getElementsByTagName('code')[0].firstChild.nodeValue}
|
{string: xmlnode.getElementsByTagName('code')[0].firstChild.nodeValue}
|
||||||
]
|
];
|
||||||
|
|
||||||
var sql = "REPLACE INTO translators VALUES (?,?,?,?,?,?,?,?)";
|
var sql = "REPLACE INTO translators VALUES (?,?,?,?,?,?,?,?,?,?)";
|
||||||
|
return Zotero.DB.query(sql, sqlValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Traverse an XML style node from the repository and
|
||||||
|
* update the local csl table with the style data
|
||||||
|
**/
|
||||||
|
function _styleXMLToDB(xmlnode){
|
||||||
|
var sqlValues = [
|
||||||
|
{string: xmlnode.getAttribute('id')},
|
||||||
|
{string: xmlnode.getAttribute('updated')},
|
||||||
|
{string: xmlnode.getElementsByTagName('title')[0].firstChild.nodeValue},
|
||||||
|
{string: xmlnode.getElementsByTagName('csl')[0].firstChild.nodeValue}
|
||||||
|
];
|
||||||
|
|
||||||
|
var sql = "REPLACE INTO csl VALUES (?,?,?,?)";
|
||||||
return Zotero.DB.query(sql, sqlValues);
|
return Zotero.DB.query(sql, sqlValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user