From 80f90907d4bdff1d8498aa58d2886903f7436750 Mon Sep 17 00:00:00 2001 From: Mark Cooper Date: Sat, 11 Sep 2021 19:59:48 -0500 Subject: [PATCH] Update merge for m4b files, add progress event for local audiobooks --- client/package.json | 2 +- package.json | 2 +- server/DownloadManager.js | 6 ++++++ server/Server.js | 9 +++++++++ server/utils/downloadWorker.js | 1 + 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/client/package.json b/client/package.json index 7bec6973..0f3118d5 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "audiobookshelf-client", - "version": "1.1.3", + "version": "1.1.4", "description": "Audiobook manager and player", "main": "index.js", "scripts": { diff --git a/package.json b/package.json index 6457d602..58898552 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "audiobookshelf", - "version": "1.1.3", + "version": "1.1.4", "description": "Self-hosted audiobook server for managing and playing audiobooks.", "main": "index.js", "scripts": { diff --git a/server/DownloadManager.js b/server/DownloadManager.js index 93ad705b..b6abd4ee 100644 --- a/server/DownloadManager.js +++ b/server/DownloadManager.js @@ -117,6 +117,7 @@ class DownloadManager { const logLevel = process.env.NODE_ENV === 'production' ? 'error' : 'warning' var ffmpegOptions = [`-loglevel ${logLevel}`] + var ffmpegOutputOptions = [] if (requiresEncode) { ffmpegOptions = ffmpegOptions.concat([ @@ -128,6 +129,10 @@ class DownloadManager { ]) } else { ffmpegOptions.push('-c copy') + if (download.ext === '.m4b') { + Logger.info('Concat m4b\'s use -f mp4') + ffmpegOutputOptions.push('-f mp4') + } } if (download.includeMetadata) { @@ -153,6 +158,7 @@ class DownloadManager { var workerData = { inputs: ffmpegInputs, options: ffmpegOptions, + outputOptions: ffmpegOutputOptions, output: download.fullPath, } diff --git a/server/Server.js b/server/Server.js index 353f2a32..8a948dc4 100644 --- a/server/Server.js +++ b/server/Server.js @@ -205,6 +205,7 @@ class Server { socket.on('open_stream', (audiobookId) => this.streamManager.openStreamSocketRequest(socket, audiobookId)) socket.on('close_stream', () => this.streamManager.closeStreamRequest(socket)) socket.on('stream_update', (payload) => this.streamManager.streamUpdate(socket, payload)) + socket.on('progress_update', (payload) => this.audiobookProgressUpdate(socket.sheepClient, payload)) socket.on('download', (payload) => this.downloadManager.downloadSocketRequest(socket, payload)) socket.on('test', () => { socket.emit('test_received', socket.id) @@ -230,6 +231,14 @@ class Server { res.sendStatus(200) } + audiobookProgressUpdate(client, progressPayload) { + if (!client || !client.user) { + Logger.error('[Server] audiobookProgressUpdate invalid socket client') + return + } + client.user.updateAudiobookProgressFromStream(progressPayload) + } + async authenticateSocket(socket, token) { var user = await this.auth.verifyToken(token) if (!user) { diff --git a/server/utils/downloadWorker.js b/server/utils/downloadWorker.js index 273e3745..582da708 100644 --- a/server/utils/downloadWorker.js +++ b/server/utils/downloadWorker.js @@ -19,6 +19,7 @@ workerData.inputs.forEach((inputData) => { }) if (workerData.options) ffmpegCommand.addOption(workerData.options) +if (workerData.outputOptions && workerData.outputOptions.length) ffmpegCommand.addOutputOption(workerData.outputOptions) ffmpegCommand.output(workerData.output) var isKilled = false