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)
Beispiel #2
0
 def onPlayBackStarted(self):
     twitch_host_matches = ['jtvnw.', 'ttvnw.', 'twitch.tv']
     is_playing = self.window.getProperty(key=self.player_keys['twitch_playing']) == 'True'
     seek_time = self.window.getProperty(key=self.seek_keys['seek_time'])
     if is_playing:
         is_playing = any(host_match in self.getPlayingFile() for host_match in twitch_host_matches)
     log_utils.log('Player: |onPlayBackStarted| isTwitch |{0}| SeekTime |{1}|'.format(is_playing, seek_time), log_utils.LOGDEBUG)
     if not is_playing:
         self.reset()
     else:
         if seek_time:
             seek_time = float(seek_time)
             self.seekTime(seek_time)
Beispiel #3
0
 def onPlayBackStarted(self):
     twitch_host_matches = ['jtvnw.', 'ttvnw.', 'twitch.tv']
     is_playing = self.window.getProperty(key=self.player_keys['twitch_playing']) == 'True'
     seek_time = self.window.getProperty(key=self.seek_keys['seek_time'])
     if is_playing:
         is_playing = any(host_match in self.getPlayingFile() for host_match in twitch_host_matches)
     log_utils.log('Player: |onPlayBackStarted| isTwitch |{0}| SeekTime |{1}|'.format(is_playing, seek_time), log_utils.LOGDEBUG)
     if not is_playing:
         self.reset()
     else:
         if seek_time:
             seek_time = float(seek_time)
             self.seekTime(seek_time)
Beispiel #4
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)
def googl_url(url):
    post_url = 'https://www.googleapis.com/urlshortener/v1/url?key=%s' % b64decode(__key)
    data = {'longUrl': url}
    headers = {'content-type': 'application/json'}
    request = requests.post(post_url, data=json.dumps(data), headers=headers)
    json_data = request.json()
    if 'id' in json_data:
        return json_data['id']
    else:
        if 'error' in json_data:
            if 'errors' in json_data['error']:
                errors = ''
                for err in json_data['error']['errors']:
                    errors += '%s |%s| ' % (err['message'], err['reason'])
                log_utils.log('Error: %s' % errors, log_utils.LOGERROR)
            else:
                log_utils.log('Error: %s |%s|' % (json_data['error']['code'], json_data['error']['message']), log_utils.LOGERROR)
        return None
 def wrapper(*args, **kwargs):
     try:
         result = func(*args, **kwargs)
         logging_result = copy.deepcopy(result)
         try:
             if u'email' in logging_result:
                 logging_result[u'email'] = '*****@*****.**'
             if u'token' in logging_result:
                 if u'client_id' in logging_result[u'token']:
                     logging_result[u'token'][u'client_id'] = logging_result[u'token'][u'client_id'][:4] + \
                                                      ('*' * (len(logging_result[u'token'][u'client_id']) - 8)) + \
                                                              logging_result[u'token'][u'client_id'][(len(logging_result[u'token'][u'client_id']) - 4):]
             logging_result = json.dumps(logging_result, indent=4)
         except:
             pass
         log_utils.log(logging_result, log_utils.LOGDEBUG)
         return result
     except:
         raise
Beispiel #7
0
 def wrapper(*args, **kwargs):
     try:
         result = func(*args, **kwargs)
         logging_result = copy.deepcopy(result)
         try:
             if u'email' in logging_result:
                 logging_result[u'email'] = '*****@*****.**'
             if u'token' in logging_result:
                 if u'client_id' in logging_result[u'token']:
                     logging_result[u'token'][u'client_id'] = logging_result[u'token'][u'client_id'][:4] + \
                                                      ('*' * (len(logging_result[u'token'][u'client_id']) - 8)) + \
                                                              logging_result[u'token'][u'client_id'][(len(logging_result[u'token'][u'client_id']) - 4):]
             logging_result = json.dumps(logging_result, indent=4)
         except:
             pass
         log_utils.log(logging_result, log_utils.LOGDEBUG)
         return result
     except:
         raise
def googl_url(url):
    post_url = 'https://www.googleapis.com/urlshortener/v1/url?key=%s' % b64decode(
        __key)
    data = {'longUrl': url}
    headers = {'content-type': 'application/json'}
    request = requests.post(post_url, data=json.dumps(data), headers=headers)
    json_data = request.json()
    if 'id' in json_data:
        return json_data['id']
    else:
        if 'error' in json_data:
            if 'errors' in json_data['error']:
                errors = ''
                for err in json_data['error']['errors']:
                    errors += '%s |%s| ' % (err['message'], err['reason'])
                log_utils.log('Error: %s' % errors, log_utils.LOGERROR)
            else:
                log_utils.log(
                    'Error: %s |%s|' % (json_data['error']['code'],
                                        json_data['error']['message']),
                    log_utils.LOGERROR)
        return None
