diff --git a/chrome/content/zotero/xpcom/sync/syncEventListeners.js b/chrome/content/zotero/xpcom/sync/syncEventListeners.js index f6a7d6846..28e69ad8d 100644 --- 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 index becd3a83a..130bebb04 100644 --- a/chrome/content/zotero/xpcom/sync/syncLocal.js +++ b/chrome/content/zotero/xpcom/sync/syncLocal.js @@ -332,6 +332,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} */ diff --git a/test/tests/syncEventListenersTest.js b/test/tests/syncEventListenersTest.js index 02f207597..867dfb503 100644 --- 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);