def _get_default_subtitle_language(manifest): subtitle_language = common.get_kodi_subtitle_language() if subtitle_language == 'forced_only': if g.ADDON.getSettingBool('forced_subtitle_workaround'): # When we set "forced only" subtitles in Kodi Player, Kodi use this behavior: # 1) try to select forced subtitle that matches audio language # 2) when missing, try to select the first "regular" subtitle that matches audio language # This Kodi behavior is totally non sense. If forced is selected you must not view the regular subtitles # There is no other solution than to disable the subtitles manually. audio_language = common.get_kodi_audio_language() if not any( text_track.get('isForcedNarrative', False) is True and text_track['language'] == audio_language for text_track in manifest['timedtexttracks']): xbmc.Player().showSubtitles(False) # Leave the selection of forced subtitles to Kodi return -1 else: for index, text_track in enumerate(manifest['timedtexttracks']): if text_track['isNoneTrack']: continue if not text_track.get('isForcedNarrative') and text_track[ 'language'] == subtitle_language: return index return -1
def _get_preferred_subtitle_language(self): """ Get the language code of the preferred subtitle as set in Kodi Player setting :return: The language code (as ISO with 2 letters) or 'None' if disabled """ subtitle_language = common.get_kodi_subtitle_language() if subtitle_language == 'forced_only': # Then match the audio language subtitle_language = self._get_preferred_audio_language() elif subtitle_language == 'original': # Get current audio languages audio_list = self.player_state.get(STREAMS['audio']['list']) # Find the language of the original audio track stream = next( (audio_track for audio_track in audio_list if audio_track['isoriginal']), None) # stream['language'] can be ISO 3 letters or with country code (pt-BR) / converted with LOCALE_CONV_TABLE if stream is None: subtitle_language = None else: if '-' in stream['language']: subtitle_language = stream['language'][:2] else: subtitle_language = common.convert_language_iso( stream['language']) elif subtitle_language == 'default': # Get the Kodi UI language subtitle_language = common.get_kodi_ui_language() elif subtitle_language == 'none': # Subtitles are disabled subtitle_language = None return subtitle_language
def initialize(self, data): self.is_kodi_forced_subtitles_only = common.get_kodi_subtitle_language() == 'forced_only' self.is_prefer_alternative_lang = G.ADDON.getSettingBool('prefer_alternative_lang') self.is_prefer_sub_impaired = common.json_rpc('Settings.GetSettingValue', {'setting': 'accessibility.subhearing'}).get('value') self.is_prefer_audio_impaired = common.json_rpc('Settings.GetSettingValue', {'setting': 'accessibility.audiovisual'}).get('value')
def initialize(self, data): self.videoid = common.VideoId.from_dict(data['videoid']) if self.videoid.mediatype not in [common.VideoId.MOVIE, common.VideoId.EPISODE]: self.enabled = False return self.current_videoid = self.videoid.derive_parent(common.VideoId.SHOW) self.sc_settings = g.SHARED_DB.get_stream_continuity(g.LOCAL_DB.get_active_profile_guid(), self.current_videoid.value, {}) self.kodi_only_forced_subtitles = common.get_kodi_subtitle_language() == 'forced_only'
def _select_lang_with_country_code(self): """Force selection of the audio/subtitles language with country code""" # If Kodi Player audio language is not set as "mediadefault" the language with country code for # audio/subtitles, will never be selected automatically, then we try to do this manually. audio_language = self._get_current_audio_language() if '-' not in audio_language: # There is no audio language with country code or different settings have been chosen return # Audio side if common.get_kodi_audio_language() not in ['mediadefault', 'original']: audio_list = self.player_state.get(STREAMS['audio']['list']) stream = None if self.is_prefer_audio_impaired: stream = next((audio_track for audio_track in audio_list if audio_track['language'] == audio_language and audio_track['isimpaired'] and audio_track['isdefault']), # The default track can change is user choose 2ch as def None) if not stream: stream = next((audio_track for audio_track in audio_list if audio_track['language'] == audio_language and not audio_track['isimpaired'] and audio_track['isdefault']), # The default track can change is user choose 2ch as def None) if stream: self.sc_settings.update({'audio': stream}) # We update the current player state data to avoid wrong behaviour with features executed after self.player_state[STREAMS['audio']['current']] = stream # Subtitles side subtitle_list = self.player_state.get(STREAMS['subtitle']['list']) if not any(subtitle_track for subtitle_track in subtitle_list if subtitle_track['language'].startswith(audio_language[:2] + '-')): self.sc_settings.update({'subtitleenabled': False}) return if self.is_kodi_forced_subtitles_only: subtitle_language = audio_language else: # Get the subtitles language set in Kodi Player setting subtitle_language = common.get_kodi_subtitle_language() # Get the alternative language code # Here we have only the language code without country code, we do not know the country code to be used, # usually there are only two tracks with the same language and different countries, # then we try to find the language with the country code _stream = next((subtitle_track for subtitle_track in subtitle_list if subtitle_track['language'].startswith(subtitle_language + '-')), None) if _stream: subtitle_language = _stream['language'] stream_sub = self._find_subtitle_stream(subtitle_language, self.is_kodi_forced_subtitles_only) if stream_sub: self.sc_settings.update({'subtitleenabled': True}) self.sc_settings.update({'subtitle': stream_sub}) # We update the current player state data to avoid wrong behaviour with features executed after self.player_state[STREAMS['subtitle']['current']] = stream_sub else: self.sc_settings.update({'subtitleenabled': False})
def initialize(self, data): if self.videoid.mediatype not in [ common.VideoId.MOVIE, common.VideoId.EPISODE ]: self.enabled = False return self.sc_settings = G.SHARED_DB.get_stream_continuity( G.LOCAL_DB.get_active_profile_guid(), self.videoid_parent.value, {}) self.kodi_only_forced_subtitles = common.get_kodi_subtitle_language( ) == 'forced_only'
def _get_default_subtitle_language(manifest): subtitle_language = common.get_kodi_subtitle_language() is_forced = subtitle_language == 'forced_only' if is_forced: subtitle_language = common.get_kodi_audio_language() for index, text_track in enumerate(manifest['timedtexttracks']): if text_track['isNoneTrack']: continue if text_track.get('isForcedNarrative', False) != is_forced: continue if text_track['language'] != subtitle_language: continue return index # Leave the selection of forced subtitles to Kodi return -1
def initialize(self, data): self.is_kodi_forced_subtitles_only = common.get_kodi_subtitle_language( ) == 'forced_only'
def initialize(self, data): self.is_kodi_forced_subtitles_only = common.get_kodi_subtitle_language( ) == 'forced_only' self.is_prefer_alternative_lang = G.ADDON.getSettingBool( 'prefer_alternative_lang')