mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-07-08 15:50:16 +02:00
Always save series audio & subtitle preferences regardless of preferred languages (#473)
## Description This PR adjust the logic for audio & subtitle track selection for TV series. Instead of only saving for future episodes if the newly selected track is a different language than the user's preferred, always save it. Basically this means if you change the audio or subtitle language for an episode, the same audio or subtitle language will be used for future episodes (if available). Also, fixes the "default" subtitle mode to take the user's preferred language into consideration. ## Issues Follow up to https://github.com/damontecres/Wholphin/issues/378 & https://github.com/damontecres/Wholphin/issues/427 Fixes #469
This commit is contained in:
parent
ab8bbf2bd7
commit
ebfc00c016
2 changed files with 29 additions and 35 deletions
|
|
@ -134,9 +134,8 @@ class ItemPlaybackRepository
|
||||||
val seriesId = item.data.seriesId
|
val seriesId = item.data.seriesId
|
||||||
if (seriesId != null && trackIndex != TrackIndex.UNSPECIFIED) {
|
if (seriesId != null && trackIndex != TrackIndex.UNSPECIFIED) {
|
||||||
if (type == MediaStreamType.AUDIO) {
|
if (type == MediaStreamType.AUDIO) {
|
||||||
val audioLang = current.userDto.configuration?.audioLanguagePreference
|
|
||||||
val stream = source.mediaStreams?.first { it.index == trackIndex }
|
val stream = source.mediaStreams?.first { it.index == trackIndex }
|
||||||
if (stream?.language != null && stream.language != audioLang) {
|
if (stream?.language != null) {
|
||||||
streamChoiceService.updateAudio(item.data, stream.language!!)
|
streamChoiceService.updateAudio(item.data, stream.language!!)
|
||||||
}
|
}
|
||||||
} else if (type == MediaStreamType.SUBTITLE) {
|
} else if (type == MediaStreamType.SUBTITLE) {
|
||||||
|
|
@ -147,10 +146,8 @@ class ItemPlaybackRepository
|
||||||
subtitlesDisabled = true,
|
subtitlesDisabled = true,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
val subtitleLang =
|
|
||||||
current.userDto.configuration?.subtitleLanguagePreference
|
|
||||||
val stream = source.mediaStreams?.first { it.index == trackIndex }
|
val stream = source.mediaStreams?.first { it.index == trackIndex }
|
||||||
if (stream?.language != null && stream.language != subtitleLang) {
|
if (stream?.language != null) {
|
||||||
streamChoiceService.updateSubtitles(
|
streamChoiceService.updateSubtitles(
|
||||||
item.data,
|
item.data,
|
||||||
stream.language!!,
|
stream.language!!,
|
||||||
|
|
|
||||||
|
|
@ -114,16 +114,11 @@ class StreamChoiceService
|
||||||
if (itemPlayback?.audioIndexEnabled == true) {
|
if (itemPlayback?.audioIndexEnabled == true) {
|
||||||
candidates.firstOrNull { it.index == itemPlayback.audioIndex }
|
candidates.firstOrNull { it.index == itemPlayback.audioIndex }
|
||||||
} else {
|
} else {
|
||||||
// TODO audio selection based on channel layout or preferences or default
|
val seriesLang =
|
||||||
val audioLanguage =
|
playbackLanguageChoice?.audioLanguage?.takeIf { it.isNotNullOrBlank() }
|
||||||
if (prefs.userConfig.audioLanguagePreference.isNotNullOrBlank()) {
|
// If the user has chosen a different language for the series, prefer that
|
||||||
// If the user has chosen a preferred language, but changed tracks on the series, use that
|
val audioLanguage = seriesLang ?: prefs.userConfig.audioLanguagePreference
|
||||||
// Otherwise, use their preferred language
|
|
||||||
playbackLanguageChoice?.audioLanguage
|
|
||||||
?: prefs.userConfig.audioLanguagePreference
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
if (audioLanguage.isNotNullOrBlank()) {
|
if (audioLanguage.isNotNullOrBlank()) {
|
||||||
val sorted =
|
val sorted =
|
||||||
candidates.sortedWith(compareBy<MediaStream> { it.language }.thenByDescending { it.channels })
|
candidates.sortedWith(compareBy<MediaStream> { it.language }.thenByDescending { it.channels })
|
||||||
|
|
@ -176,27 +171,21 @@ class StreamChoiceService
|
||||||
} else if (itemPlayback?.subtitleIndexEnabled == true) {
|
} else if (itemPlayback?.subtitleIndexEnabled == true) {
|
||||||
return candidates.firstOrNull { it.index == itemPlayback.subtitleIndex }
|
return candidates.firstOrNull { it.index == itemPlayback.subtitleIndex }
|
||||||
} else {
|
} else {
|
||||||
|
val seriesLang =
|
||||||
|
playbackLanguageChoice?.subtitleLanguage?.takeIf { it.isNotNullOrBlank() }
|
||||||
val subtitleLanguage =
|
val subtitleLanguage =
|
||||||
if (prefs.userConfig.subtitleLanguagePreference.isNotNullOrBlank()) {
|
(seriesLang ?: prefs.userConfig.subtitleLanguagePreference)
|
||||||
// If the user has chosen a preferred language, but changed tracks on the series, use that
|
?.takeIf { it.isNotNullOrBlank() }
|
||||||
// Otherwise, use their preferred language
|
|
||||||
playbackLanguageChoice?.subtitleLanguage
|
|
||||||
?: prefs.userConfig.subtitleLanguagePreference
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
|
|
||||||
val subtitleMode =
|
val subtitleMode =
|
||||||
when {
|
when {
|
||||||
playbackLanguageChoice?.subtitlesDisabled == false &&
|
playbackLanguageChoice?.subtitlesDisabled == false && seriesLang != null -> {
|
||||||
playbackLanguageChoice.subtitleLanguage != null &&
|
// User has chosen a series level subtitle language, so override their normal
|
||||||
subtitleLanguage.isNotNullOrBlank() -> {
|
// subtitle mode to display that language
|
||||||
// User has a subtitle language preference, but has chosen a different language for the series
|
|
||||||
// So override their normal playback mode to always display subtitles
|
|
||||||
SubtitlePlaybackMode.ALWAYS
|
SubtitlePlaybackMode.ALWAYS
|
||||||
}
|
}
|
||||||
|
|
||||||
playbackLanguageChoice?.subtitlesDisabled == true -> {
|
playbackLanguageChoice?.subtitlesDisabled == true && seriesLang == null -> {
|
||||||
// Series level settings disables subtitles
|
// Series level settings disables subtitles
|
||||||
SubtitlePlaybackMode.NONE
|
SubtitlePlaybackMode.NONE
|
||||||
}
|
}
|
||||||
|
|
@ -234,8 +223,16 @@ class StreamChoiceService
|
||||||
}
|
}
|
||||||
|
|
||||||
SubtitlePlaybackMode.DEFAULT -> {
|
SubtitlePlaybackMode.DEFAULT -> {
|
||||||
// TODO check for language?
|
subtitleLanguage?.let { lang ->
|
||||||
|
// Find best track that is in the preferred language
|
||||||
(
|
(
|
||||||
|
candidates.firstOrNull { it.isDefault && it.isForced && it.language == lang }
|
||||||
|
?: candidates.firstOrNull { it.isDefault && it.language == lang }
|
||||||
|
?: candidates.firstOrNull { it.isForced && it.language == lang }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
?: (
|
||||||
|
// If none in preferred language, just find the best track
|
||||||
candidates.firstOrNull { it.isDefault && it.isForced }
|
candidates.firstOrNull { it.isDefault && it.isForced }
|
||||||
?: candidates.firstOrNull { it.isDefault }
|
?: candidates.firstOrNull { it.isDefault }
|
||||||
?: candidates.firstOrNull { it.isForced }
|
?: candidates.firstOrNull { it.isForced }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue