commit 51253fb933d009d8ed52f52f343bbe8a7c952bdd
parent b5b99672db6da8d0b73223ba49694560b47618c5
Author: Dan Stillman <dstillman@zotero.org>
Date: Thu, 6 Aug 2015 05:25:45 -0400
Delete from sync cache when deleting object
Diffstat:
4 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/chrome/content/zotero/xpcom/data/dataObject.js b/chrome/content/zotero/xpcom/data/dataObject.js
@@ -1154,7 +1154,7 @@ Zotero.DataObject.prototype.erase = Zotero.Promise.coroutine(function* (options)
Zotero.DB.requireTransaction();
Zotero.DataObject.prototype._initErase.call(this, env);
yield this._eraseData(env);
- Zotero.DataObject.prototype._finalizeErase.call(this, env);
+ yield Zotero.DataObject.prototype._finalizeErase.call(this, env);
}
});
@@ -1176,7 +1176,10 @@ Zotero.DataObject.prototype._initErase = function (env) {
}
};
-Zotero.DataObject.prototype._finalizeErase = function (env) {
+Zotero.DataObject.prototype._finalizeErase = Zotero.Promise.coroutine(function* (env) {
+ // Delete versions from sync cache
+ yield Zotero.Sync.Data.Local.deleteCacheObject(this.objectType, this._libraryID, this._key);
+
Zotero.DB.addCurrentCallback("commit", function () {
this.ObjectsClass.unload(env.deletedObjectIDs || this.id);
}.bind(this));
@@ -1189,7 +1192,7 @@ Zotero.DataObject.prototype._finalizeErase = function (env) {
env.notifierData
);
}
-}
+});
Zotero.DataObject.prototype.toResponseJSON = Zotero.Promise.coroutine(function* (options) {
diff --git a/chrome/content/zotero/xpcom/sync/syncLocal.js b/chrome/content/zotero/xpcom/sync/syncLocal.js
@@ -492,6 +492,14 @@ Zotero.Sync.Data.Local = {
}),
+ deleteCacheObject: function (objectType, libraryID, key) {
+ var sql = "DELETE FROM syncCache WHERE libraryID=? AND key=? "
+ + "AND syncObjectTypeID IN (SELECT syncObjectTypeID FROM "
+ + "syncObjectTypes WHERE name=?)";;
+ return Zotero.DB.queryAsync(sql, [libraryID, key, objectType]);
+ },
+
+
resolveConflicts: function (conflicts) {
var io = {
dataIn: {
diff --git a/test/tests/dataObjectTest.js b/test/tests/dataObjectTest.js
@@ -295,6 +295,21 @@ describe("Zotero.DataObject", function() {
Zotero.Notifier.unregisterObserver(id);
}
})
+
+ it("should delete object versions from sync cache", function* () {
+ for (let type of types) {
+ let obj = yield createDataObject(type);
+ let libraryID = obj.libraryID;
+ let key = obj.key;
+ let json = yield obj.toJSON();
+ yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
+ yield obj.eraseTx();
+ let versions = yield Zotero.Sync.Data.Local.getCacheObjectVersions(
+ type, libraryID, key
+ );
+ assert.lengthOf(versions, 0);
+ }
+ })
})
describe("#updateVersion()", function() {
diff --git a/test/tests/syncLocalTest.js b/test/tests/syncLocalTest.js
@@ -204,7 +204,7 @@ describe("Zotero.Sync.Data.Local", function() {
var type = 'item';
var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
- // Create object in cache
+ // Create object, generate JSON, and delete
var obj = yield createDataObject(type, { version: 10 });
var jsonData = yield obj.toJSON();
var key = jsonData.key = obj.key;
@@ -214,16 +214,14 @@ describe("Zotero.Sync.Data.Local", function() {
version: jsonData.version,
data: jsonData
};
- yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
+ // Delete object locally
+ yield obj.eraseTx();
// Create new version in cache, simulating a download
json.version = jsonData.version = 15;
jsonData.title = Zotero.Utilities.randomString();
yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
- // Delete object locally
- yield obj.eraseTx();
-
waitForWindow('chrome://zotero/content/merge.xul', function (dialog) {
var doc = dialog.document;
var wizard = doc.documentElement;
@@ -243,13 +241,13 @@ describe("Zotero.Sync.Data.Local", function() {
assert.isFalse(obj);
})
- it("should handle restore locally deleted item", function* () {
+ it("should restore locally deleted item", function* () {
var libraryID = Zotero.Libraries.userLibraryID;
var type = 'item';
var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
- // Create object in cache
+ // Create object, generate JSON, and delete
var obj = yield createDataObject(type, { version: 10 });
var jsonData = yield obj.toJSON();
var key = jsonData.key = obj.key;
@@ -259,16 +257,13 @@ describe("Zotero.Sync.Data.Local", function() {
version: jsonData.version,
data: jsonData
};
- yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
+ yield obj.eraseTx();
// Create new version in cache, simulating a download
json.version = jsonData.version = 15;
jsonData.title = Zotero.Utilities.randomString();
yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
- // Delete object locally
- yield obj.eraseTx();
-
waitForWindow('chrome://zotero/content/merge.xul', function (dialog) {
var doc = dialog.document;
var wizard = doc.documentElement;