From 5b0f02a12b530d700f25c575f72d7b7dd14dd087 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Fri, 14 May 2021 03:12:33 -0400 Subject: [PATCH] Trigger auto-sync after item deletion It looks like this has been broken for years. --- .../zotero/xpcom/sync/syncEventListeners.js | 10 +++++++++- test/tests/syncEventListenersTest.js | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/chrome/content/zotero/xpcom/sync/syncEventListeners.js b/chrome/content/zotero/xpcom/sync/syncEventListeners.js index 7597a81391..49fabcdb62 100644 --- a/chrome/content/zotero/xpcom/sync/syncEventListeners.js +++ b/chrome/content/zotero/xpcom/sync/syncEventListeners.js @@ -149,9 +149,17 @@ Zotero.Sync.EventListeners.AutoSyncListener = { else if (Zotero.DataObjectUtilities.getTypes().includes(type)) { let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type); ids.forEach(id => { + let libraryID; let lk = objectsClass.getLibraryAndKeyFromID(id); if (lk) { - let library = Zotero.Libraries.get(lk.libraryID); + libraryID = lk.libraryID; + } + // On object deletion, libraryID should be in extraData + else if (extraData && extraData[id] && extraData[id].libraryID) { + libraryID = extraData[id].libraryID; + } + if (libraryID) { + let library = Zotero.Libraries.get(libraryID); if (library.syncable) { libraries.push(library); } diff --git a/test/tests/syncEventListenersTest.js b/test/tests/syncEventListenersTest.js index 3a4de4488c..4f58767c38 100644 --- a/test/tests/syncEventListenersTest.js +++ b/test/tests/syncEventListenersTest.js @@ -97,6 +97,21 @@ describe("Zotero.Sync.EventListeners", function () { assert.sameMembers(expectation.getCall(0).args[2].libraries, [Zotero.Libraries.userLibraryID]); }); + it("should auto-sync after item deletion", async function () { + Zotero.Prefs.set('sync.autoSync', false); + var item = await createDataObject('item'); + Zotero.Prefs.set('sync.autoSync', true); + + var mock = sinon.mock(Zotero.Sync.Runner); + var expectation = mock.expects("setSyncTimeout").once(); + + await item.eraseTx(); + + await Zotero.Promise.delay(10); + mock.verify(); + assert.sameMembers(expectation.getCall(0).args[2].libraries, [Zotero.Libraries.userLibraryID]); + }); + it("should auto-sync after attachment reindex", async function () { Zotero.Prefs.set('sync.autoSync', false); var attachment = await importFileAttachment('test.pdf');