commit cd3f621a00a7eaf50ceca3efffdd69fab25f5ed8
parent 599598566ba636ba92c73767cbfa07fb5e44b04c
Author: Dan Stillman <dstillman@zotero.org>
Date: Mon, 11 Jul 2016 18:50:53 -0400
Don't auto-sync skipped libraries on change
Diffstat:
2 files changed, 54 insertions(+), 2 deletions(-)
diff --git 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
@@ -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();
+ });
+ });
+});