From 57b464c867da8a8e12ea66cc1a087615f4321464 Mon Sep 17 00:00:00 2001 From: advplyr Date: Mon, 13 Dec 2021 16:53:04 -0600 Subject: [PATCH] Fix:Set full cover path for extracted covers & use temp fix to update books without a full cover path --- server/CacheManager.js | 2 +- server/controllers/BookController.js | 12 +++++++++++- server/objects/Audiobook.js | 20 +++++++++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/server/CacheManager.js b/server/CacheManager.js index cbe59ac9..6fe3d9e2 100644 --- a/server/CacheManager.js +++ b/server/CacheManager.js @@ -36,7 +36,7 @@ class CacheManager { // Write cache await fs.ensureDir(this.CoverCachePath) - let writtenFile = await resizeImage(audiobook.book.coverFullPath || audiobook.book.cover, path, width, height) + let writtenFile = await resizeImage(audiobook.book.coverFullPath, path, width, height) var readStream = fs.createReadStream(writtenFile) readStream.pipe(res) } diff --git a/server/controllers/BookController.js b/server/controllers/BookController.js index b8e8cd31..39ae624c 100644 --- a/server/controllers/BookController.js +++ b/server/controllers/BookController.js @@ -234,13 +234,23 @@ class BookController { async getCover(req, res) { let { query: { width, height, format }, params: { id } } = req var audiobook = this.db.audiobooks.find(a => a.id === id) - if (!audiobook || (!audiobook.book.coverFullPath && !audiobook.book.cover)) return res.sendStatus(404) + if (!audiobook || !audiobook.book.cover) return res.sendStatus(404) // Check user can access this audiobooks library if (!req.user.checkCanAccessLibrary(audiobook.libraryId)) { return res.sendStatus(403) } + // Temp fix for books without a full cover path + if (audiobook.book.cover && !audiobook.book.coverFullPath) { + var isFixed = audiobook.fixFullCoverPath() + if (!isFixed) { + Logger.warn(`[BookController] Failed to fix full cover path "${audiobook.book.cover}" for "${audiobook.book.title}"`) + return res.sendStatus(404) + } + await this.db.updateEntity('audiobook', audiobook) + } + const options = { format: format || (reqSupportsWebp(req) ? 'webp' : 'jpeg'), height: height ? parseInt(height) : null, diff --git a/server/objects/Audiobook.js b/server/objects/Audiobook.js index 419efc79..64a0c5a9 100644 --- a/server/objects/Audiobook.js +++ b/server/objects/Audiobook.js @@ -801,7 +801,7 @@ class Audiobook { var success = await extractCoverArt(audioFileWithCover.fullPath, coverFilePath) if (success) { var coverRelPath = Path.join(coverDirRelPath, coverFilename).replace(/\\/g, '/').replace(/\/\//g, '/') - this.update({ book: { cover: coverRelPath } }) + this.update({ book: { cover: coverRelPath, coverFullPath: audioFileWithCover.fullPath } }) return coverRelPath } return false @@ -1022,5 +1022,23 @@ class Audiobook { existingOtherFileData } } + + // Temp fix for cover is set but coverFullPath is not set + fixFullCoverPath(metadataPath) { + if (!this.book.cover) return + var bookCoverPath = this.book.cover.replace(/\\/g, '/') + var newFullCoverPath = null + if (bookCoverPath.startsWith('/s/book/')) { + newFullCoverPath = Path.join(this.fullPath, bookCoverPath.substr(`/s/book/${this.id}`.length)).replace(/\/\//g, '/') + } else if (bookCoverPath.startsWith('/metadata/')) { + newFullCoverPath = Path.join(metadataPath, bookCoverPath.substr('/metadata/'.length)).replace(/\/\//g, '/') + } + if (newFullCoverPath) { + Logger.debug(`[Audiobook] "${this.title}" fixing full cover path "${this.book.cover}" => "${newFullCoverPath}"`) + this.update({ book: { fullCoverPath: newFullCoverPath } }) + return true + } + return false + } } module.exports = Audiobook \ No newline at end of file