diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/ItemPlaybackRepository.kt b/app/src/main/java/com/github/damontecres/wholphin/data/ItemPlaybackRepository.kt index 374aa75c..35254c00 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/ItemPlaybackRepository.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/ItemPlaybackRepository.kt @@ -59,6 +59,7 @@ class ItemPlaybackRepository ) val subtitleStream = streamChoiceService.chooseSubtitleStream( + audioStream = audioStream, candidates = source.mediaStreams ?.filter { it.type == MediaStreamType.SUBTITLE } diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/StreamChoiceService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/StreamChoiceService.kt index 7c10c549..1af9d11e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/StreamChoiceService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/StreamChoiceService.kt @@ -91,22 +91,17 @@ class StreamChoiceService result } - suspend fun chooseStream( + suspend fun chooseAudioStream( source: MediaSourceInfo, seriesId: UUID?, itemPlayback: ItemPlayback?, plc: PlaybackLanguageChoice?, - type: MediaStreamType, prefs: UserPreferences, ): MediaStream? { val plc = plc ?: seriesId?.let { playbackLanguageChoiceDao.get(serverRepository.currentUser.value!!.rowId, it) } return source.mediaStreams?.letNotEmpty { streams -> - val candidates = streams.filter { it.type == type } - when (type) { - MediaStreamType.AUDIO -> chooseAudioStream(candidates, itemPlayback, plc, prefs) - MediaStreamType.SUBTITLE -> chooseSubtitleStream(candidates, itemPlayback, plc, prefs) - else -> candidates.firstOrNull() - } + val candidates = streams.filter { it.type == MediaStreamType.AUDIO } + chooseAudioStream(candidates, itemPlayback, plc, prefs) } } @@ -142,7 +137,35 @@ class StreamChoiceService } } + suspend fun chooseSubtitleStream( + source: MediaSourceInfo, + audioStream: MediaStream?, + seriesId: UUID?, + itemPlayback: ItemPlayback?, + plc: PlaybackLanguageChoice?, + prefs: UserPreferences, + ): MediaStream? { + val plc = + plc ?: seriesId?.let { + playbackLanguageChoiceDao.get( + serverRepository.currentUser.value!!.rowId, + it, + ) + } + return source.mediaStreams?.letNotEmpty { streams -> + val candidates = streams.filter { it.type == MediaStreamType.SUBTITLE } + chooseSubtitleStream( + audioStream, + candidates, + itemPlayback, + plc, + prefs, + ) + } + } + fun chooseSubtitleStream( + audioStream: MediaStream?, candidates: List, itemPlayback: ItemPlayback?, playbackLanguageChoice: PlaybackLanguageChoice?, @@ -202,7 +225,8 @@ class StreamChoiceService SubtitlePlaybackMode.SMART -> { val audioLanguage = prefs.userConfig.audioLanguagePreference - if (audioLanguage != null && subtitleLanguage != null && audioLanguage != subtitleLanguage) { + val audioStreamLang = audioStream?.language + if (audioLanguage.isNotNullOrBlank() && audioStreamLang.isNotNullOrBlank() && audioLanguage != audioStreamLang) { candidates.firstOrNull { it.language == subtitleLanguage } } else { null diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt index 38d1679d..5f8b656c 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt @@ -366,26 +366,26 @@ class PlaybackViewModel ?.sortedWith(compareBy { it.language }.thenByDescending { it.channels }) .orEmpty() - val audioIndex = + val audioStream = streamChoiceService - .chooseStream( - mediaSource, - base.seriesId, - playbackConfig, - plc, - MediaStreamType.AUDIO, - preferences, - )?.index + .chooseAudioStream( + source = mediaSource, + seriesId = base.seriesId, + itemPlayback = playbackConfig, + plc = plc, + prefs = preferences, + ) + val audioIndex = audioStream?.index val subtitleIndex = streamChoiceService - .chooseStream( - mediaSource, - base.seriesId, - playbackConfig, - plc, - MediaStreamType.SUBTITLE, - preferences, + .chooseSubtitleStream( + source = mediaSource, + audioStream = audioStream, + seriesId = base.seriesId, + itemPlayback = playbackConfig, + plc = plc, + prefs = preferences, )?.index Timber.d("Selected mediaSource=${mediaSource.id}, audioIndex=$audioIndex, subtitleIndex=$subtitleIndex")