diff --git a/resources/language/resource.language.de/strings.po b/resources/language/resource.language.de/strings.po
index a5ad46d..61f6323 100644
--- a/resources/language/resource.language.de/strings.po
+++ b/resources/language/resource.language.de/strings.po
@@ -1257,3 +1257,27 @@ msgstr "AV1"
msgctxt "#30684"
msgid "Disk-Caching deaktivieren (nur RAM)"
msgstr "Disk-Caching deaktivieren (nur RAM)"
+
+msgctxt "#30685"
+msgid "Audio- & Untertitel-Einstellungen"
+msgstr "Audio- & Untertitel-Einstellungen"
+
+msgctxt "#30686"
+msgid "Bevorzugte Audio-Sprache"
+msgstr "Bevorzugte Audio-Sprache"
+
+msgctxt "#30687"
+msgid "Standard-Audiospur automatisch wählen"
+msgstr "Standard-Audiospur automatisch wählen"
+
+msgctxt "#30688"
+msgid "Bevorzugte Untertitel-Sprache"
+msgstr "Bevorzugte Untertitel-Sprache"
+
+msgctxt "#30689"
+msgid "Forced-Untertitel bevorzugen"
+msgstr "Forced-Untertitel bevorzugen"
+
+msgctxt "#30690"
+msgid "SRT vor PGS/Bild-Untertiteln bevorzugen"
+msgstr "SRT vor PGS/Bild-Untertiteln bevorzugen"
diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po
index 0101da1..2e6494e 100644
--- a/resources/language/resource.language.en_gb/strings.po
+++ b/resources/language/resource.language.en_gb/strings.po
@@ -1248,3 +1248,27 @@ msgstr "AV1"
msgctxt "#30684"
msgid "Disable disk caching (RAM only)"
msgstr "Disable disk caching (RAM only)"
+
+msgctxt "#30685"
+msgid "Audio & Subtitle Preferences"
+msgstr "Audio & Subtitle Preferences"
+
+msgctxt "#30686"
+msgid "Preferred audio language"
+msgstr "Preferred audio language"
+
+msgctxt "#30687"
+msgid "Auto-select default audio track"
+msgstr "Auto-select default audio track"
+
+msgctxt "#30688"
+msgid "Preferred subtitle language"
+msgstr "Preferred subtitle language"
+
+msgctxt "#30689"
+msgid "Prefer forced subtitles"
+msgstr "Prefer forced subtitles"
+
+msgctxt "#30690"
+msgid "Prefer SRT over PGS/image subtitles"
+msgstr "Prefer SRT over PGS/image subtitles"
diff --git a/resources/lib/play_utils.py b/resources/lib/play_utils.py
index 79d61cb..3d90482 100644
--- a/resources/lib/play_utils.py
+++ b/resources/lib/play_utils.py
@@ -782,8 +782,10 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
dialog = xbmcgui.Dialog()
audio_streams_list = {}
audio_streams = []
+ audio_streams_data = [] # Store full stream data for preference matching
subtitle_streams_list = {}
subtitle_streams = ['No subtitles']
+ subtitle_streams_data = [] # Store full stream data for preference matching
downloadable_streams = []
select_audio_index = audio_stream_index
select_subs_index = subtitle_stream_index
@@ -792,6 +794,13 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
default_sub = media_source.get('DefaultSubtitleStreamIndex', "")
source_id = media_source["Id"]
+ # Read user preferences
+ preferred_audio_lang = settings.getSetting("preferred_audio_language").lower()
+ auto_select_default_audio = settings.getSetting("auto_select_default_audio") == "true"
+ preferred_sub_lang = settings.getSetting("preferred_subtitle_language").lower()
+ prefer_forced = settings.getSetting("prefer_forced_subtitles") == "true"
+ prefer_srt = settings.getSetting("prefer_srt_over_pgs") == "true"
+
media_streams = media_source['MediaStreams']
for stream in media_streams:
@@ -815,6 +824,7 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
audio_streams_list[track] = index
audio_streams.append(track)
+ audio_streams_data.append(stream)
elif 'Subtitle' in stream['Type']:
language = stream.get('Language', 'Unknown')
@@ -843,6 +853,70 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
subtitle_streams_list[track] = index
subtitle_streams.append(track)
+ subtitle_streams_data.append(stream)
+
+ # Auto-select audio track based on preferences
+ if select_audio_index is None and len(audio_streams_data) > 0:
+ auto_selected = None
+
+ # Try to match preferred language
+ if preferred_audio_lang:
+ for stream in audio_streams_data:
+ stream_lang = stream.get('Language', '').lower()
+ # Match against common variations (ger, deu, de, german)
+ if preferred_audio_lang in stream_lang or stream_lang.startswith(preferred_audio_lang[:3]):
+ auto_selected = stream['Index']
+ log.debug("Auto-selected audio by language: {0} (index {1})".format(stream_lang, auto_selected))
+ break
+
+ # Fall back to default audio if enabled
+ if auto_selected is None and auto_select_default_audio:
+ auto_selected = default_audio
+ log.debug("Auto-selected default audio (index {0})".format(auto_selected))
+
+ if auto_selected is not None:
+ select_audio_index = auto_selected
+
+ # Auto-select subtitle track based on preferences
+ if select_subs_index is None and len(subtitle_streams_data) > 0:
+ auto_selected = None
+ best_score = -1
+
+ for stream in subtitle_streams_data:
+ score = 0
+ stream_lang = stream.get('Language', '').lower()
+ codec = stream.get('Codec', '').lower()
+ is_forced = stream.get('IsForced', False)
+ is_default = stream.get('IsDefault', False)
+
+ # Score based on language match
+ if preferred_sub_lang and (preferred_sub_lang in stream_lang or stream_lang.startswith(preferred_sub_lang[:3])):
+ score += 100
+
+ # Bonus for forced if preferred
+ if prefer_forced and is_forced:
+ score += 50
+
+ # Bonus for SRT if preferred
+ if prefer_srt and codec in ['subrip', 'srt']:
+ score += 30
+ elif not prefer_srt and codec in ['hdmv_pgs_subtitle', 'pgs']:
+ score += 30
+
+ # Small bonus for default
+ if is_default:
+ score += 10
+
+ log.debug("Subtitle score for {0} ({1}): {2} (forced={3}, codec={4})".format(
+ stream_lang, stream['Index'], score, is_forced, codec))
+
+ if score > best_score:
+ best_score = score
+ auto_selected = stream['Index']
+
+ if auto_selected is not None and best_score >= 100: # Only auto-select if language matched
+ select_subs_index = auto_selected
+ log.debug("Auto-selected subtitle (index {0}, score {1})".format(auto_selected, best_score))
# set audio index
if select_audio_index is not None:
diff --git a/resources/settings.xml b/resources/settings.xml
index 6ecc497..de1bc06 100644
--- a/resources/settings.xml
+++ b/resources/settings.xml
@@ -47,6 +47,14 @@
+
+
+
+
+
+
+
+