www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 225215842dbdde93d05236bbf7e5008004714c74
parent 6d2c72fb54f1ed1eaa99ab4ec7a76d4a6ce86ade
Author: Dan Stillman <dstillman@zotero.org>
Date:   Fri, 21 Jul 2017 19:39:37 -0400

Fix auto-syncing of unchecked groups after object change

Diffstat:
Mchrome/content/zotero/xpcom/sync/syncEventListeners.js | 30++++++++++++++----------------
Mchrome/content/zotero/xpcom/sync/syncLocal.js | 18++++++++++++++++++
Mtest/tests/syncEventListenersTest.js | 2+-
3 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/chrome/content/zotero/xpcom/sync/syncEventListeners.js b/chrome/content/zotero/xpcom/sync/syncEventListeners.js @@ -126,27 +126,25 @@ Zotero.Sync.EventListeners.AutoSyncListener = { // Only trigger sync for certain types // // TODO: settings, full text - if (Zotero.DataObjectUtilities.getTypes().indexOf(type) == -1) { + if (!Zotero.DataObjectUtilities.getTypes().includes(type)) { return; } // Determine affected libraries so only those can be synced - let libraryIDs = new Set(); - if (Zotero.DataObjectUtilities.getTypes().indexOf(type) != -1) { - let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type); - ids.forEach(id => { - let lk = objectsClass.getLibraryAndKeyFromID(id); - if (lk && Zotero.Libraries.get(lk.libraryID).syncable) { - libraryIDs.add(lk.libraryID); + let libraries = []; + let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type); + ids.forEach(id => { + let lk = objectsClass.getLibraryAndKeyFromID(id); + if (lk) { + let library = Zotero.Libraries.get(lk.libraryID); + if (library.syncable) { + libraries.push(library); } - }); - } - - // 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) { + libraries = Zotero.Sync.Data.Local.filterSkippedLibraries(libraries); + if (!libraries.length) { return; } @@ -154,7 +152,7 @@ Zotero.Sync.EventListeners.AutoSyncListener = { this._editTimeout, false, { - libraries: libraryIDs + libraries: libraries.map(library => library.libraryID) } ); }, diff --git a/chrome/content/zotero/xpcom/sync/syncLocal.js b/chrome/content/zotero/xpcom/sync/syncLocal.js @@ -333,6 +333,24 @@ Zotero.Sync.Data.Local = { /** + * @param {Zotero.Library[]} libraries + * @return {Zotero.Library[]} + */ + filterSkippedLibraries: function (libraries) { + var skippedLibraries = this.getSkippedLibraries(); + var skippedGroups = this.getSkippedGroups(); + + return libraries.filter((library) => { + var libraryType = library.libraryType; + if (libraryType == 'group') { + return !skippedGroups.includes(library.groupID); + } + return !skippedLibraries.includes(library.libraryID); + }); + }, + + + /** * @return {nsILoginInfo|false} */ _getAPIKeyLoginInfo: function () { diff --git a/test/tests/syncEventListenersTest.js b/test/tests/syncEventListenersTest.js @@ -38,7 +38,7 @@ describe("Zotero.Sync.EventListeners", function () { var expectation = mock.expects("setSyncTimeout").never(); var group = yield createGroup(); - Zotero.Prefs.set('sync.librariesToSkip', JSON.stringify(["L" + group.libraryID])); + Zotero.Prefs.set('sync.librariesToSkip', JSON.stringify(["G" + group.groupID])); yield createDataObject('item', { libraryID: group.libraryID }); yield Zotero.Promise.delay(10);