commit 1d972ae92c01d1ac9d4948872722ba0e54e14f02
parent b3cca1f60ec17ea6fd65d94709f10949ef838a6a
Author: Dan Stillman <dstillman@zotero.org>
Date: Sat, 27 Dec 2008 07:24:55 +0000
If a tag is deleted remotely and modified locally, keep local and display warning
Diffstat:
2 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/chrome/content/zotero/merge.js b/chrome/content/zotero/merge.js
@@ -51,11 +51,8 @@ var Zotero_Merge_Window = new function () {
}
break;
- case 'collection':
- break;
-
default:
- throw ("Unsupported merge object type '" + type
+ throw ("Unsupported merge object type '" + _mergeGroup.type
+ "' in Zotero_Merge_Window.init()");
}
diff --git a/chrome/content/zotero/xpcom/sync.js b/chrome/content/zotero/xpcom/sync.js
@@ -1752,7 +1752,7 @@ Zotero.Sync.Server.Data = new function() {
default:
alert('Delete reconciliation unimplemented for ' + types);
- throw ('Delete reconciliation unimplemented for ' + types);
+ throw ('Delete reconciliation unimplemented for ' + types);
}
}
@@ -1852,7 +1852,7 @@ Zotero.Sync.Server.Data = new function() {
//
- // Handle deleted objects
+ // Handle remotely deleted objects
//
if (xml.deleted && xml.deleted[types]) {
Zotero.debug("Processing remotely deleted " + types);
@@ -1869,19 +1869,37 @@ Zotero.Sync.Server.Data = new function() {
continue;
}
- // Local object has been modified since last sync -- reconcile
- var now = Zotero.Date.sqlToDate(obj.dateModified, true);
- if (now >= lastLocalSyncDate) {
- // TODO: order reconcile by parent/child
- toReconcile.push([obj, 'deleted']);
- }
+ var modDate = Zotero.Date.sqlToDate(obj.dateModified, true);
+
// Local object hasn't been modified -- delete
- else {
+ if (modDate < lastLocalSyncDate) {
toDelete.push(obj.id);
+ continue;
+ }
+
+ // Local object has been modified since last sync -- reconcile
+ switch (type) {
+ case 'item':
+ // TODO: order reconcile by parent/child
+ toReconcile.push([obj, 'deleted']);
+ break;
+
+ case 'tag':
+ var msg = _generateAutoChangeMessage(
+ type, obj.name, null
+ );
+ alert(msg);
+ continue;
+
+ default:
+ alert('Delete reconciliation unimplemented for ' + types);
+ throw ('Delete reconciliation unimplemented for ' + types);
+
}
}
}
+
//
// Reconcile objects that have changed locally and remotely
//
@@ -2246,6 +2264,10 @@ Zotero.Sync.Server.Data = new function() {
localName = "[deleted]";
var localDelete = true;
}
+ else if (remoteName === null) {
+ remoteName = "[deleted]";
+ var remoteDelete = true;
+ }
// TODO: localize
var msg = "A " + itemType + " has changed both locally and "
@@ -2257,6 +2279,9 @@ Zotero.Sync.Server.Data = new function() {
if (localDelete) {
msg += "The remote version has been kept.";
}
+ else if (remoteDelete) {
+ msg += "The local version has been kept.";
+ }
else {
var moreRecent = remoteMoreRecent ? remoteName : localName;
msg += "The most recent version, '" + moreRecent + "', has been kept.";