diff --git a/server/Database.js b/server/Database.js index 3d4219e5af..e3fabe1f56 100644 --- a/server/Database.js +++ b/server/Database.js @@ -689,6 +689,34 @@ class Database { return this.libraryFilterData[libraryId].series.some(se => se.id === seriesId) } + /** + * 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))?.id || null + } + return this.libraryFilterData[libraryId].authors.find(au => au.name === authorName)?.id || null + } + + /** + * 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))?.id || null + } + return this.libraryFilterData[libraryId].series.find(se => se.name === seriesName)?.id || null + } + /** * Reset numIssues for library * @param {string} libraryId diff --git a/server/scanner/BookScanner.js b/server/scanner/BookScanner.js index 85bf8146f8..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 = Database.libraryFilterData[libraryItemData.libraryId].authors.find(au => au.name === 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 = Database.libraryFilterData[libraryItemData.libraryId].series.find(se => se.name === 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 = Database.libraryFilterData[libraryItemData.libraryId].authors.find(au => au.name === 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 = Database.libraryFilterData[libraryItemData.libraryId].series.find(se => se.name === 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 {