From 4798644bea3238e322e4d04aaf57d3f7d46e10a0 Mon Sep 17 00:00:00 2001 From: Julien Cornebise Date: Tue, 23 Jun 2026 15:58:18 +0100 Subject: [PATCH] Make AudioTrack.mimeType nullable to prevent Android playback stall The POST /api/items//play/ response inlines every episode of a podcast with an audioTrack per episode. Server-side, audioTrack.mimeType is derived from audioFile.mimeType, which is null when the row was created without a successful audio probe (direct DB inserts, import scripts, partial probe failures). The Jackson deserializer hits one null mimeType among the inlined episodes, throws MissingKotlinParameterException, and the entire play-session response fails to deserialize. ExoPlayer is never called, the UI silently stalls. Make mimeType nullable on the data class to tolerate this. ExoPlayer's MediaItem.Builder.setMimeType already accepts nullable. Defensively coerce null to empty string for Cast's MediaInfo.Builder.setContentType, whose Java signature is non-null. Fixes #1905 --- .../app/src/main/java/com/audiobookshelf/app/data/AudioTrack.kt | 2 +- .../main/java/com/audiobookshelf/app/data/PlaybackSession.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/com/audiobookshelf/app/data/AudioTrack.kt b/android/app/src/main/java/com/audiobookshelf/app/data/AudioTrack.kt index 086175d3..a7dd1b86 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/data/AudioTrack.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/data/AudioTrack.kt @@ -10,7 +10,7 @@ data class AudioTrack( var duration: Double, var title: String, var contentUrl: String, - var mimeType: String, + var mimeType: String?, var metadata: FileMetadata?, var isLocal: Boolean, var localFileId: String?, diff --git a/android/app/src/main/java/com/audiobookshelf/app/data/PlaybackSession.kt b/android/app/src/main/java/com/audiobookshelf/app/data/PlaybackSession.kt index 2a4b8b30..7a2ea432 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/data/PlaybackSession.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/data/PlaybackSession.kt @@ -332,7 +332,7 @@ class PlaybackSession( MediaInfo.Builder(mediaUri.toString()) .apply { setContentUrl(mediaUri.toString()) - setContentType(audioTrack.mimeType) + setContentType(audioTrack.mimeType ?: "") setMetadata(castMetadata) setStreamType(MediaInfo.STREAM_TYPE_BUFFERED) }