示例#1
0
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')
示例#4
0
 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'
示例#5
0
 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})
示例#6
0
 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'
示例#7
0
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')