mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-11-06 18:54:49 +01:00
Prefer non-forced when subtitle preference is always on (#1618)
## Description If subtitles preferences are "Always", this PR will prefer non-forced tracks even if any forced ones are default tracks. This is in-line with the web UI from my testing and another review of the code. ### Related issues Fixes https://github.com/damontecres/Wholphin/issues/790#issuecomment-4708705576 ### Testing Unit tests ## Screenshots N/A ## AI or LLM usage None
This commit is contained in:
parent
7422f15bff
commit
899e3decc2
2 changed files with 59 additions and 4 deletions
|
|
@ -277,11 +277,13 @@ class StreamChoiceService
|
||||||
SubtitlePlaybackMode.ALWAYS -> {
|
SubtitlePlaybackMode.ALWAYS -> {
|
||||||
if (subtitleLanguage.isNotNullOrBlank()) {
|
if (subtitleLanguage.isNotNullOrBlank()) {
|
||||||
candidates.firstOrNull {
|
candidates.firstOrNull {
|
||||||
it.language.equals(subtitleLanguage, true) ||
|
// Prefer non-forced first
|
||||||
it.language.isUnknown
|
!it.isForced && it.language.equalsLangOrUnknown(subtitleLanguage)
|
||||||
|
} ?: candidates.firstOrNull {
|
||||||
|
it.language.equalsLangOrUnknown(subtitleLanguage)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
candidates.firstOrNull()
|
candidates.firstOrNull { !it.isForced } ?: candidates.firstOrNull()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -371,3 +373,5 @@ private val String?.isUnknown: Boolean
|
||||||
this.equals("undetermined", true) ||
|
this.equals("undetermined", true) ||
|
||||||
this.equals("mul", true) ||
|
this.equals("mul", true) ||
|
||||||
this.equals("zxx", true)
|
this.equals("zxx", true)
|
||||||
|
|
||||||
|
private fun String?.equalsLangOrUnknown(lang: String): Boolean = equals(lang, ignoreCase = true) || this.isUnknown
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,56 @@ class StreamChoiceServiceTest(
|
||||||
),
|
),
|
||||||
itemPlayback = itemPlayback(subtitleIndex = TrackIndex.UNSPECIFIED),
|
itemPlayback = itemPlayback(subtitleIndex = TrackIndex.UNSPECIFIED),
|
||||||
),
|
),
|
||||||
|
TestInput(
|
||||||
|
1,
|
||||||
|
SubtitlePlaybackMode.ALWAYS,
|
||||||
|
userSubtitleLang = "eng",
|
||||||
|
subtitles =
|
||||||
|
listOf(
|
||||||
|
subtitle(0, "eng", default = true, forced = true),
|
||||||
|
subtitle(1, "eng", default = false, forced = false),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TestInput(
|
||||||
|
1,
|
||||||
|
SubtitlePlaybackMode.ALWAYS,
|
||||||
|
userSubtitleLang = null,
|
||||||
|
subtitles =
|
||||||
|
listOf(
|
||||||
|
subtitle(0, "eng", default = true, forced = true),
|
||||||
|
subtitle(1, "eng", default = false, forced = false),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TestInput(
|
||||||
|
0,
|
||||||
|
SubtitlePlaybackMode.SMART,
|
||||||
|
userSubtitleLang = "eng",
|
||||||
|
subtitles =
|
||||||
|
listOf(
|
||||||
|
subtitle(0, "eng", default = true, forced = true),
|
||||||
|
subtitle(1, "eng", default = false, forced = false),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TestInput(
|
||||||
|
0,
|
||||||
|
SubtitlePlaybackMode.ONLY_FORCED,
|
||||||
|
userSubtitleLang = "eng",
|
||||||
|
subtitles =
|
||||||
|
listOf(
|
||||||
|
subtitle(0, "eng", default = true, forced = true),
|
||||||
|
subtitle(1, "eng", default = false, forced = false),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TestInput(
|
||||||
|
null,
|
||||||
|
SubtitlePlaybackMode.NONE,
|
||||||
|
userSubtitleLang = "eng",
|
||||||
|
subtitles =
|
||||||
|
listOf(
|
||||||
|
subtitle(0, "eng", default = true, forced = true),
|
||||||
|
subtitle(1, "eng", default = false, forced = false),
|
||||||
|
),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -277,6 +327,7 @@ class TestStreamChoiceServiceSmart(
|
||||||
TestInput(
|
TestInput(
|
||||||
0,
|
0,
|
||||||
SubtitlePlaybackMode.SMART,
|
SubtitlePlaybackMode.SMART,
|
||||||
|
userSubtitleLang = "eng",
|
||||||
subtitles =
|
subtitles =
|
||||||
listOf(
|
listOf(
|
||||||
subtitle(0, "eng", false),
|
subtitle(0, "eng", false),
|
||||||
|
|
@ -488,7 +539,7 @@ class TestStreamChoiceServiceMultipleChoices(
|
||||||
fun data(): Collection<TestInput> =
|
fun data(): Collection<TestInput> =
|
||||||
listOf(
|
listOf(
|
||||||
TestInput(
|
TestInput(
|
||||||
0,
|
1,
|
||||||
SubtitlePlaybackMode.ALWAYS,
|
SubtitlePlaybackMode.ALWAYS,
|
||||||
subtitles =
|
subtitles =
|
||||||
listOf(
|
listOf(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue