def syncTraktStatus(): try: cachesyncMovies() cachesyncTVShows() control.infoDialog(control.lang(32092)) except: control.infoDialog('Trakt sync failed') pass
def __getTrakt(url, post=None): try: url = urllib_parse.urljoin(BASE_URL, url) post = json.dumps(post) if post else None headers = {'Content-Type': 'application/json', 'trakt-api-key': V2_API_KEY, 'trakt-api-version': 2} if getTraktCredentialsInfo(): headers.update({'Authorization': 'Bearer %s' % control.addon('plugin.video.koditvr').getSetting('trakt.token')}) result = client.request(url, post=post, headers=headers, output='extended', error=True) result = utils.byteify(result) resp_code = result[1] resp_header = result[2] result = result[0] if resp_code in ['423', '500', '502', '503', '504', '520', '521', '522', '524']: log_utils.log('Trakt Error: %s' % str(resp_code)) control.infoDialog('Trakt Error: ' + str(resp_code), sound=True) return elif resp_code in ['429']: log_utils.log('Trakt Rate Limit Reached: %s' % str(resp_code)) control.infoDialog('Trakt Rate Limit Reached: ' + str(resp_code), sound=True) return elif resp_code in ['404']: log_utils.log('Object Not Found : %s' % str(resp_code)) return if resp_code not in ['401', '405']: return result, resp_header koditvr = urllib_parse.urljoin(BASE_URL, '/koditvr/token') opost = {'client_id': V2_API_KEY, 'client_secret': CLIENT_SECRET, 'redirect_uri': REDIRECT_URI, 'grant_type': 'refresh_token', 'refresh_token': control.addon('plugin.video.koditvr').getSetting('trakt.refresh')} result = client.request(koditvr, post=json.dumps(opost), headers=headers) result = utils.json_loads_as_str(result) token, refresh = result['access_token'], result['refresh_token'] print('Info - ' + str(token)) control.addon('plugin.video.koditvr').setSetting(id='trakt.token', value=token) control.addon('plugin.video.koditvr').setSetting(id='trakt.refresh', value=refresh) headers['Authorization'] = 'Bearer %s' % token result = client.request(url, post=post, headers=headers, output='extended', error=True) result = utils.byteify(result) return result[0], result[2] except: log_utils.log('getTrakt Error', 1) pass
def manager(name, imdb, tmdb, content): try: post = {"movies": [{"ids": {"imdb": imdb}}]} if content == 'movie' else {"shows": [{"ids": {"tmdb": tmdb}}]} items = [(control.lang(32516), '/sync/collection')] items += [(control.lang(32517), '/sync/collection/remove')] items += [(control.lang(32518), '/sync/watchlist')] items += [(control.lang(32519), '/sync/watchlist/remove')] items += [(control.lang(32520), '/users/me/lists/%s/items')] result = getTraktAsJson('/users/me/lists') lists = [(i['name'], i['ids']['slug']) for i in result] lists = [lists[i//2] for i in list(range(len(lists)*2))] for i in list(range(0, len(lists), 2)): lists[i] = ((six.ensure_str(control.lang(32521) % lists[i][0])), '/users/me/lists/%s/items' % lists[i][1]) for i in list(range(1, len(lists), 2)): lists[i] = ((six.ensure_str(control.lang(32522) % lists[i][0])), '/users/me/lists/%s/items/remove' % lists[i][1]) items += lists select = control.selectDialog([i[0] for i in items], control.lang(32515)) if select == -1: return elif select == 4: t = control.lang(32520) k = control.keyboard('', t) ; k.doModal() new = k.getText() if k.isConfirmed() else None if (new == None or new == ''): return result = __getTrakt('/users/me/lists', post={"name": new, "privacy": "private"})[0] try: slug = utils.json_loads_as_str(result)['ids']['slug'] except: return control.infoDialog(control.lang(32515), heading=str(name), sound=True, icon='ERROR') result = __getTrakt(items[select][1] % slug, post=post)[0] else: result = __getTrakt(items[select][1], post=post)[0] icon = control.infoLabel('ListItem.Icon') if not result == None else 'ERROR' control.infoDialog(control.lang(32515), heading=str(name), sound=True, icon=icon) except: return