From 46d16293d22547bd713125340c841636d8f555bb Mon Sep 17 00:00:00 2001 From: venomousZealot Date: Wed, 5 May 2021 13:53:30 +0200 Subject: [PATCH 1/4] Replacing ordered dictionaries with lists Allows multiple subtitles with identical names. Should fix https://github.com/jellyfin/jellyfin-kodi/issues/435 --- jellyfin_kodi/helper/playutils.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/jellyfin_kodi/helper/playutils.py b/jellyfin_kodi/helper/playutils.py index 5b12ebb8..4fb24e94 100644 --- a/jellyfin_kodi/helper/playutils.py +++ b/jellyfin_kodi/helper/playutils.py @@ -566,8 +566,8 @@ class PlayUtils(object): IsTextSubtitleStream if true, is available to download from server. ''' prefs = "" - audio_streams = collections.OrderedDict() - subs_streams = collections.OrderedDict() + audio_streams = list() + subs_streams = list() streams = source['MediaStreams'] server_settings = self.api_client.get_transcode_settings() @@ -582,7 +582,7 @@ class PlayUtils(object): track = stream['DisplayTitle'] - audio_streams[track] = index + audio_streams.append(index) elif stream_type == 'Subtitle': if stream['IsExternal']: @@ -595,22 +595,25 @@ class PlayUtils(object): track = stream['DisplayTitle'] - subs_streams[track] = index + subs_streams.append(index) skip_dialog = int(settings('skipDialogTranscode') or 0) audio_selected = None + def get_track_title(trackIndex): + return streams[trackIndex]['DisplayTitle'] + if audio: audio_selected = audio elif skip_dialog in (0, 1): if len(audio_streams) > 1: - selection = list(audio_streams.keys()) + selection = list(map(get_track_title, audio_streams)) resp = dialog("select", translate(33013), selection) - audio_selected = audio_streams[selection[resp]] if resp > -1 else source['DefaultAudioStreamIndex'] - else: # Only one choice - audio_selected = audio_streams[next(iter(audio_streams))] + audio_selected = audio_streams[resp] if resp > -1 else source['DefaultAudioStreamIndex'] + elif len(audio_streams) > 0: # Only one choice + audio_selected = audio_streams[0] else: audio_selected = source['DefaultAudioStreamIndex'] @@ -632,11 +635,11 @@ class PlayUtils(object): elif skip_dialog in (0, 2) and len(subs_streams): - selection = list(['No subtitles']) + list(subs_streams.keys()) - resp = dialog("select", translate(33014), selection) + selection = list(['No subtitles']) + list(map(get_track_title, subs_streams)) + resp = dialog("select", translate(33014), selection) - 1 if resp: - index = subs_streams[selection[resp]] if resp > -1 else source.get('DefaultSubtitleStreamIndex') + index = subs_streams[resp] if resp > -1 else source.get('DefaultSubtitleStreamIndex') if index is not None: From 1ae54a3e20f47a1a31a22bf99afeb2bd337977f9 Mon Sep 17 00:00:00 2001 From: venomousZealot Date: Wed, 5 May 2021 14:05:27 +0200 Subject: [PATCH 2/4] Additional cleanup --- jellyfin_kodi/helper/playutils.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/jellyfin_kodi/helper/playutils.py b/jellyfin_kodi/helper/playutils.py index 4fb24e94..12d69fcb 100644 --- a/jellyfin_kodi/helper/playutils.py +++ b/jellyfin_kodi/helper/playutils.py @@ -580,8 +580,6 @@ class PlayUtils(object): if stream_type == 'Audio': - track = stream['DisplayTitle'] - audio_streams.append(index) elif stream_type == 'Subtitle': @@ -593,15 +591,13 @@ class PlayUtils(object): if not avail_for_extraction and not allow_burned_subs: continue - track = stream['DisplayTitle'] - subs_streams.append(index) skip_dialog = int(settings('skipDialogTranscode') or 0) audio_selected = None def get_track_title(trackIndex): - return streams[trackIndex]['DisplayTitle'] + return streams[trackIndex]['DisplayTitle'] or ("Track %s" % trackIndex) if audio: audio_selected = audio From c79980c477c81ddfd666bef74f7ccb2957ed1ca3 Mon Sep 17 00:00:00 2001 From: venomousZealot Date: Wed, 5 May 2021 14:08:48 +0200 Subject: [PATCH 3/4] Make sonarcloud happy --- jellyfin_kodi/helper/playutils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jellyfin_kodi/helper/playutils.py b/jellyfin_kodi/helper/playutils.py index 12d69fcb..fd834c80 100644 --- a/jellyfin_kodi/helper/playutils.py +++ b/jellyfin_kodi/helper/playutils.py @@ -596,8 +596,8 @@ class PlayUtils(object): skip_dialog = int(settings('skipDialogTranscode') or 0) audio_selected = None - def get_track_title(trackIndex): - return streams[trackIndex]['DisplayTitle'] or ("Track %s" % trackIndex) + def get_track_title(track_index): + return streams[track_index]['DisplayTitle'] or ("Track %s" % track_index) if audio: audio_selected = audio From 8870d772a8699aa002c62ccbdce2824ae8e5c65d Mon Sep 17 00:00:00 2001 From: venomousZealot Date: Wed, 5 May 2021 14:23:26 +0200 Subject: [PATCH 4/4] Remove unused import --- jellyfin_kodi/helper/playutils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/jellyfin_kodi/helper/playutils.py b/jellyfin_kodi/helper/playutils.py index fd834c80..a674e183 100644 --- a/jellyfin_kodi/helper/playutils.py +++ b/jellyfin_kodi/helper/playutils.py @@ -5,7 +5,6 @@ from __future__ import division, absolute_import, print_function, unicode_litera import os from uuid import uuid4 -import collections from kodi_six import xbmc, xbmcvfs