Replace subtitle codec boolean with dropdown preference
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled

- Replace prefer_srt_over_pgs boolean with subtitle_codec_preference dropdown
  Options: 0=Prefer PGS (default), 1=Prefer SRT, 2=No preference

- More intuitive UI with descriptive labels:
  - PGS bevorzugt (bessere Qualität beim Brennen)
  - SRT bevorzugt (flexibel, kann gestreamt werden)
  - Keine Präferenz

- Update scoring logic to handle three states instead of two
- Clarify that only_forced filter applies only during auto-selection
  Manual selection via dialog still shows all subtitles
This commit is contained in:
mani
2026-01-06 00:36:25 +01:00
parent 32f2b12708
commit 3184fa6f89
4 changed files with 45 additions and 7 deletions

View File

@@ -1329,3 +1329,19 @@ msgstr "Abspielen mit Track-Auswahl"
msgctxt "#30702" msgctxt "#30702"
msgid "Nur Forced-Untertitel auswählen (keine normalen)" msgid "Nur Forced-Untertitel auswählen (keine normalen)"
msgstr "Nur Forced-Untertitel auswählen (keine normalen)" msgstr "Nur Forced-Untertitel auswählen (keine normalen)"
msgctxt "#30703"
msgid "Untertitel-Codec-Präferenz"
msgstr "Untertitel-Codec-Präferenz"
msgctxt "#30704"
msgid "PGS bevorzugt (bessere Qualität beim Brennen)"
msgstr "PGS bevorzugt (bessere Qualität beim Brennen)"
msgctxt "#30705"
msgid "SRT bevorzugt (flexibel, kann gestreamt werden)"
msgstr "SRT bevorzugt (flexibel, kann gestreamt werden)"
msgctxt "#30706"
msgid "Keine Präferenz"
msgstr "Keine Präferenz"

View File

@@ -1320,3 +1320,19 @@ msgstr "Play with track selection"
msgctxt "#30702" msgctxt "#30702"
msgid "Only select forced subtitles (no regular subs)" msgid "Only select forced subtitles (no regular subs)"
msgstr "Only select forced subtitles (no regular subs)" msgstr "Only select forced subtitles (no regular subs)"
msgctxt "#30703"
msgid "Subtitle codec preference"
msgstr "Subtitle codec preference"
msgctxt "#30704"
msgid "Prefer PGS (better quality when burned)"
msgstr "Prefer PGS (better quality when burned)"
msgctxt "#30705"
msgid "Prefer SRT (flexible, can be streamed)"
msgstr "Prefer SRT (flexible, can be streamed)"
msgctxt "#30706"
msgid "No preference"
msgstr "No preference"

View File

@@ -811,7 +811,13 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
prefer_forced = settings.getSetting("prefer_forced_subtitles") == "true" prefer_forced = settings.getSetting("prefer_forced_subtitles") == "true"
only_forced = settings.getSetting("only_forced_subtitles") == "true" only_forced = settings.getSetting("only_forced_subtitles") == "true"
prefer_srt = settings.getSetting("prefer_srt_over_pgs") == "true"
# Subtitle codec preference: 0=PGS, 1=SRT, 2=No preference
codec_pref_index = int(settings.getSetting("subtitle_codec_preference") or "0")
prefer_pgs = codec_pref_index == 0
prefer_srt = codec_pref_index == 1
# codec_pref_index == 2 means no preference (both prefer_pgs and prefer_srt are False)
auto_no_subs = settings.getSetting("auto_no_subtitles_if_no_match") == "true" auto_no_subs = settings.getSetting("auto_no_subtitles_if_no_match") == "true"
# Language code mapping for better matching # Language code mapping for better matching
@@ -966,8 +972,8 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
auto_selected = None auto_selected = None
best_score = -1 best_score = -1
log.debug("Auto-selecting subtitle: preferred_lang={0}, prefer_forced={1}, only_forced={2}, prefer_srt={3}".format( log.debug("Auto-selecting subtitle: preferred_lang={0}, prefer_forced={1}, only_forced={2}, prefer_pgs={3}, prefer_srt={4}".format(
preferred_sub_lang, prefer_forced, only_forced, prefer_srt)) preferred_sub_lang, prefer_forced, only_forced, prefer_pgs, prefer_srt))
for stream in subtitle_streams_data: for stream in subtitle_streams_data:
score = 0 score = 0
@@ -990,10 +996,10 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
if prefer_forced and is_forced: if prefer_forced and is_forced:
score += 50 score += 50
# Bonus for SRT if preferred # Bonus for codec preference
if prefer_srt and codec in ['subrip', 'srt']: if prefer_pgs and codec in ['hdmv_pgs_subtitle', 'pgs']:
score += 30 score += 30
elif not prefer_srt and codec in ['hdmv_pgs_subtitle', 'pgs']: elif prefer_srt and codec in ['subrip', 'srt']:
score += 30 score += 30
# Small bonus for default # Small bonus for default

View File

@@ -55,7 +55,7 @@
<setting id="preferred_subtitle_language" type="select" label="30688" lvalues="30699|30691|30692|30693|30694|30695|30696|30697|30698" default="1" visible="true"/> <setting id="preferred_subtitle_language" type="select" label="30688" lvalues="30699|30691|30692|30693|30694|30695|30696|30697|30698" default="1" visible="true"/>
<setting id="prefer_forced_subtitles" type="bool" label="30689" default="true" visible="true"/> <setting id="prefer_forced_subtitles" type="bool" label="30689" default="true" visible="true"/>
<setting id="only_forced_subtitles" type="bool" label="30702" default="true" visible="true"/> <setting id="only_forced_subtitles" type="bool" label="30702" default="true" visible="true"/>
<setting id="prefer_srt_over_pgs" type="bool" label="30690" default="false" visible="true"/> <setting id="subtitle_codec_preference" type="select" label="30703" lvalues="30704|30705|30706" default="0" visible="true"/>
<setting id="auto_no_subtitles_if_no_match" type="bool" label="30700" default="true" visible="true"/> <setting id="auto_no_subtitles_if_no_match" type="bool" label="30700" default="true" visible="true"/>
<setting id="max_play_queue" type="slider" label="30447" default="200" range="20, 10, 1000" option="int" visible="true"/> <setting id="max_play_queue" type="slider" label="30447" default="200" range="20, 10, 1000" option="int" visible="true"/>