From ea97b42a5258cb607d4c15c90efacfd0173122da Mon Sep 17 00:00:00 2001 From: jessbo <jessbo@localhost> Date: Fri, 13 Aug 2021 10:47:19 -0400 Subject: [PATCH] Add transcode dialog skip option: "Media default" --- jellyfin_kodi/helper/playutils.py | 94 ++++++++++++------- .../resource.language.en_gb/strings.po | 4 + .../resource.language.en_us/strings.po | 4 + resources/settings.xml | 10 +- 4 files changed, 71 insertions(+), 41 deletions(-) diff --git a/jellyfin_kodi/helper/playutils.py b/jellyfin_kodi/helper/playutils.py index 6f5cbead..8200604a 100644 --- a/jellyfin_kodi/helper/playutils.py +++ b/jellyfin_kodi/helper/playutils.py @@ -3,6 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# +import enum import os from uuid import uuid4 @@ -17,6 +18,12 @@ from . import translate, settings, window, dialog, api ################################################################################################# LOG = LazyLogger(__name__) +class Transcode(enum.IntEnum): + Enabled = 0 + Audio = 1 + Subtitle = 2 + Disabled = 3 + MediaDefault = 4 ################################################################################################# @@ -234,7 +241,7 @@ class PlayUtils(object): # manual bitrate url_parsed = [p for p in url_parsed if 'AudioBitrate' not in p and 'VideoBitrate' not in p] - if settings('skipDialogTranscode') != "3" and source.get('MediaStreams'): + if settings('skipDialogTranscode') != Transcode.Enabled and source.get('MediaStreams'): # manual tracks url_parsed = [p for p in url_parsed if 'AudioStreamIndex' not in p and 'SubtitleStreamIndex' not in p] manual_tracks = self.get_audio_subs(source, audio, subtitle) @@ -598,61 +605,76 @@ class PlayUtils(object): subs_streams.append(index) - skip_dialog = int(settings('skipDialogTranscode') or 0) - audio_selected = None - + skip_dialog = Transcode(int(settings('skipDialogTranscode') or 0)) def get_track_title(track_index): return streams[track_index]['DisplayTitle'] or ("Track %s" % track_index) - if audio: + # Select audio stream + audio_selected = None + + if skip_dialog == Transcode.MediaDefault: + # NOTE: "DefaultAudioStreamIndex" is the default according to Jellyfin. + # The media's default is marked by the "IsDefault" value. + for track_index in audio_streams: + if streams[track_index]['IsDefault']: + audio = track_index + break + + # Compare to None in the off-chance the track index is 0. + if audio is not None: audio_selected = audio - elif skip_dialog in (0, 1): + elif skip_dialog in (Transcode.Enabled, Transcode.Audio): if len(audio_streams) > 1: - selection = list(map(get_track_title, audio_streams)) resp = dialog("select", translate(33013), selection) - audio_selected = audio_streams[resp] if resp > -1 else source['DefaultAudioStreamIndex'] - elif len(audio_streams) > 0: # Only one choice + if resp > -1: + audio_selected = audio_streams[resp] + else: + audio_selected = source['DefaultAudioStreamIndex'] + elif audio_streams: + # Only one choice audio_selected = audio_streams[0] + else: audio_selected = source['DefaultAudioStreamIndex'] - self.info['AudioStreamIndex'] = audio_selected - prefs += "&AudioStreamIndex=%s" % audio_selected + if audio_selected is not None: + self.info['AudioStreamIndex'] = audio_selected + prefs += "&AudioStreamIndex=%s" % audio_selected - if subtitle: + # Select audio stream + subtitle_selected = None - index = subtitle - server_settings = self.api_client.get_transcode_settings() - stream = streams[index] + if skip_dialog == Transcode.MediaDefault: + for track_index in subs_streams: + if streams[track_index]['IsDefault']: + subtitle = track_index + break - if server_settings['EnableSubtitleExtraction'] and stream['SupportsExternalStream']: - self.info['SubtitleUrl'] = self.get_subtitles(source, stream, index) - self.info['SubtitleStreamIndex'] = index - elif allow_burned_subs: - prefs += "&SubtitleStreamIndex=%s" % index - self.info['SubtitleStreamIndex'] = index - - elif skip_dialog in (0, 2) and len(subs_streams): + if subtitle is not None: + subtitle_selected = subtitle + elif skip_dialog in (Transcode.Enabled, Transcode.Subtitle) and subs_streams: selection = list(['No subtitles']) + list(map(get_track_title, subs_streams)) resp = dialog("select", translate(33014), selection) - 1 - + # Possible responses: + # >=0 Subtitle track + # -1 No subtitles (Default) + # -2 Dialog was cancelled if resp > -1: - index = subs_streams[resp] + track_index = subs_streams[resp] + subtitle_selected = track_index - if index is not None: - - server_settings = self.api_client.get_transcode_settings() - stream = streams[index] - - if server_settings['EnableSubtitleExtraction'] and stream['SupportsExternalStream']: - self.info['SubtitleUrl'] = self.get_subtitles(source, stream, index) - self.info['SubtitleStreamIndex'] = index - elif allow_burned_subs: - prefs += "&SubtitleStreamIndex=%s" % index - self.info['SubtitleStreamIndex'] = index + if subtitle_selected is not None: + server_settings = self.api_client.get_transcode_settings() + stream = streams[track_index] + if server_settings['EnableSubtitleExtraction'] and stream['SupportsExternalStream']: + self.info['SubtitleUrl'] = self.get_subtitles(source, stream, subtitle_selected) + self.info['SubtitleStreamIndex'] = subtitle_selected + elif allow_burned_subs: + prefs += "&SubtitleStreamIndex=%s" % subtitle_selected + self.info['SubtitleStreamIndex'] = subtitle_selected return prefs diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po index b11a1baa..7c40d2c7 100644 --- a/resources/language/resource.language.en_gb/strings.po +++ b/resources/language/resource.language.en_gb/strings.po @@ -833,6 +833,10 @@ msgctxt "#33159" msgid "Enable audio/subtitles selection" msgstr "Enable audio/subtitles selection" +msgctxt "#33163" +msgid "Disabled/Media default" +msgstr "Disabled/Media default" + msgctxt "#33160" msgid "To avoid errors, please update Jellyfin for Kodi to version: " msgstr "To avoid errors, please update Jellyfin for Kodi to version: " diff --git a/resources/language/resource.language.en_us/strings.po b/resources/language/resource.language.en_us/strings.po index 55723e8f..d11f73ba 100644 --- a/resources/language/resource.language.en_us/strings.po +++ b/resources/language/resource.language.en_us/strings.po @@ -797,6 +797,10 @@ msgctxt "#33159" msgid "Enable audio/subtitles selection" msgstr "Enable audio/subtitles selection" +msgctxt "#33163" +msgid "Disabled/Media default" +msgstr "Disabled/Media default" + msgctxt "#33160" msgid "To avoid errors, please update Jellyfin for Kodi to version: " msgstr "To avoid errors, please update Jellyfin for Kodi to version: " diff --git a/resources/settings.xml b/resources/settings.xml index 1d43f1c3..ad337517 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -32,7 +32,7 @@ <setting label="33201" id="maxArtResolution" type="enum" values="360|480|600|720|1080|Unlimited [default]" default="5" /> <setting id="enableMusic" visible="false" default="false" /> </category> - + <category label="30516"><!-- Playback --> <setting label="33113" type="lsep" /> <setting label="30518" id="enableCinema" type="bool" default="true" /> @@ -54,7 +54,7 @@ <setting label="30162" id="audioPreferredCodec" type="select" values="AAC|AC3|MP3|Opus|FLAC|Vorbis" visible="true" default="AAC" /> <setting label="30163" id="audioBitrate" type="enum" values="96|128|160|192|256|320|384" visible="true" default="4" /> <setting label="30164" id="audioMaxChannels" type="slider" range="2,1,6" option="int" visible="true" default="6" /> - <setting label="33159" id="skipDialogTranscode" type="enum" lvalues="305|33157|33158|13106" visible="true" default="3" /> + <setting label="33159" id="skipDialogTranscode" type="enum" lvalues="305|33157|33158|13106|33163" visible="true" default="3" /> <setting label="30165" id="allowBurnedSubs" type="bool" visible="true" enable="true" default="true" /> <setting type="sep" /> @@ -66,7 +66,7 @@ <setting id="markPlayed" type="number" visible="false" default="90" /> </category> - + <category label="30235"><!-- Interface --> <setting label="33105" id="enableContext" type="bool" default="true" /> <setting label="33106" id="enableContextTranscode" type="bool" visible="eq(-1,true)" default="true" subsetting="true" /> @@ -93,7 +93,7 @@ <setting id="ignoreSpecialsNextEpisodes" type="bool" label="30527" default="false" /> <setting id="getCast" type="bool" label="33124" default="false" /> </category> - + <category label="30022"><!-- Advanced --> <setting label="30004" id="logLevel" type="enum" values="Disabled|Info|Debug" default="1" /> <setting label="33164" id="maskInfo" type="bool" default="true" /> @@ -104,7 +104,7 @@ <setting label="33180" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=restartservice)" option="close" /> <setting label="30529" id="startupDelay" type="number" default="0" option="int" /> <setting label="Developer mode" id="devMode" type="bool" default="false" /> - + <setting type="sep" /> <setting label="33104" type="lsep"/> <setting label="33093" type="folder" id="backupPath" option="writeable" />