From fc6d16bdd929595e0c0f924c1b2485adb36af94e Mon Sep 17 00:00:00 2001 From: advplyr Date: Mon, 6 Jun 2022 18:47:09 -0500 Subject: [PATCH] Update:Make audio probe optional --- .../com/audiobookshelf/app/data/DbManager.kt | 1 + .../app/device/FolderScanner.kt | 24 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/android/app/src/main/java/com/audiobookshelf/app/data/DbManager.kt b/android/app/src/main/java/com/audiobookshelf/app/data/DbManager.kt index b6471220..0a514fae 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/data/DbManager.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/data/DbManager.kt @@ -147,6 +147,7 @@ class DbManager { // Check local files lli.localFiles = lli.localFiles.filter { localFile -> + val file = File(localFile.absolutePath) if (!file.exists()) { Log.d(tag, "cleanLocalLibraryItems: Local file ${localFile.absolutePath} was removed from library item ${lli.media.metadata.title}") diff --git a/android/app/src/main/java/com/audiobookshelf/app/device/FolderScanner.kt b/android/app/src/main/java/com/audiobookshelf/app/device/FolderScanner.kt index 89ac7963..28c9b7cc 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/device/FolderScanner.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/device/FolderScanner.kt @@ -157,11 +157,11 @@ class FolderScanner(var ctx: Context) { audioTrackToAdd = existingAudioTrack } else { // Create new audio track - var track = AudioTrack(index, startOffset, audioProbeResult.duration, filename, localFile.contentUrl, mimeType, null, true, localFileId, audioProbeResult, null) + val track = AudioTrack(index, startOffset, audioProbeResult?.duration ?: 0.0, filename, localFile.contentUrl, mimeType, null, true, localFileId, audioProbeResult, null) audioTrackToAdd = track } - startOffset += audioProbeResult.duration + startOffset += audioProbeResult?.duration ?: 0.0 isNewOrUpdated = true } else { audioTrackToAdd = existingAudioTrack @@ -289,7 +289,7 @@ class FolderScanner(var ctx: Context) { val audioProbeResult = probeAudioFile(localFile.absolutePath) // Create new audio track - val track = AudioTrack(audioTrackFromServer.index, audioTrackFromServer.startOffset, audioProbeResult.duration, localFile.filename ?: "", localFile.contentUrl, localFile.mimeType ?: "", null, true, localFileId, audioProbeResult, audioTrackFromServer?.index ?: -1) + val track = AudioTrack(audioTrackFromServer.index, audioTrackFromServer.startOffset, audioProbeResult?.duration ?: 0.0, localFile.filename ?: "", localFile.contentUrl, localFile.mimeType ?: "", null, true, localFileId, audioProbeResult, audioTrackFromServer.index) audioTracks.add(track) Log.d(tag, "scanDownloadItem: Created Audio Track with index ${track.index} from local file ${localFile.absolutePath}") @@ -431,7 +431,7 @@ class FolderScanner(var ctx: Context) { // Create new audio track val lastTrack = existingAudioTracks.lastOrNull() val startOffset = (lastTrack?.startOffset ?: 0.0) + (lastTrack?.duration ?: 0.0) - val track = AudioTrack(existingAudioTracks.size, startOffset, audioProbeResult.duration, localFile.filename ?: "", localFile.contentUrl, localFile.mimeType ?: "", null, true, localFileId, audioProbeResult, null) + val track = AudioTrack(existingAudioTracks.size, startOffset, audioProbeResult?.duration ?: 0.0, localFile.filename ?: "", localFile.contentUrl, localFile.mimeType ?: "", null, true, localFileId, audioProbeResult, null) localLibraryItem.media.addAudioTrack(track) Log.d(tag, "Added New Audio Track ${track.title}") wasUpdated = true @@ -463,12 +463,18 @@ class FolderScanner(var ctx: Context) { return LocalLibraryItemScanResult(wasUpdated, localLibraryItem) } - fun probeAudioFile(absolutePath:String):AudioProbeResult { - var session = FFprobeKit.execute("-i \"${absolutePath}\" -print_format json -show_format -show_streams -select_streams a -show_chapters -loglevel quiet") + fun probeAudioFile(absolutePath:String):AudioProbeResult? { + val session = FFprobeKit.execute("-i \"${absolutePath}\" -print_format json -show_format -show_streams -select_streams a -show_chapters -loglevel quiet") Log.d(tag, "FFprobe output ${JSObject(session.output)}") - val audioProbeResult = jacksonMapper.readValue(session.output) - Log.d(tag, "Probe Result DATA ${audioProbeResult.duration} | ${audioProbeResult.size} | ${audioProbeResult.title} | ${audioProbeResult.artist}") - return audioProbeResult + val probeObject = JSObject(session.output) + if (!probeObject.has("streams")) { // Check if output is empty + Log.d(tag, "probeAudioFile Probe audio file $absolutePath is empty") + return null + } else { + val audioProbeResult = jacksonMapper.readValue(session.output) + Log.d(tag, "Probe Result DATA ${audioProbeResult.duration} | ${audioProbeResult.size} | ${audioProbeResult.title} | ${audioProbeResult.artist}") + return audioProbeResult + } } }