Purge old objects in sync cache after upload
This commit is contained in:
parent
aa1fc01b31
commit
5b0b874435
3 changed files with 25 additions and 1 deletions
|
@ -204,7 +204,7 @@ Zotero.Sync.Data.Engine.prototype.stop = function () {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Download updated objects from API and save to local cache
|
* Download updated objects from API and save to DB
|
||||||
*
|
*
|
||||||
* @return {Promise<Integer>} - A download result code (this.DOWNLOAD_RESULT_*)
|
* @return {Promise<Integer>} - A download result code (this.DOWNLOAD_RESULT_*)
|
||||||
*/
|
*/
|
||||||
|
@ -1107,6 +1107,11 @@ Zotero.Sync.Data.Engine.prototype._uploadObjects = Zotero.Promise.coroutine(func
|
||||||
objectsClass.updateSynced(updateSyncedIDs, true);
|
objectsClass.updateSynced(updateSyncedIDs, true);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
// Purge older objects in sync cache
|
||||||
|
if (toSave.length) {
|
||||||
|
yield Zotero.Sync.Data.Local.purgeCache(objectType, this.libraryID);
|
||||||
|
}
|
||||||
|
|
||||||
// Handle failed objects
|
// Handle failed objects
|
||||||
for (let index in results.failed) {
|
for (let index in results.failed) {
|
||||||
let { code, message, data } = results.failed[index];
|
let { code, message, data } = results.failed[index];
|
||||||
|
|
|
@ -1104,6 +1104,21 @@ Zotero.Sync.Data.Local = {
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete entries from sync cache that don't exist or are less than the current object version
|
||||||
|
*/
|
||||||
|
purgeCache: Zotero.Promise.coroutine(function* (objectType, libraryID) {
|
||||||
|
var syncObjectTypeID = Zotero.Sync.Data.Utilities.getSyncObjectTypeID(objectType);
|
||||||
|
var table = Zotero.DataObjectUtilities.getObjectsClassForObjectType(objectType).table;
|
||||||
|
var sql = "DELETE FROM syncCache WHERE ROWID IN ("
|
||||||
|
+ "SELECT SC.ROWID FROM syncCache SC "
|
||||||
|
+ `LEFT JOIN ${table} O USING (libraryID, key, version) `
|
||||||
|
+ "WHERE syncObjectTypeID=? AND SC.libraryID=? AND "
|
||||||
|
+ "(O.libraryID IS NULL OR SC.version < O.version)";
|
||||||
|
yield Zotero.DB.queryAsync(sql, [syncObjectTypeID, libraryID]);
|
||||||
|
}),
|
||||||
|
|
||||||
|
|
||||||
processConflicts: Zotero.Promise.coroutine(function* (objectType, libraryID, conflicts, options = {}) {
|
processConflicts: Zotero.Promise.coroutine(function* (objectType, libraryID, conflicts, options = {}) {
|
||||||
if (!conflicts.length) return [];
|
if (!conflicts.length) return [];
|
||||||
|
|
||||||
|
|
|
@ -682,6 +682,10 @@ describe("Zotero.Sync.Data.Engine", function () {
|
||||||
assert.isArray(cached.data.conditions);
|
assert.isArray(cached.data.conditions);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure older versions have been removed from the cache
|
||||||
|
let versions = yield Zotero.Sync.Data.Local.getCacheObjectVersions(type, libraryID, key);
|
||||||
|
assert.sameMembers(versions, [version]);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue