diff --git a/server/Database.js b/server/Database.js index 213c2c61b..dd506e4c7 100644 --- a/server/Database.js +++ b/server/Database.js @@ -514,19 +514,17 @@ class Database { }) } - replaceNarratorInFilterData(oldNarrator, newNarrator) { - for (const libraryId in this.libraryFilterData) { - const indexOf = this.libraryFilterData[libraryId].narrators.findIndex((n) => n === oldNarrator) - if (indexOf >= 0) { - this.libraryFilterData[libraryId].narrators.splice(indexOf, 1, newNarrator) - } + replaceNarratorInFilterData(libraryId, oldNarrator, newNarrator) { + if (!this.libraryFilterData[libraryId]) return + const indexOf = this.libraryFilterData[libraryId].narrators.findIndex((n) => n === oldNarrator) + if (indexOf >= 0) { + this.libraryFilterData[libraryId].narrators.splice(indexOf, 1, newNarrator) } } - removeNarratorFromFilterData(narrator) { - for (const libraryId in this.libraryFilterData) { - this.libraryFilterData[libraryId].narrators = this.libraryFilterData[libraryId].narrators.filter((n) => n !== narrator) - } + removeNarratorFromFilterData(libraryId, narrator) { + if (!this.libraryFilterData[libraryId]) return + this.libraryFilterData[libraryId].narrators = this.libraryFilterData[libraryId].narrators.filter((n) => n !== narrator) } addNarratorsToFilterData(libraryId, narrators) { diff --git a/server/controllers/LibraryController.js b/server/controllers/LibraryController.js index 71f210106..07c1d276a 100644 --- a/server/controllers/LibraryController.js +++ b/server/controllers/LibraryController.js @@ -1167,11 +1167,11 @@ class LibraryController { } // Update filter data - Database.replaceNarratorInFilterData(narratorName, updatedName) + Database.replaceNarratorInFilterData(req.library.id, narratorName, updatedName) const itemsUpdated = [] - const itemsWithNarrator = await libraryItemFilters.getAllLibraryItemsWithNarrators([narratorName]) + const itemsWithNarrator = await libraryItemFilters.getAllLibraryItemsWithNarrators([narratorName], req.library.id) for (const libraryItem of itemsWithNarrator) { libraryItem.media.narrators = libraryItem.media.narrators.filter((n) => n !== narratorName) @@ -1211,11 +1211,11 @@ class LibraryController { const narratorName = libraryFilters.decode(req.params.narratorId) // Update filter data - Database.removeNarratorFromFilterData(narratorName) + Database.removeNarratorFromFilterData(req.library.id, narratorName) const itemsUpdated = [] - const itemsWithNarrator = await libraryItemFilters.getAllLibraryItemsWithNarrators([narratorName]) + const itemsWithNarrator = await libraryItemFilters.getAllLibraryItemsWithNarrators([narratorName], req.library.id) for (const libraryItem of itemsWithNarrator) { libraryItem.media.narrators = libraryItem.media.narrators.filter((n) => n !== narratorName) diff --git a/server/utils/queries/libraryItemFilters.js b/server/utils/queries/libraryItemFilters.js index 7f95d0ecc..a34aebfd7 100644 --- a/server/utils/queries/libraryItemFilters.js +++ b/server/utils/queries/libraryItemFilters.js @@ -133,9 +133,10 @@ module.exports = { /** * Get all library items that have narrators * @param {string[]} narrators + * @param {string} libraryId * @returns {Promise} */ - async getAllLibraryItemsWithNarrators(narrators) { + async getAllLibraryItemsWithNarrators(narrators, libraryId) { const libraryItems = [] const booksWithGenre = await Database.bookModel.findAll({ where: Sequelize.where(Sequelize.literal(`(SELECT count(*) FROM json_each(narrators) WHERE json_valid(narrators) AND json_each.value IN (:narrators))`), { @@ -146,7 +147,8 @@ module.exports = { }, include: [ { - model: Database.libraryItemModel + model: Database.libraryItemModel, + where: { libraryId } }, { model: Database.authorModel,