From 0e8148001e0865996b3b8cd7eb56d15dbcd5e14d Mon Sep 17 00:00:00 2001 From: mikiher Date: Sat, 9 Mar 2024 11:59:50 +0200 Subject: [PATCH] Fix direct access to Database.libraryFilterData --- server/Database.js | 16 +++++++++++++++- server/scanner/BookScanner.js | 8 ++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/server/Database.js b/server/Database.js index 3d4219e5..2d38cd35 100644 --- a/server/Database.js +++ b/server/Database.js @@ -430,7 +430,7 @@ class Database { await oldLibraryItem.saveMetadata() const updated = await this.models.libraryItem.fullUpdateFromOld(oldLibraryItem) // Clear library filter data cache - if (updated) { + if (updated) { delete this.libraryFilterData[oldLibraryItem.libraryId] } return updated @@ -689,6 +689,20 @@ class Database { return this.libraryFilterData[libraryId].series.some(se => se.id === seriesId) } + async getAuthorByName(libraryId, authorName) { + if (!this.libraryFilterData[libraryId]) { + return await this.authorModel.getOldByNameAndLibrary(authorName, libraryId) + } + return this.libraryFilterData[libraryId].authors.find(au => au.name === authorName) + } + + async getSeriesByName(libraryId, seriesName) { + if (!this.libraryFilterData[libraryId]) { + return await this.seriesModel.getOldByNameAndLibrary(seriesName, libraryId) + } + return this.libraryFilterData[libraryId].series.find(se => se.name === seriesName) + } + /** * Reset numIssues for library * @param {string} libraryId diff --git a/server/scanner/BookScanner.js b/server/scanner/BookScanner.js index 85bf8146..fbe3ccfb 100644 --- a/server/scanner/BookScanner.js +++ b/server/scanner/BookScanner.js @@ -186,7 +186,7 @@ class BookScanner { // Check for authors added for (const authorName of bookMetadata.authors) { if (!media.authors.some(au => au.name === authorName)) { - const existingAuthor = Database.libraryFilterData[libraryItemData.libraryId].authors.find(au => au.name === authorName) + const existingAuthor = await Database.getAuthorByName(libraryItemData.libraryId, authorName) if (existingAuthor) { await Database.bookAuthorModel.create({ bookId: media.id, @@ -221,7 +221,7 @@ class BookScanner { for (const seriesObj of bookMetadata.series) { const existingBookSeries = media.series.find(se => se.name === seriesObj.name) if (!existingBookSeries) { - const existingSeries = Database.libraryFilterData[libraryItemData.libraryId].series.find(se => se.name === seriesObj.name) + const existingSeries = await Database.getSeriesByName(libraryItemData.libraryId, seriesObj.name) if (existingSeries) { await Database.bookSeriesModel.create({ bookId: media.id, @@ -443,7 +443,7 @@ class BookScanner { } if (bookMetadata.authors.length) { for (const authorName of bookMetadata.authors) { - const matchingAuthor = Database.libraryFilterData[libraryItemData.libraryId].authors.find(au => au.name === authorName) + const matchingAuthor = await Database.getAuthorByName(libraryItemData.libraryId, authorName) if (matchingAuthor) { bookObject.bookAuthors.push({ authorId: matchingAuthor.id @@ -463,7 +463,7 @@ class BookScanner { if (bookMetadata.series.length) { for (const seriesObj of bookMetadata.series) { if (!seriesObj.name) continue - const matchingSeries = Database.libraryFilterData[libraryItemData.libraryId].series.find(se => se.name === seriesObj.name) + const matchingSeries = await Database.getSeriesByName(libraryItemData.libraryId, seriesObj.name) if (matchingSeries) { bookObject.bookSeries.push({ seriesId: matchingSeries.id,