Automatically correct missing item server errors by flagging missing items for update on next sync

This commit is contained in:
Dan Stillman 2009-05-27 04:13:25 +00:00
parent 6de3c02301
commit e0f1ef7646
2 changed files with 31 additions and 4 deletions

View file

@ -1943,6 +1943,18 @@ Zotero.Item.prototype.save = function() {
}
/**
* Used by sync code
*/
Zotero.Item.prototype.updateClientDateModified = function () {
if (!this.id) {
throw ("Cannot update clientDateModified of unsaved item in Zotero.Item.updateClientDateModified()");
}
var sql = "UPDATE items SET clientDateModified=? WHERE itemID=?";
Zotero.DB.query(sql, [Zotero.DB.transactionDateTime, this.id]);
}
Zotero.Item.prototype.isRegularItem = function() {
return !(this.isNote() || this.isAttachment());
}
@ -2481,7 +2493,7 @@ Zotero.Item.prototype.getFile = function(row, skipExistsCheck) {
}
if (!skipExistsCheck && !file.exists()) {
Zotero.debug("Attachment file not found", 2);
Zotero.debug("Attachment file '" + file.path + "' not found", 2);
return false;
}

View file

@ -846,7 +846,7 @@ Zotero.Sync.Server = new function () {
if (!username) {
_error("Username not set in Zotero.Sync.Server.login()");
}
else if (!username.match(/^[\w\d\. ]+$/)) {
else if (!username.match(/^[\w\d\. \-\_]+$/)) {
_error("Invalid username '" + username + "' in Zotero.Sync.Server.login()");
}
@ -1442,10 +1442,12 @@ Zotero.Sync.Server = new function () {
_error('Invalid response from server', xmlhttp.responseText);
}
var firstChild = xmlhttp.responseXML.firstChild.firstChild;
// Temporarily disable auto-sync if instructed by server
if (xmlhttp.responseXML.firstChild.firstChild.localName == 'throttle') {
if (firstChild.localName == 'throttle') {
Zotero.debug(xmlhttp.responseText);
var delay = xmlhttp.responseXML.firstChild.firstChild.getAttribute('delay');
var delay = first.getAttribute('delay');
var time = new Date();
time = time.getTime() + (delay * 1000);
time = new Date(time);
@ -1459,6 +1461,19 @@ Zotero.Sync.Server = new function () {
// TODO: localize
_error("Auto-syncing disabled until " + timeStr);
}
if (firstChild.localName == 'error' && firstChild.getAttribute('code') == 'ITEM_MISSING') {
var [libraryID, key] = firstChild.getAttribute('missingItem').split('/');
if (libraryID == Zotero.libraryID) {
libraryID = null;
}
var item = Zotero.Items.getByLibraryAndKey(libraryID, key);
if (item) {
Zotero.DB.rollbackAllTransactions();
item.updateClientDateModified();
}
}
}