Fix auto-syncing of unchecked groups after object change

This commit is contained in:
Dan Stillman 2017-07-21 19:39:37 -04:00
parent 6d2c72fb54
commit 225215842d
3 changed files with 33 additions and 17 deletions

View File

@ -126,27 +126,25 @@ Zotero.Sync.EventListeners.AutoSyncListener = {
// Only trigger sync for certain types // Only trigger sync for certain types
// //
// TODO: settings, full text // TODO: settings, full text
if (Zotero.DataObjectUtilities.getTypes().indexOf(type) == -1) { if (!Zotero.DataObjectUtilities.getTypes().includes(type)) {
return; return;
} }
// Determine affected libraries so only those can be synced // Determine affected libraries so only those can be synced
let libraryIDs = new Set(); let libraries = [];
if (Zotero.DataObjectUtilities.getTypes().indexOf(type) != -1) { let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type); ids.forEach(id => {
ids.forEach(id => { let lk = objectsClass.getLibraryAndKeyFromID(id);
let lk = objectsClass.getLibraryAndKeyFromID(id); if (lk) {
if (lk && Zotero.Libraries.get(lk.libraryID).syncable) { let library = Zotero.Libraries.get(lk.libraryID);
libraryIDs.add(lk.libraryID); if (library.syncable) {
libraries.push(library);
} }
}); }
} });
// Don't include skipped libraries libraries = Zotero.Sync.Data.Local.filterSkippedLibraries(libraries);
var skipped = new Set(Zotero.Sync.Data.Local.getSkippedLibraries()); if (!libraries.length) {
libraryIDs = Array.from(libraryIDs.values()).filter(id => !skipped.has(id));
if (!libraryIDs.length) {
return; return;
} }
@ -154,7 +152,7 @@ Zotero.Sync.EventListeners.AutoSyncListener = {
this._editTimeout, this._editTimeout,
false, false,
{ {
libraries: libraryIDs libraries: libraries.map(library => library.libraryID)
} }
); );
}, },

View File

@ -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} * @return {nsILoginInfo|false}
*/ */

View File

@ -38,7 +38,7 @@ describe("Zotero.Sync.EventListeners", function () {
var expectation = mock.expects("setSyncTimeout").never(); var expectation = mock.expects("setSyncTimeout").never();
var group = yield createGroup(); 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 createDataObject('item', { libraryID: group.libraryID });
yield Zotero.Promise.delay(10); yield Zotero.Promise.delay(10);