Пример #1
0
def use_inputstream_adaptive():
    if kodi.get_setting('video_quality_ia') == 'true' or kodi.get_setting('video_quality') == '3':
        if kodi.get_setting('video_support_ia_builtin') == 'true':
            return True
        elif kodi.get_setting('video_support_ia_addon') == 'true':
            use_ia = kodi.get_setting('video_quality_ia') == 'true' or kodi.get_setting('video_quality') == '3'
            if not use_ia:
                return False

            ia_enabled = kodi.addon_enabled('inputstream.adaptive')
            if ia_enabled is False:
                if kodi.Dialog().yesno(kodi.get_name(), i18n('adaptive_is_disabled')):
                    ia_enabled = kodi.set_addon_enabled('inputstream.adaptive')

            if ia_enabled:
                ia_min_version = '2.0.10'
                ia_version = kodi.Addon('inputstream.adaptive').getAddonInfo('version')
                ia_enabled = loose_version(ia_version) >= loose_version(ia_min_version)
                if not ia_enabled:
                    result = kodi.Dialog().ok(kodi.get_name(), i18n('adaptive_version_check') % ia_min_version)

            if not ia_enabled:
                kodi.set_setting('video_quality_ia', 'false')
                kodi.set_setting('video_quality', '0')
                return False
            else:
                return True
        else:
            kodi.set_setting('video_quality_ia', 'false')
            kodi.set_setting('video_quality', '0')
            return False
    else:
        return False
Пример #2
0
 def wrapper(*args, **kwargs):
     try:
         result = func(*args, **kwargs)
         return result
     except ResourceUnavailableException as error:
         log_utils.log('Connection failed |{0}|'.format(error.message), log_utils.LOGERROR)
         kodi.notify(i18n('connection_failed'), error.message, duration=7000, sound=False)
     except SubRequired as error:
         log_utils.log('Requires subscription to |{0}|'.format(error.message), log_utils.LOGDEBUG)
         kodi.notify(kodi.get_name(), i18n('subscription_required') % error.message, duration=5000, sound=False)
     except NotFound as error:
         log_utils.log('Not found |{0}|'.format(error.message), log_utils.LOGDEBUG)
         kodi.notify(kodi.get_name(), i18n('none_found') % error.message.lower(), duration=5000, sound=False)
     except PlaybackFailed as error:
         log_utils.log('Playback Failed |{0}|'.format(error.message), log_utils.LOGDEBUG)
         kodi.notify(kodi.get_name(), i18n('playback_failed'), duration=5000, sound=False)
     except TwitchException as error:
         _error = ''
         try:
             _message = error.message
             _error = _message['error']
             message = '[{0}] {1}'.format(_message['status'], _message['message'])
         except:
             message = error.message
         log_utils.log('Error |{0}| |{1}|'.format(_error, message.strip()), log_utils.LOGERROR)
         kodi.notify(_error if _error else i18n('error'), message.strip(), duration=7000, sound=False)
Пример #3
0
 def wrapper(*args, **kwargs):
     try:
         result = func(*args, **kwargs)
         return result
     except ResourceUnavailableException as error:
         log_utils.log('Connection failed |{0}|'.format(error.message),
                       log_utils.LOGERROR)
         kodi.notify(i18n('connection_failed'),
                     error.message,
                     duration=7000,
                     sound=False)
     except SubRequired as error:
         log_utils.log(
             'Requires subscription to |{0}|'.format(error.message),
             log_utils.LOGDEBUG)
         kodi.notify(kodi.get_name(),
                     i18n('subscription_required') % error.message,
                     duration=5000,
                     sound=False)
     except NotFound as error:
         log_utils.log('Not found |{0}|'.format(error.message),
                       log_utils.LOGDEBUG)
         kodi.notify(kodi.get_name(),
                     i18n('none_found') % error.message.lower(),
                     duration=5000,
                     sound=False)
     except PlaybackFailed as error:
         log_utils.log('Playback Failed |{0}|'.format(error.message),
                       log_utils.LOGDEBUG)
         kodi.notify(kodi.get_name(),
                     i18n('playback_failed'),
                     duration=5000,
                     sound=False)
     except TwitchException as error:
         _error = ''
         try:
             _message = error.message
             _error = _message['error']
             message = '[{0}] {1}'.format(_message['status'],
                                          _message['message'])
         except:
             message = error.message
         log_utils.log('Error |{0}| |{1}|'.format(_error, message.strip()),
                       log_utils.LOGERROR)
         kodi.notify(_error if _error else i18n('error'),
                     message.strip(),
                     duration=7000,
                     sound=False)
