Fixes bug when titles are in multiple series being collapsed

This commit is contained in:
Scott Ruoti 2022-10-29 22:54:31 -04:00
parent a3dc79121e
commit d64932dad7

View File

@ -283,32 +283,31 @@ module.exports = {
collapseBookSeries(libraryItems, series) { collapseBookSeries(libraryItems, series) {
var seriesObjects = this.getSeriesFromBooks(libraryItems, series, null, null, true) var seriesObjects = this.getSeriesFromBooks(libraryItems, series, null, null, true)
var seriesToUse = {} var seriesToUse = {}
var libraryItemIdsToHide = [] var collapsedLibraryItems = []
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))
}
})
return libraryItems.map((li) => { libraryItems.forEach((li) => {
if (li.mediaType != 'book') return if (li.mediaType != 'book') return
var libraryItemJson = li.toJSONMinified()
if (libraryItemIdsToHide.includes(li.id)) { // Handle when this is the first book in a series
return null seriesObjects.filter(s => s.books[0].id == li.id).forEach(series => {
} let libraryItemJson = li.toJSONMinified()
if (seriesToUse[li.id]) {
libraryItemJson.collapsedSeries = { libraryItemJson.collapsedSeries = {
id: seriesToUse[li.id].id, id: series.id,
name: seriesToUse[li.id].name, name: series.name,
nameIgnorePrefix: seriesToUse[li.id].nameIgnorePrefix, nameIgnorePrefix: series.nameIgnorePrefix,
libraryItemIds: seriesToUse[li.id].books.map(b => b.id), libraryItemIds: series.books.map(b => b.id),
numBooks: seriesToUse[li.id].books.length numBooks: series.books.length
} }
} collapsedLibraryItems.push(libraryItemJson);
return libraryItemJson });
}).filter(li => li)
// 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) { buildPersonalizedShelves(user, libraryItems, mediaType, allSeries, allAuthors, maxEntitiesPerShelf = 10) {