From e10b1785651b672b9fcd50dcc7e9018e614fbd36 Mon Sep 17 00:00:00 2001 From: advplyr Date: Sun, 1 Oct 2023 09:03:01 -0500 Subject: [PATCH 1/6] Fix:Crash on failed scanner find covers #2164 --- server/scanner/BookScanner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/scanner/BookScanner.js b/server/scanner/BookScanner.js index f8e959bde..187ecac1d 100644 --- a/server/scanner/BookScanner.js +++ b/server/scanner/BookScanner.js @@ -1111,7 +1111,7 @@ class BookScanner { const result = await CoverManager.downloadCoverFromUrlNew(results[i], libraryItemId, libraryItemPath) if (result.error) { - Logger.error(`[Scanner] Failed to download cover from url "${results[i]}" | Attempt ${i + 1}`, result.error) + libraryScan.addLog(LogLevel.ERROR, `Failed to download cover from url "${results[i]}" | Attempt ${i + 1}`, result.error) } else if (result.cover) { return result.cover } From 20a1d40d990b1d14750ba061a0dd808a016cb0ec Mon Sep 17 00:00:00 2001 From: advplyr Date: Sun, 1 Oct 2023 12:44:52 -0500 Subject: [PATCH 2/6] Fix:Set date properly on local playback sessions #2168 --- server/controllers/LibraryItemController.js | 6 ------ server/objects/PlaybackSession.js | 8 +++++++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/server/controllers/LibraryItemController.js b/server/controllers/LibraryItemController.js index 498398f72..4aff7a139 100644 --- a/server/controllers/LibraryItemController.js +++ b/server/controllers/LibraryItemController.js @@ -280,12 +280,6 @@ class LibraryItemController { return CacheManager.handleCoverCache(res, libraryItem.id, libraryItem.media.coverPath, options) } - // GET: api/items/:id/stream - openStream(req, res) { - // this.streamManager.openStreamApiRequest(res, req.user, req.libraryItem) - res.sendStatus(500) - } - // POST: api/items/:id/play startPlaybackSession(req, res) { if (!req.libraryItem.media.numTracks && req.libraryItem.mediaType !== 'video') { diff --git a/server/objects/PlaybackSession.js b/server/objects/PlaybackSession.js index 4fe3d8fd5..20b50009c 100644 --- a/server/objects/PlaybackSession.js +++ b/server/objects/PlaybackSession.js @@ -168,7 +168,13 @@ class PlaybackSession { this.currentTime = session.currentTime || 0 this.startedAt = session.startedAt - this.updatedAt = session.updatedAt || null + this.updatedAt = session.updatedAt || session.startedAt + + // Local playback sessions dont set this date field so set using updatedAt + if (!this.date && session.updatedAt) { + this.date = date.format(new Date(session.updatedAt), 'YYYY-MM-DD') + this.dayOfWeek = date.format(new Date(session.updatedAt), 'dddd') + } } get mediaItemId() { From 73bb73a04aa04fb123a9ff1ef8e96e3ce5c2201e Mon Sep 17 00:00:00 2001 From: Alistair Bahr Date: Mon, 2 Oct 2023 09:25:34 +0200 Subject: [PATCH 3/6] make force transcode apply to all "ffmpeg error 1" --- server/objects/Stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/objects/Stream.js b/server/objects/Stream.js index c8452ac39..1860c47f2 100644 --- a/server/objects/Stream.js +++ b/server/objects/Stream.js @@ -340,7 +340,7 @@ class Stream extends EventEmitter { Logger.error('Ffmpeg Err', '"' + err.message + '"') // Temporary workaround for https://github.com/advplyr/audiobookshelf/issues/172 - const aacErrorMsg = 'ffmpeg exited with code 1: Could not write header for output file #0 (incorrect codec parameters ?)' + const aacErrorMsg = 'ffmpeg exited with code 1:' if (audioCodec === 'copy' && this.isAACEncodable && err.message && err.message.startsWith(aacErrorMsg)) { Logger.info(`[Stream] Re-attempting stream with AAC encode`) this.transcodeOptions.forceAAC = true From 4352989242bf9a25b092deafb7c50b5e17a0eadc Mon Sep 17 00:00:00 2001 From: Alistair1231 Date: Mon, 2 Oct 2023 09:30:57 +0200 Subject: [PATCH 4/6] update comment to include second issue that is adressed by change --- server/objects/Stream.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/objects/Stream.js b/server/objects/Stream.js index 1860c47f2..9f5ff59b2 100644 --- a/server/objects/Stream.js +++ b/server/objects/Stream.js @@ -339,7 +339,7 @@ class Stream extends EventEmitter { } else { Logger.error('Ffmpeg Err', '"' + err.message + '"') - // Temporary workaround for https://github.com/advplyr/audiobookshelf/issues/172 + // Temporary workaround for https://github.com/advplyr/audiobookshelf/issues/172 and https://github.com/advplyr/audiobookshelf/issues/2157 const aacErrorMsg = 'ffmpeg exited with code 1:' if (audioCodec === 'copy' && this.isAACEncodable && err.message && err.message.startsWith(aacErrorMsg)) { Logger.info(`[Stream] Re-attempting stream with AAC encode`) @@ -435,4 +435,4 @@ class Stream extends EventEmitter { return newAudioTrack } } -module.exports = Stream \ No newline at end of file +module.exports = Stream From 7c9631c1b0dbff6e15a33c72945ef69449225e0d Mon Sep 17 00:00:00 2001 From: advplyr Date: Mon, 2 Oct 2023 08:34:56 -0500 Subject: [PATCH 5/6] Update server/objects/Stream.js --- server/objects/Stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/objects/Stream.js b/server/objects/Stream.js index 9f5ff59b2..115bb96e6 100644 --- a/server/objects/Stream.js +++ b/server/objects/Stream.js @@ -341,7 +341,7 @@ class Stream extends EventEmitter { // Temporary workaround for https://github.com/advplyr/audiobookshelf/issues/172 and https://github.com/advplyr/audiobookshelf/issues/2157 const aacErrorMsg = 'ffmpeg exited with code 1:' - if (audioCodec === 'copy' && this.isAACEncodable && err.message && err.message.startsWith(aacErrorMsg)) { + if (audioCodec === 'copy' && this.isAACEncodable && err.message?.startsWith(aacErrorMsg)) { Logger.info(`[Stream] Re-attempting stream with AAC encode`) this.transcodeOptions.forceAAC = true this.reset(this.startTime) From a3a8937ba37b439dd40c406005c4bb280af0b12c Mon Sep 17 00:00:00 2001 From: advplyr Date: Mon, 2 Oct 2023 17:09:12 -0500 Subject: [PATCH 6/6] Fix:Crash when searching for cover without an author #2174 --- server/controllers/LibraryItemController.js | 1 - server/controllers/SearchController.js | 2 +- server/finders/BookFinder.js | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/server/controllers/LibraryItemController.js b/server/controllers/LibraryItemController.js index 4aff7a139..2b25474e5 100644 --- a/server/controllers/LibraryItemController.js +++ b/server/controllers/LibraryItemController.js @@ -259,7 +259,6 @@ class LibraryItemController { // Check if library item media has a cover path if (!libraryItem.media.coverPath || !await fs.pathExists(libraryItem.media.coverPath)) { - Logger.debug(`[LibraryItemController] getCover: Library item "${req.params.id}" has no cover path`) return res.sendStatus(404) } diff --git a/server/controllers/SearchController.js b/server/controllers/SearchController.js index 2749016c3..93587bc4f 100644 --- a/server/controllers/SearchController.js +++ b/server/controllers/SearchController.js @@ -26,7 +26,7 @@ class SearchController { let results = null if (podcast) results = await PodcastFinder.findCovers(query.title) - else results = await BookFinder.findCovers(query.provider || 'google', query.title, query.author || null) + else results = await BookFinder.findCovers(query.provider || 'google', query.title, query.author || '') res.json({ results }) diff --git a/server/finders/BookFinder.js b/server/finders/BookFinder.js index 96735cc95..bcf8ea068 100644 --- a/server/finders/BookFinder.js +++ b/server/finders/BookFinder.js @@ -234,7 +234,7 @@ class BookFinder { if (!books.length && maxFuzzySearches > 0) { // normalize title and author title = title.trim().toLowerCase() - author = author.trim().toLowerCase() + author = author?.trim().toLowerCase() || '' // Now run up to maxFuzzySearches fuzzy searches let candidates = new Set()