Delete from sync cache when deleting object
This commit is contained in:
parent
b5b99672db
commit
51253fb933
|
@ -1154,7 +1154,7 @@ Zotero.DataObject.prototype.erase = Zotero.Promise.coroutine(function* (options)
|
||||||
Zotero.DB.requireTransaction();
|
Zotero.DB.requireTransaction();
|
||||||
Zotero.DataObject.prototype._initErase.call(this, env);
|
Zotero.DataObject.prototype._initErase.call(this, env);
|
||||||
yield this._eraseData(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 () {
|
Zotero.DB.addCurrentCallback("commit", function () {
|
||||||
this.ObjectsClass.unload(env.deletedObjectIDs || this.id);
|
this.ObjectsClass.unload(env.deletedObjectIDs || this.id);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
@ -1189,7 +1192,7 @@ Zotero.DataObject.prototype._finalizeErase = function (env) {
|
||||||
env.notifierData
|
env.notifierData
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
|
|
||||||
Zotero.DataObject.prototype.toResponseJSON = Zotero.Promise.coroutine(function* (options) {
|
Zotero.DataObject.prototype.toResponseJSON = Zotero.Promise.coroutine(function* (options) {
|
||||||
|
|
|
@ -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) {
|
resolveConflicts: function (conflicts) {
|
||||||
var io = {
|
var io = {
|
||||||
dataIn: {
|
dataIn: {
|
||||||
|
|
|
@ -295,6 +295,21 @@ describe("Zotero.DataObject", function() {
|
||||||
Zotero.Notifier.unregisterObserver(id);
|
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() {
|
describe("#updateVersion()", function() {
|
||||||
|
|
|
@ -204,7 +204,7 @@ describe("Zotero.Sync.Data.Local", function() {
|
||||||
var type = 'item';
|
var type = 'item';
|
||||||
var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
|
var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
|
||||||
|
|
||||||
// Create object in cache
|
// Create object, generate JSON, and delete
|
||||||
var obj = yield createDataObject(type, { version: 10 });
|
var obj = yield createDataObject(type, { version: 10 });
|
||||||
var jsonData = yield obj.toJSON();
|
var jsonData = yield obj.toJSON();
|
||||||
var key = jsonData.key = obj.key;
|
var key = jsonData.key = obj.key;
|
||||||
|
@ -214,16 +214,14 @@ describe("Zotero.Sync.Data.Local", function() {
|
||||||
version: jsonData.version,
|
version: jsonData.version,
|
||||||
data: jsonData
|
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
|
// Create new version in cache, simulating a download
|
||||||
json.version = jsonData.version = 15;
|
json.version = jsonData.version = 15;
|
||||||
jsonData.title = Zotero.Utilities.randomString();
|
jsonData.title = Zotero.Utilities.randomString();
|
||||||
yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
|
yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
|
||||||
|
|
||||||
// Delete object locally
|
|
||||||
yield obj.eraseTx();
|
|
||||||
|
|
||||||
waitForWindow('chrome://zotero/content/merge.xul', function (dialog) {
|
waitForWindow('chrome://zotero/content/merge.xul', function (dialog) {
|
||||||
var doc = dialog.document;
|
var doc = dialog.document;
|
||||||
var wizard = doc.documentElement;
|
var wizard = doc.documentElement;
|
||||||
|
@ -243,13 +241,13 @@ describe("Zotero.Sync.Data.Local", function() {
|
||||||
assert.isFalse(obj);
|
assert.isFalse(obj);
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should handle restore locally deleted item", function* () {
|
it("should restore locally deleted item", function* () {
|
||||||
var libraryID = Zotero.Libraries.userLibraryID;
|
var libraryID = Zotero.Libraries.userLibraryID;
|
||||||
|
|
||||||
var type = 'item';
|
var type = 'item';
|
||||||
var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
|
var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
|
||||||
|
|
||||||
// Create object in cache
|
// Create object, generate JSON, and delete
|
||||||
var obj = yield createDataObject(type, { version: 10 });
|
var obj = yield createDataObject(type, { version: 10 });
|
||||||
var jsonData = yield obj.toJSON();
|
var jsonData = yield obj.toJSON();
|
||||||
var key = jsonData.key = obj.key;
|
var key = jsonData.key = obj.key;
|
||||||
|
@ -259,16 +257,13 @@ describe("Zotero.Sync.Data.Local", function() {
|
||||||
version: jsonData.version,
|
version: jsonData.version,
|
||||||
data: jsonData
|
data: jsonData
|
||||||
};
|
};
|
||||||
yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
|
yield obj.eraseTx();
|
||||||
|
|
||||||
// Create new version in cache, simulating a download
|
// Create new version in cache, simulating a download
|
||||||
json.version = jsonData.version = 15;
|
json.version = jsonData.version = 15;
|
||||||
jsonData.title = Zotero.Utilities.randomString();
|
jsonData.title = Zotero.Utilities.randomString();
|
||||||
yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
|
yield Zotero.Sync.Data.Local.saveCacheObjects(type, libraryID, [json]);
|
||||||
|
|
||||||
// Delete object locally
|
|
||||||
yield obj.eraseTx();
|
|
||||||
|
|
||||||
waitForWindow('chrome://zotero/content/merge.xul', function (dialog) {
|
waitForWindow('chrome://zotero/content/merge.xul', function (dialog) {
|
||||||
var doc = dialog.document;
|
var doc = dialog.document;
|
||||||
var wizard = doc.documentElement;
|
var wizard = doc.documentElement;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user