From 1aea0a18a99c304a93641238ec9a20dc48876f3e Mon Sep 17 00:00:00 2001 From: advplyr Date: Wed, 10 Aug 2022 18:02:16 -0500 Subject: [PATCH] Fix:Android catch json parse exception from ffprobe caused by XMP id3 tag --- .../audiobookshelf/app/device/FolderScanner.kt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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 28c9b7cc..02e8850b 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 @@ -14,6 +14,7 @@ import com.fasterxml.jackson.core.json.JsonReadFeature import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import com.getcapacitor.JSObject +import org.json.JSONException class FolderScanner(var ctx: Context) { private val tag = "FolderScanner" @@ -465,11 +466,17 @@ class FolderScanner(var ctx: Context) { 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 probeObject = JSObject(session.output) - if (!probeObject.has("streams")) { // Check if output is empty - Log.d(tag, "probeAudioFile Probe audio file $absolutePath is empty") + var probeObject:JSObject? = null + try { + probeObject = JSObject(session.output) + } catch(error:JSONException) { + Log.e(tag, "Failed to parse probe result $error") + } + + Log.d(tag, "FFprobe output $probeObject") + if (probeObject == null || !probeObject.has("streams")) { // Check if output is empty + Log.d(tag, "probeAudioFile Probe audio file $absolutePath failed or invalid") return null } else { val audioProbeResult = jacksonMapper.readValue(session.output)