Beispiel #9
0
 def valid_token(self, client_id, token, scopes):  # client_id, token used for unique caching only
     token_check = self.root()
     while True:
         if not token_check['token']['valid']:
             result = kodi.Dialog().ok(heading=i18n('oauth_token'), line1=i18n('invalid_token'),
                                       line2=i18n('get_new_oauth_token') % (i18n('settings'), i18n('login'), i18n('get_oauth_token')))
             log_utils.log('Error: Current OAuth token is invalid.', log_utils.LOGERROR)
             return False
         else:
             if token_check['token']['client_id'] == self.client_id:
                 if token_check['token']['authorization']:
                     token_scopes = token_check['token']['authorization']['scopes']
                     missing_scopes = [value for value in scopes if value not in token_scopes]
                     if len(missing_scopes) > 0:
                         result = kodi.Dialog().ok(heading=i18n('oauth_token'), line1=i18n('missing_scopes') % missing_scopes,
                                                   line2=i18n('get_new_oauth_token') % (i18n('settings'), i18n('login'), i18n('get_oauth_token')))
                         log_utils.log('Error: Current OAuth token is missing required scopes |%s|' % missing_scopes, log_utils.LOGERROR)
                         return False
                     else:
                         return True
                 else:
                     return False
             else:
                 matches_default = token_check['token']['client_id'] == utils.get_client_id(default=True)
                 message = 'Token created using default Client-ID |%s|' % str(matches_default)
                 log_utils.log('Error: OAuth Client-ID mismatch: %s' % message, log_utils.LOGERROR)
                 if matches_default:
                     result = kodi.Dialog().ok(heading=i18n('oauth_token'), line1=i18n('client_id_mismatch'), line2=i18n('ok_to_resolve'))
                     utils.clear_client_id()
                     self.client_id = utils.get_client_id(default=True)
                     self.queries.CLIENT_ID = self.client_id
                     self.client = oauth.MobileClient(self.client_id)
                 else:
                     result = kodi.Dialog().ok(heading=i18n('oauth_token'), line1=i18n('client_id_mismatch'),
                                               line2=i18n('get_new_oauth_token') % (i18n('settings'), i18n('login'), i18n('get_oauth_token')))
                     return False
Beispiel #10
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()
Beispiel #11
0
 def onPlayBackStopped(self):
     log_utils.log('Player: |onPlayBackStopped|', log_utils.LOGDEBUG)
     self.reset()
Beispiel #12
0
 def __init__(self, *args, **kwargs):
     log_utils.log('Player: Start', log_utils.LOGDEBUG)
     self.reset()
Beispiel #13
0
 def valid_token(self, client_id, token,
                 scopes):  # client_id, token used for unique caching only
     token_check = self.root()
     while True:
         if not token_check['token']['valid']:
             result = kodi.Dialog().ok(
                 heading=i18n('oauth_token'),
                 line1=i18n('invalid_token'),
                 line2=i18n('get_new_oauth_token') %
                 (i18n('settings'), i18n('login'), i18n('get_oauth_token')))
             log_utils.log('Error: Current OAuth token is invalid.',
                           log_utils.LOGERROR)
             return False
         else:
             if token_check['token']['client_id'] == self.client_id:
                 if token_check['token']['authorization']:
                     token_scopes = token_check['token']['authorization'][
                         'scopes']
                     missing_scopes = [
                         value for value in scopes
                         if value not in token_scopes
                     ]
                     if len(missing_scopes) > 0:
                         result = kodi.Dialog().ok(
                             heading=i18n('oauth_token'),
                             line1=i18n('missing_scopes') % missing_scopes,
                             line2=i18n('get_new_oauth_token') %
                             (i18n('settings'), i18n('login'),
                              i18n('get_oauth_token')))
                         log_utils.log(
                             'Error: Current OAuth token is missing required scopes |%s|'
                             % missing_scopes, log_utils.LOGERROR)
                         return False
                     else:
                         return True
                 else:
                     return False
             else:
                 matches_default = token_check['token'][
                     'client_id'] == utils.get_client_id(default=True)
                 message = 'Token created using default Client-ID |%s|' % str(
                     matches_default)
                 log_utils.log(
                     'Error: OAuth Client-ID mismatch: %s' % message,
                     log_utils.LOGERROR)
                 if matches_default:
                     result = kodi.Dialog().ok(
                         heading=i18n('oauth_token'),
                         line1=i18n('client_id_mismatch'),
                         line2=i18n('ok_to_resolve'))
                     utils.clear_client_id()
                     self.client_id = utils.get_client_id(default=True)
                     self.queries.CLIENT_ID = self.client_id
                     self.client = oauth.MobileClient(self.client_id)
                 else:
                     result = kodi.Dialog().ok(
                         heading=i18n('oauth_token'),
                         line1=i18n('client_id_mismatch'),
                         line2=i18n('get_new_oauth_token') %
                         (i18n('settings'), i18n('login'),
                          i18n('get_oauth_token')))
                     return False
Beispiel #14
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()
Beispiel #15
0
 def onPlayBackStopped(self):
     log_utils.log('Player: |onPlayBackStopped|', log_utils.LOGDEBUG)
     self.reset()
Beispiel #16
0
 def __init__(self, *args, **kwargs):
     log_utils.log('Player: Start', log_utils.LOGDEBUG)
     self.reset()