From 0e8148001e0865996b3b8cd7eb56d15dbcd5e14d Mon Sep 17 00:00:00 2001 From: mikiher Date: Sat, 9 Mar 2024 11:59:50 +0200 Subject: [PATCH 1/3] 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 3d4219e5af..2d38cd35a0 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 85bf8146f8..fbe3ccfb8f 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, From ad45dadc15ebd881a2e75c127ea9650fe8f30cc2 Mon Sep 17 00:00:00 2001 From: mikiher Date: Sat, 9 Mar 2024 12:07:08 +0200 Subject: [PATCH 2/3] Remove redundant space --- server/Database.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/Database.js b/server/Database.js index 2d38cd35a0..78d6bc7d90 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 From c14f9accafcc688d178f66c795826d6b8ea3b159 Mon Sep 17 00:00:00 2001 From: advplyr Date: Mon, 11 Mar 2024 17:07:03 -0500 Subject: [PATCH 3/3] Update functions for #2724 and add jsdocs --- server/Database.js | 28 +++++++++++++++++++++------- server/scanner/BookScanner.js | 24 ++++++++++++------------ 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/server/Database.js b/server/Database.js index 78d6bc7d90..e3fabe1f56 100644 --- a/server/Database.js +++ b/server/Database.js @@ -689,19 +689,33 @@ class Database { return this.libraryFilterData[libraryId].series.some(se => se.id === seriesId) } - async getAuthorByName(libraryId, authorName) { + /** + * Get author id for library by name. Uses library filter data if available + * + * @param {string} libraryId + * @param {string} authorName + * @returns {Promise} author id or null if not found + */ + async getAuthorIdByName(libraryId, authorName) { if (!this.libraryFilterData[libraryId]) { - return await this.authorModel.getOldByNameAndLibrary(authorName, libraryId) + return (await this.authorModel.getOldByNameAndLibrary(authorName, libraryId))?.id || null } - return this.libraryFilterData[libraryId].authors.find(au => au.name === authorName) + return this.libraryFilterData[libraryId].authors.find(au => au.name === authorName)?.id || null } - async getSeriesByName(libraryId, seriesName) { + /** + * Get series id for library by name. Uses library filter data if available + * + * @param {string} libraryId + * @param {string} seriesName + * @returns {Promise} series id or null if not found + */ + async getSeriesIdByName(libraryId, seriesName) { if (!this.libraryFilterData[libraryId]) { - return await this.seriesModel.getOldByNameAndLibrary(seriesName, libraryId) + return (await this.seriesModel.getOldByNameAndLibrary(seriesName, libraryId))?.id || null } - return this.libraryFilterData[libraryId].series.find(se => se.name === seriesName) - } + return this.libraryFilterData[libraryId].series.find(se => se.name === seriesName)?.id || null + } /** * Reset numIssues for library diff --git a/server/scanner/BookScanner.js b/server/scanner/BookScanner.js index fbe3ccfb8f..c738c52e33 100644 --- a/server/scanner/BookScanner.js +++ b/server/scanner/BookScanner.js @@ -186,11 +186,11 @@ class BookScanner { // Check for authors added for (const authorName of bookMetadata.authors) { if (!media.authors.some(au => au.name === authorName)) { - const existingAuthor = await Database.getAuthorByName(libraryItemData.libraryId, authorName) - if (existingAuthor) { + const existingAuthorId = await Database.getAuthorIdByName(libraryItemData.libraryId, authorName) + if (existingAuthorId) { await Database.bookAuthorModel.create({ bookId: media.id, - authorId: existingAuthor.id + authorId: existingAuthorId }) libraryScan.addLog(LogLevel.DEBUG, `Updating book "${bookMetadata.title}" added author "${authorName}"`) authorsUpdated = true @@ -221,11 +221,11 @@ class BookScanner { for (const seriesObj of bookMetadata.series) { const existingBookSeries = media.series.find(se => se.name === seriesObj.name) if (!existingBookSeries) { - const existingSeries = await Database.getSeriesByName(libraryItemData.libraryId, seriesObj.name) - if (existingSeries) { + const existingSeriesId = await Database.getSeriesIdByName(libraryItemData.libraryId, seriesObj.name) + if (existingSeriesId) { await Database.bookSeriesModel.create({ bookId: media.id, - seriesId: existingSeries.id, + seriesId: existingSeriesId, sequence: seriesObj.sequence }) libraryScan.addLog(LogLevel.DEBUG, `Updating book "${bookMetadata.title}" added series "${seriesObj.name}"${seriesObj.sequence ? ` with sequence "${seriesObj.sequence}"` : ''}`) @@ -443,10 +443,10 @@ class BookScanner { } if (bookMetadata.authors.length) { for (const authorName of bookMetadata.authors) { - const matchingAuthor = await Database.getAuthorByName(libraryItemData.libraryId, authorName) - if (matchingAuthor) { + const matchingAuthorId = await Database.getAuthorIdByName(libraryItemData.libraryId, authorName) + if (matchingAuthorId) { bookObject.bookAuthors.push({ - authorId: matchingAuthor.id + authorId: matchingAuthorId }) } else { // New author @@ -463,10 +463,10 @@ class BookScanner { if (bookMetadata.series.length) { for (const seriesObj of bookMetadata.series) { if (!seriesObj.name) continue - const matchingSeries = await Database.getSeriesByName(libraryItemData.libraryId, seriesObj.name) - if (matchingSeries) { + const matchingSeriesId = await Database.getSeriesIdByName(libraryItemData.libraryId, seriesObj.name) + if (matchingSeriesId) { bookObject.bookSeries.push({ - seriesId: matchingSeries.id, + seriesId: matchingSeriesId, sequence: seriesObj.sequence }) } else {