Пример #4
0
def get_oauth_token(token_only=True, required=False):
    oauth_token = kodi.get_setting('oauth_token')
    if not oauth_token or not oauth_token.strip():
        if not required: return ''
        kodi.notify(kodi.get_name(), i18n('token_required'), sound=False)
        kodi.show_settings()
        oauth_token = kodi.get_setting('oauth_token')
    stripped_token = oauth_token.strip()
    if oauth_token != stripped_token:
        oauth_token = stripped_token
        kodi.set_setting('oauth_token', oauth_token)
    if oauth_token:
        if token_only:
            idx = oauth_token.find(':')
            if idx >= 0:
                oauth_token = oauth_token[idx + 1:]
        else:
            if not oauth_token.lower().startswith('oauth:'):
                idx = oauth_token.find(':')
                if idx >= 0:
                    oauth_token = oauth_token[idx + 1:]
                oauth_token = 'oauth:{0}'.format(oauth_token)
    return oauth_token.decode('utf-8')
Пример #5
0
def get_oauth_token(token_only=True, required=False):
    oauth_token = kodi.get_setting('oauth_token')
    if not oauth_token or not oauth_token.strip():
        if not required: return ''
        kodi.notify(kodi.get_name(), i18n('token_required'), sound=False)
        kodi.show_settings()
        oauth_token = kodi.get_setting('oauth_token')
    stripped_token = oauth_token.strip()
    if oauth_token != stripped_token:
        oauth_token = stripped_token
        kodi.set_setting('oauth_token', oauth_token)
    if oauth_token:
        if token_only:
            idx = oauth_token.find(':')
            if idx >= 0:
                oauth_token = oauth_token[idx + 1:]
        else:
            if not oauth_token.lower().startswith('oauth:'):
                idx = oauth_token.find(':')
                if idx >= 0:
                    oauth_token = oauth_token[idx + 1:]
                oauth_token = 'oauth:{0}'.format(oauth_token)
    return oauth_token.decode('utf-8')
Пример #6
0
 def onPlayBackEnded(self):
     is_playing = self.window.getProperty(
         key=self.player_keys['twitch_playing']) == 'True'
     log_utils.log(
         'Player: |onPlayBackEnded| isTwitch |{0}|'.format(is_playing),
         log_utils.LOGDEBUG)
     need_reset = True
     if is_playing:
         reconnect = kodi.get_setting('live_reconnect') == 'true'
         if reconnect:
             live_channel = self.window.getProperty(
                 self.reconnect_keys['stream'])
             if live_channel:
                 channel_id, name, display_name = live_channel.split(',')
                 retries = 0
                 max_retries = 5
                 while not monitor.abortRequested():
                     if monitor.waitForAbort(5):
                         break
                     break
                 if monitor.abortRequested():
                     dialog = None
                 else:
                     dialog = kodi.ProgressDialog(
                         kodi.get_name(),
                         line1=utils.i18n('attempt_reconnect') %
                         display_name,
                         line2=utils.i18n('attempt_number') % (retries + 1),
                         line3=utils.i18n('retry_seconds') % 60)
                 if dialog:
                     need_reset = False
                     with dialog:
                         while (not monitor.abortRequested()) and (
                                 retries < max_retries) and (
                                     not dialog.is_canceled()):
                             wait_time = 0.0
                             abort = False
                             while wait_time <= 120.0:
                                 if monitor.waitForAbort(
                                         0.5) or dialog.is_canceled():
                                     abort = True
                                     break
                                 wait_time += 1.0
                                 if (wait_time % 2) == 0:
                                     percent = int(
                                         ((wait_time / 120) * 100))
                                     dialog.update(
                                         percent=percent,
                                         line3=utils.i18n('retry_seconds') %
                                         ((120.0 - wait_time) / 2))
                             if abort:
                                 break
                             retries += 1
                             try:
                                 try:
                                     cache.reset_cache()
                                 except:
                                     pass
                                 twitch = api.Twitch()
                                 quality = utils.get_default_quality(
                                     'stream', channel_id)
                                 if quality:
                                     quality = quality[channel_id][
                                         'quality']
                                 videos = twitch.get_live(name)
                                 result = twitch.get_channel_stream(
                                     channel_id)[Keys.STREAM]
                                 item_dict = converter.stream_to_playitem(
                                     result)
                                 video = converter.get_video_for_quality(
                                     videos, ask=False, quality=quality)
                                 if video:
                                     log_utils.log(
                                         'Attempting playback using quality |%s| @ |%s|'
                                         % (video['name'], video['url']),
                                         log_utils.LOGDEBUG)
                                     item_dict['path'] = video['url']
                                     playback_item = kodi.create_item(
                                         item_dict, add=False)
                                     stream_name = result[Keys.CHANNEL][Keys.DISPLAY_NAME] \
                                         if result[Keys.CHANNEL][Keys.DISPLAY_NAME] else result[Keys.CHANNEL][Keys.NAME]
                                     self.window.setProperty(
                                         self.reconnect_keys['stream'],
                                         '{0},{1},{2}'.format(
                                             channel_id, name, stream_name))
                                     self.play(item_dict['path'],
                                               playback_item)
                                     if utils.irc_enabled(
                                     ) and twitch.access_token:
                                         username = twitch.get_username()
                                         if username:
                                             utils.exec_irc_script(
                                                 username, name)
                                     break
                             except:
                                 log_utils.log(
                                     'Player: |Reconnection| Failed attempt |{0}|'
                                     .format(retries), log_utils.LOGERROR)
                             dialog.update(
                                 0,
                                 line2=utils.i18n('attempt_number') %
                                 (retries + 1),
                                 line3=utils.i18n('retry_seconds') % 60)
                     if dialog.is_canceled():
                         self.reset()
     if need_reset:
         self.reset()
