From d64932dad70c0be31375b99c92fd2c994007bb58 Mon Sep 17 00:00:00 2001 From: Scott Ruoti Date: Sat, 29 Oct 2022 22:54:31 -0400 Subject: [PATCH] Fixes bug when titles are in multiple series being collapsed --- server/utils/libraryHelpers.js | 43 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/server/utils/libraryHelpers.js b/server/utils/libraryHelpers.js index cb5fb0d4..19e0cd6f 100644 --- a/server/utils/libraryHelpers.js +++ b/server/utils/libraryHelpers.js @@ -283,32 +283,31 @@ module.exports = { collapseBookSeries(libraryItems, series) { var seriesObjects = this.getSeriesFromBooks(libraryItems, series, null, null, true) var seriesToUse = {} - var libraryItemIdsToHide = [] - seriesObjects.forEach((series) => { - series.firstBook = series.books.find(b => !seriesToUse[b.id]) // Find first book not already used - if (series.firstBook) { - seriesToUse[series.firstBook.id] = series - libraryItemIdsToHide = libraryItemIdsToHide.concat(series.books.filter(b => !seriesToUse[b.id]).map(b => b.id)) - } - }) + var collapsedLibraryItems = [] - return libraryItems.map((li) => { + libraryItems.forEach((li) => { if (li.mediaType != 'book') return - var libraryItemJson = li.toJSONMinified() - if (libraryItemIdsToHide.includes(li.id)) { - return null - } - if (seriesToUse[li.id]) { + + // Handle when this is the first book in a series + seriesObjects.filter(s => s.books[0].id == li.id).forEach(series => { + let libraryItemJson = li.toJSONMinified() libraryItemJson.collapsedSeries = { - id: seriesToUse[li.id].id, - name: seriesToUse[li.id].name, - nameIgnorePrefix: seriesToUse[li.id].nameIgnorePrefix, - libraryItemIds: seriesToUse[li.id].books.map(b => b.id), - numBooks: seriesToUse[li.id].books.length + id: series.id, + name: series.name, + nameIgnorePrefix: series.nameIgnorePrefix, + libraryItemIds: series.books.map(b => b.id), + numBooks: series.books.length } - } - return libraryItemJson - }).filter(li => li) + collapsedLibraryItems.push(libraryItemJson); + }); + + // Ignore books contained in series + if (li.media.metadata.series.length) return + + collapsedLibraryItems.push(li.toJSONMinified()) + }); + + return collapsedLibraryItems }, buildPersonalizedShelves(user, libraryItems, mediaType, allSeries, allAuthors, maxEntitiesPerShelf = 10) {