From cd3f621a00a7eaf50ceca3efffdd69fab25f5ed8 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Mon, 11 Jul 2016 18:50:53 -0400 Subject: [PATCH] Don't auto-sync skipped libraries on change --- .../zotero/xpcom/sync/syncEventListeners.js | 8 +++- test/tests/syncEventListenersTest.js | 48 +++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 test/tests/syncEventListenersTest.js diff --git a/chrome/content/zotero/xpcom/sync/syncEventListeners.js b/chrome/content/zotero/xpcom/sync/syncEventListeners.js index cbe38736f..8b2ad3a67 100644 --- a/chrome/content/zotero/xpcom/sync/syncEventListeners.js +++ b/chrome/content/zotero/xpcom/sync/syncEventListeners.js @@ -140,7 +140,11 @@ Zotero.Sync.EventListeners.AutoSyncListener = { }); } - if (!libraryIDs.size) { + // Don't include skipped libraries + var skipped = new Set(Zotero.Sync.Data.Local.getSkippedLibraries()); + libraryIDs = Array.from(libraryIDs.values()).filter(id => !skipped.has(id)); + + if (!libraryIDs.length) { return; } @@ -148,7 +152,7 @@ Zotero.Sync.EventListeners.AutoSyncListener = { this._editTimeout, false, { - libraries: libraryIDs.values() + libraries: libraryIDs } ); }, diff --git a/test/tests/syncEventListenersTest.js b/test/tests/syncEventListenersTest.js new file mode 100644 index 000000000..02f207597 --- /dev/null +++ b/test/tests/syncEventListenersTest.js @@ -0,0 +1,48 @@ +"use strict"; + +describe("Zotero.Sync.EventListeners", function () { + describe("AutoSyncListener", function () { + var originalTimeout; + + before(function () { + originalTimeout = Zotero.Sync.EventListeners.AutoSyncListener._editTimeout; + assert.ok(originalTimeout); + // Set timeout to 1ms + Zotero.Sync.EventListeners.AutoSyncListener._editTimeout = 0.001; + Zotero.Prefs.set('sync.autoSync', true); + }); + + + after(function () { + Zotero.Sync.EventListeners.AutoSyncListener._editTimeout = originalTimeout; + Zotero.Prefs.set('sync.autoSync', false); + Zotero.Prefs.clear('sync.librariesToSkip'); + }); + + + it("should sync only changed library", function* () { + var mock = sinon.mock(Zotero.Sync.Runner); + var expectation = mock.expects("setSyncTimeout").once(); + + var group = yield createGroup(); + yield createDataObject('item', { libraryID: group.libraryID }); + + yield Zotero.Promise.delay(10); + mock.verify(); + assert.sameMembers(expectation.getCall(0).args[2].libraries, [group.libraryID]); + }); + + + it("shouldn't sync skipped library", function* () { + var mock = sinon.mock(Zotero.Sync.Runner); + var expectation = mock.expects("setSyncTimeout").never(); + + var group = yield createGroup(); + Zotero.Prefs.set('sync.librariesToSkip', JSON.stringify(["L" + group.libraryID])); + yield createDataObject('item', { libraryID: group.libraryID }); + + yield Zotero.Promise.delay(10); + mock.verify(); + }); + }); +});