Delete from sync cache when deleting object

This commit is contained in:
Dan Stillman 2015-08-06 05:25:45 -04:00
parent b5b99672db
commit 51253fb933
4 changed files with 35 additions and 14 deletions

View File

@ -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) {

View File

@ -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: {

View File

@ -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() {

View File

@ -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;