Update trakt_tools.py

This commit is contained in:
Intel1
2018-02-08 14:37:38 -05:00
committed by GitHub
parent b0d6b2e32c
commit da8cc6cf3d
+70 -47
View File
@@ -4,19 +4,23 @@
# -*- By the Alfa Develop Group -* # -*- By the Alfa Develop Group -*
import os import os
import xbmc import xbmc
from core import httptools from core import httptools
from core.item import Item
from platformcode.platformtools import logger, config
from core import jsontools from core import jsontools
from core.item import Item
from platformcode import config
from platformcode import logger
from threading import Thread
client_id = "c40ba210716aee87f6a9ddcafafc56246909e5377b623b72c15909024448e89d" client_id = "c40ba210716aee87f6a9ddcafafc56246909e5377b623b72c15909024448e89d"
client_secret = "999164f25832341f0214453bb11c915adb18e9490d6b5e9a707963a5a1bee43e" client_secret = "999164f25832341f0214453bb11c915adb18e9490d6b5e9a707963a5a1bee43e"
def auth_trakt(): def auth_trakt():
item = Item() item = Item()
folder = (config.get_platform() == "plex") folder = (config.get_platform() == "plex")
item.folder=folder item.folder = folder
# Autentificación de cuenta Trakt # Autentificación de cuenta Trakt
headers = {'Content-Type': 'application/json', 'trakt-api-key': client_id, 'trakt-api-version': '2'} headers = {'Content-Type': 'application/json', 'trakt-api-key': client_id, 'trakt-api-version': '2'}
try: try:
@@ -48,7 +52,6 @@ def auth_trakt():
def token_trakt(item): def token_trakt(item):
from platformcode import platformtools from platformcode import platformtools
headers = {'Content-Type': 'application/json', 'trakt-api-key': client_id, 'trakt-api-version': '2'} headers = {'Content-Type': 'application/json', 'trakt-api-key': client_id, 'trakt-api-version': '2'}
@@ -63,8 +66,6 @@ def token_trakt(item):
data = jsontools.load(data) data = jsontools.load(data)
elif item.action == "token_trakt": elif item.action == "token_trakt":
url = "http://api-v2launch.trakt.tv/oauth/device/token" url = "http://api-v2launch.trakt.tv/oauth/device/token"
post = {'code': item.device_code, 'client_id': client_id, 'client_secret': client_secret}
post = jsontools.dump(post)
post = "code=%s&client_id=%s&client_secret=%s" % (item.device_code, client_id, client_secret) post = "code=%s&client_id=%s&client_secret=%s" % (item.device_code, client_id, client_secret)
data = httptools.downloadpage(url, post, headers, replace_headers=True).data data = httptools.downloadpage(url, post, headers, replace_headers=True).data
data = jsontools.load(data) data = jsontools.load(data)
@@ -72,7 +73,8 @@ def token_trakt(item):
import time import time
dialog_auth = platformtools.dialog_progress("Sincronizar con Trakt. No cierres esta ventana", dialog_auth = platformtools.dialog_progress("Sincronizar con Trakt. No cierres esta ventana",
"1. Entra en la siguiente url: %s" % item.verify_url, "1. Entra en la siguiente url: %s" % item.verify_url,
"2. Ingresa este código en la página y acepta: %s" % item.user_code, "2. Ingresa este código en la página y acepta: %s"
% item.user_code,
"3. Espera a que se cierre esta ventana") "3. Espera a que se cierre esta ventana")
# Generalmente cada 5 segundos se intenta comprobar si el usuario ha introducido el código # Generalmente cada 5 segundos se intenta comprobar si el usuario ha introducido el código
@@ -80,7 +82,7 @@ def token_trakt(item):
time.sleep(item.intervalo) time.sleep(item.intervalo)
try: try:
if dialog_auth.iscanceled(): if dialog_auth.iscanceled():
config.set_setting("trakt_sync", 'false' ) config.set_setting("trakt_sync", 'false')
return return
url = "http://api-v2launch.trakt.tv/oauth/device/token" url = "http://api-v2launch.trakt.tv/oauth/device/token"
@@ -128,7 +130,6 @@ def token_trakt(item):
def get_trakt_watched(id_type, mediatype, update=False): def get_trakt_watched(id_type, mediatype, update=False):
logger.info() logger.info()
id_list = [] id_list = []
@@ -151,35 +152,36 @@ def get_trakt_watched(id_type, mediatype, update=False):
if token_auth: if token_auth:
try: try:
token_auth = config.get_setting("token_trakt", "trakt") token_auth = config.get_setting("token_trakt", "trakt")
headers = [['Content-Type', 'application/json'], ['trakt-api-key', client_id], ['trakt-api-version', '2']] headers = [['Content-Type', 'application/json'], ['trakt-api-key', client_id],
['trakt-api-version', '2']]
if token_auth: if token_auth:
headers.append(['Authorization', "Bearer %s" % token_auth]) headers.append(['Authorization', "Bearer %s" % token_auth])
url = "https://api.trakt.tv/sync/watched/%s" % mediatype url = "https://api.trakt.tv/sync/watched/%s" % mediatype
data = httptools.downloadpage(url, headers=headers, replace_headers=True).data data = httptools.downloadpage(url, headers=headers, replace_headers=True).data
watched_dict = jsontools.load(data) watched_dict = jsontools.load(data)
if mediatype == 'shows': if mediatype == 'shows':
dict_show = dict() dict_show = dict()
for item in watched_dict: for item in watched_dict:
temp =[] temp = []
id = str(item['show']['ids']['tmdb']) id_ = str(item['show']['ids']['tmdb'])
season_dict=dict() season_dict = dict()
for season in item['seasons']: for season in item['seasons']:
ep=[] ep = []
number = str(season['number']) number = str(season['number'])
#season_dict = dict() # season_dict = dict()
for episode in season['episodes']: for episode in season['episodes']:
ep.append(str(episode['number'])) ep.append(str(episode['number']))
season_dict[number]=ep season_dict[number] = ep
temp.append(season_dict) temp.append(season_dict)
dict_show[id] = season_dict dict_show[id_] = season_dict
id_dict=dict_show id_dict = dict_show
return id_dict return id_dict
elif mediatype == 'movies': elif mediatype == 'movies':
for item in watched_dict: for item in watched_dict:
id_list.append(str(item['movie']['ids'][id_type])) id_list.append(str(item['movie']['ids'][id_type]))
except: except:
pass pass
@@ -188,14 +190,14 @@ def get_trakt_watched(id_type, mediatype, update=False):
def trakt_check(itemlist): def trakt_check(itemlist):
id_result = '' id_result = ''
#check = u'\u221a' # check = u'\u221a'
check = 'v' check = 'v'
get_sync_from_file() get_sync_from_file()
try: try:
for item in itemlist: for item in itemlist:
info = item.infoLabels info = item.infoLabels
if info != '' and info['mediatype'] in ['movie', 'episode'] and item.channel !='videolibrary': if info != '' and info['mediatype'] in ['movie', 'episode'] and item.channel != 'videolibrary':
mediatype = 'movies' mediatype = 'movies'
id_type = 'tmdb' id_type = 'tmdb'
@@ -206,12 +208,12 @@ def trakt_check(itemlist):
if id_result == '': if id_result == '':
id_result = get_trakt_watched(id_type, mediatype) id_result = get_trakt_watched(id_type, mediatype)
if info['mediatype'] == 'movie': if info['mediatype'] == 'movie':
if info[id_type+'_id'] in id_result: if info[id_type + '_id'] in id_result:
item.title ='[COLOR limegreen][%s][/COLOR] %s' % (check, item.title) item.title = '[COLOR limegreen][%s][/COLOR] %s' % (check, item.title)
elif info['mediatype']=='episode': elif info['mediatype'] == 'episode':
if info[id_type+'_id'] in id_result: if info[id_type + '_id'] in id_result:
id= info[id_type+'_id'] id = info[id_type + '_id']
if info['season'] != '' and info['episode'] != '': if info['season'] != '' and info['episode'] != '':
season = str(info['season']) season = str(info['season'])
@@ -223,38 +225,40 @@ def trakt_check(itemlist):
if episode in season_watched: if episode in season_watched:
item.title = '[B][COLOR limegreen][[I]%s[/I]][/COLOR][/B] %s' % (check, item.title = '[B][COLOR limegreen][[I]%s[/I]][/COLOR][/B] %s' % (check,
item.title) item.title)
else: else:
break break
except: except:
pass pass
return itemlist return itemlist
def get_sync_from_file(): def get_sync_from_file():
logger.info() logger.info()
sync_path = os.path.join(config.get_data_path(),'settings_channels' ,'trakt') sync_path = os.path.join(config.get_data_path(), 'settings_channels', 'trakt')
trakt_node = {} trakt_node = {}
if os.path.exists(sync_path): if os.path.exists(sync_path):
trakt_node = jsontools.get_node_from_file('trakt', "TRAKT") trakt_node = jsontools.get_node_from_file('trakt', "TRAKT")
trakt_node['movies']=get_trakt_watched('tmdb', 'movies') trakt_node['movies'] = get_trakt_watched('tmdb', 'movies')
trakt_node['shows']=get_trakt_watched('tmdb', 'shows') trakt_node['shows'] = get_trakt_watched('tmdb', 'shows')
jsontools.update_node(trakt_node, 'trakt', 'TRAKT') jsontools.update_node(trakt_node, 'trakt', 'TRAKT')
def update_trakt_data(mediatype, trakt_data): def update_trakt_data(mediatype, trakt_data):
logger.info() logger.info()
sync_path = os.path.join(config.get_data_path(), 'settings_channels', 'trakt') sync_path = os.path.join(config.get_data_path(), 'settings_channels', 'trakt')
trakt_node = {}
if os.path.exists(sync_path): if os.path.exists(sync_path):
trakt_node = jsontools.get_node_from_file('trakt', "TRAKT") trakt_node = jsontools.get_node_from_file('trakt', "TRAKT")
trakt_node[mediatype] = trakt_data trakt_node[mediatype] = trakt_data
jsontools.update_node(trakt_node, 'trakt', 'TRAKT') jsontools.update_node(trakt_node, 'trakt', 'TRAKT')
def ask_install_script(): def ask_install_script():
logger.info() logger.info()
import xbmc
from platformcode import platformtools from platformcode import platformtools
respuesta = platformtools.dialog_yesno("Alfa", "Puedes instalar el script de Trakt a continuacíon, " respuesta = platformtools.dialog_yesno("Alfa", "Puedes instalar el script de Trakt a continuacíon, "
@@ -265,5 +269,24 @@ def ask_install_script():
xbmc.executebuiltin("InstallAddon(script.trakt)") xbmc.executebuiltin("InstallAddon(script.trakt)")
return return
else: else:
config.set_setting('install_trakt','false') config.set_setting('install_trakt', 'false')
return return
def wait_for_update_trakt():
logger.info()
t = Thread(update_all)
t.setDaemon(True)
t.start()
t.isAlive()
def update_all():
from time import sleep
logger.info()
sleep(20)
while xbmc.Player().isPlaying():
sleep(20)
for mediatype in ['movies', 'shows']:
trakt_data = get_trakt_watched('tmdb', mediatype, True)
update_trakt_data(mediatype, trakt_data)