Пример #7
0
 def onPlayBackEnded(self):
     is_playing = self.window.getProperty(key=self.player_keys['twitch_playing']) == 'True'
     log_utils.log('Player: |onPlayBackEnded| isTwitch |{0}|'.format(is_playing), log_utils.LOGDEBUG)
     need_reset = True
     if is_playing:
         reconnect = kodi.get_setting('live_reconnect') == 'true'
         if reconnect:
             live_channel = self.window.getProperty(self.reconnect_keys['stream'])
             if live_channel:
                 channel_id, name, display_name, quality = live_channel.split(',')
                 retries = 0
                 max_retries = 5
                 while not monitor.abortRequested():
                     if monitor.waitForAbort(5):
                         break
                     break
                 if monitor.abortRequested():
                     dialog = None
                 else:
                     dialog = kodi.ProgressDialog(kodi.get_name(), line1=utils.i18n('attempt_reconnect') % display_name,
                                                  line2=utils.i18n('attempt_number') % (retries + 1), line3=utils.i18n('retry_seconds') % 60)
                 if dialog:
                     need_reset = False
                     with dialog:
                         while (not monitor.abortRequested()) and (retries < max_retries) and (not dialog.is_canceled()):
                             wait_time = 0.0
                             abort = False
                             while wait_time <= 120.0:
                                 if monitor.waitForAbort(0.5) or dialog.is_canceled():
                                     abort = True
                                     break
                                 wait_time += 1.0
                                 if (wait_time % 2) == 0:
                                     percent = int(((wait_time / 120) * 100))
                                     dialog.update(percent=percent, line3=utils.i18n('retry_seconds') % ((120.0 - wait_time) / 2))
                             if abort:
                                 break
                             retries += 1
                             try:
                                 try:
                                     cache.reset_cache()
                                 except:
                                     pass
                                 twitch = api.Twitch()
                                 videos = twitch.get_live(name)
                                 result = twitch.get_channel_stream(channel_id)[Keys.STREAM]
                                 item_dict = converter.stream_to_playitem(result)
                                 video = converter.get_video_for_quality(videos, ask=False, quality=quality)
                                 if video:
                                     log_utils.log('Attempting playback using quality |%s| @ |%s|' % (video['name'], video['url']), log_utils.LOGDEBUG)
                                     item_dict['path'] = video['url']
                                     playback_item = kodi.create_item(item_dict, add=False)
                                     stream_name = result[Keys.CHANNEL][Keys.DISPLAY_NAME] \
                                         if result[Keys.CHANNEL][Keys.DISPLAY_NAME] else result[Keys.CHANNEL][Keys.NAME]
                                     self.window.setProperty(self.reconnect_keys['stream'], '{0},{1},{2}'.format(channel_id, name, stream_name))
                                     self.play(item_dict['path'], playback_item)
                                     if utils.irc_enabled() and twitch.access_token:
                                         username = twitch.get_username()
                                         if username:
                                             utils.exec_irc_script(username, name)
                                     break
                             except:
                                 log_utils.log('Player: |Reconnection| Failed attempt |{0}|'.format(retries), log_utils.LOGERROR)
                             dialog.update(0, line2=utils.i18n('attempt_number') % (retries + 1), line3=utils.i18n('retry_seconds') % 60)
                     if dialog.is_canceled():
                         self.reset()
     if need_reset:
         self.reset()