diff --git a/plugin.video.alfa/channels/pelispedia.py b/plugin.video.alfa/channels/pelispedia.py
index 4c7b65b8..e10c382d 100644
--- a/plugin.video.alfa/channels/pelispedia.py
+++ b/plugin.video.alfa/channels/pelispedia.py
@@ -143,7 +143,8 @@ def listado_genero(item):
itemlist = []
- data = httptools.downloadpage(item.url).data
+ # ~ data = httptools.downloadpage(item.url).data
+ data = obtener_data(item.url)
data = re.sub(r"\n|\r|\t|\s{2}| |
|
|
|
|
|-\s", "", data)
if item.extra == "movies":
@@ -180,7 +181,8 @@ def listado_anio(item):
itemlist = []
- data = httptools.downloadpage(item.url).data
+ # ~ data = httptools.downloadpage(item.url).data
+ data = obtener_data(item.url)
data = re.sub(r"\n|\r|\t|\s{2}| |
|
|
|
|
|-\s", "", data)
if item.extra == "movies":
diff --git a/plugin.video.alfa/channels/setting.py b/plugin.video.alfa/channels/setting.py
index 806558e9..a889fe6e 100644
--- a/plugin.video.alfa/channels/setting.py
+++ b/plugin.video.alfa/channels/setting.py
@@ -293,15 +293,22 @@ def submenu_tools(item):
logger.info()
itemlist = list()
- #Herramientas de testeo masivo
+ # Herramientas personalizadas
import os
- test_path = os.path.join(config.get_runtime_path(), "channels/test.py")
- if filetools.exists(test_path):
- itemlist.append(Item(title='Testear canales y servidores ...', channel="test", action="mainlist"))
- itemlist.append(
- Item(channel=CHANNELNAME, action="", title="", folder=False, thumbnail=get_thumb("setting_0.png")))
+ channel_custom = os.path.join(config.get_runtime_path(), 'channels', 'custom.py')
+ if not filetools.exists(channel_custom):
+ user_custom = os.path.join(config.get_data_path(), 'custom.py')
+ if filetools.exists(user_custom):
+ filetools.copy(user_custom, channel_custom, silent=True)
+ if filetools.exists(channel_custom):
+ itemlist.append(Item(channel='custom', action='mainlist', title='Custom Channel'))
+ itemlist.append(Item(channel=CHANNELNAME, action="check_quickfixes", folder=False,
+ title="Comprobar actualizaciones urgentes", plot="Versión actual: %s" % config.get_addon_version() ))
+ itemlist.append(Item(channel=CHANNELNAME, action="", title="", folder=False,
+ thumbnail=get_thumb("setting_0.png")))
+
itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60564), action="", folder=False,
thumbnail=get_thumb("channels.png")))
itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60565), action="conf_tools",
@@ -322,6 +329,13 @@ def submenu_tools(item):
return itemlist
+def check_quickfixes(item):
+ logger.info()
+
+ from platformcode import updater
+ return updater.check_addon_updates(verbose=True)
+
+
def conf_tools(item):
logger.info()
diff --git a/plugin.video.alfa/platformcode/config.py b/plugin.video.alfa/platformcode/config.py
index 227a5262..3e71eecf 100644
--- a/plugin.video.alfa/platformcode/config.py
+++ b/plugin.video.alfa/platformcode/config.py
@@ -15,27 +15,26 @@ __settings__ = xbmcaddon.Addon(id="plugin.video." + PLUGIN_NAME)
__language__ = __settings__.getLocalizedString
-def get_addon_version(linea_inicio=0, total_lineas=2):
+def get_addon_version(with_fix=True):
'''
- Devuelve el número de de versión del addon, obtenido desde el archivo addon.xml
+ Devuelve el número de versión del addon, y opcionalmente número de fix si lo hay
'''
- return __settings__.getAddonInfo('version')
- path = os.path.join(get_runtime_path(), "addon.xml")
- f = open(path, "rb")
- data = []
- for x, line in enumerate(f):
- if x < linea_inicio: continue
- if len(data) == total_lineas: break
- data.append(line)
- f.close()
- data1 = "".join(data)
- #
- aux = re.findall(' 0:
- version = aux[0]
- return version
+ if with_fix:
+ return __settings__.getAddonInfo('version') + get_addon_version_fix()
+ else:
+ return __settings__.getAddonInfo('version')
+def get_addon_version_fix():
+ try:
+ last_fix_json = os.path.join(get_runtime_path(), 'last_fix.json') # información de la versión fixeada del usuario
+ if os.path.exists(last_fix_json):
+ with open(last_fix_json, 'r') as f: data=f.read(); f.close()
+ fix = re.findall('"fix_version"\s*:\s*(\d+)', data)
+ if fix:
+ return '.fix%s' % fix[0]
+ except:
+ pass
+ return ''
def get_platform(full_version=False):
"""
diff --git a/plugin.video.alfa/platformcode/updater.py b/plugin.video.alfa/platformcode/updater.py
new file mode 100644
index 00000000..b5eb4df4
--- /dev/null
+++ b/plugin.video.alfa/platformcode/updater.py
@@ -0,0 +1,145 @@
+# -*- coding: utf-8 -*-
+# --------------------------------------------------------------------------------
+# Updater (kodi)
+# --------------------------------------------------------------------------------
+
+import os
+import time
+import threading
+
+from platformcode import config, logger, platformtools
+
+from core import httptools
+from core import jsontools
+from core import downloadtools
+from core import ziptools
+from core import filetools
+
+
+def check_addon_init():
+ logger.info()
+
+ # Subtarea de monitor. Se activa cada X horas para comprobar si hay FIXES al addon
+ def check_addon_monitor():
+ logger.info()
+
+ # Obtiene el íntervalo entre actualizaciones y si se quieren mensajes
+ try:
+ timer = int(config.get_setting('addon_update_timer')) # Intervalo entre actualizaciones, en Ajustes de Alfa
+ if timer <= 0:
+ return # 0. No se quieren actualizaciones
+ verbose = config.get_setting('addon_update_message')
+ except:
+ timer = 12 # Por defecto cada 12 horas
+ verbose = False # Por defecto, sin mensajes
+ timer = timer * 3600 # Lo pasamos a segundos
+
+ if config.get_platform(True)['num_version'] >= 14: # Si es Kodi, lanzamos el monitor
+ import xbmc
+ monitor = xbmc.Monitor()
+ else: # Lanzamos solo una actualización y salimos
+ check_addon_updates(verbose) # Lanza la actualización
+ return
+
+ while not monitor.abortRequested(): # Loop infinito hasta cancelar Kodi
+
+ check_addon_updates(verbose) # Lanza la actualización
+
+ if monitor.waitForAbort(timer): # Espera el tiempo programado o hasta que cancele Kodi
+ break # Cancelación de Kodi, salimos
+
+ return
+
+ # Lanzamos en Servicio de actualización de FIXES
+ try:
+ threading.Thread(target=check_addon_monitor).start() # Creamos un Thread independiente, hasta el fin de Kodi
+ time.sleep(5) # Dejamos terminar la primera verificación...
+ except: # Si hay problemas de threading, se llama una sola vez
+ try:
+ timer = int(config.get_setting('addon_update_timer')) # Intervalo entre actualizaciones, en Ajustes de Alfa
+ if timer <= 0:
+ return # 0. No se quieren actualizaciones
+ verbose = config.get_setting('addon_update_message')
+ except:
+ verbose = False # Por defecto, sin mensajes
+ pass
+ check_addon_updates(verbose) # Lanza la actualización, en Ajustes de Alfa
+ time.sleep(5) # Dejamos terminar la primera verificación...
+
+ return
+
+
+def check_addon_updates(verbose=False):
+ logger.info()
+
+ ADDON_UPDATES_JSON = 'http://extra.alfa-addon.com/addon_updates/updates.json'
+ ADDON_UPDATES_ZIP = 'http://extra.alfa-addon.com/addon_updates/updates.zip'
+
+ try:
+ last_fix_json = os.path.join(config.get_runtime_path(), 'last_fix.json') # información de la versión fixeada del usuario
+ # Se guarda en get_runtime_path en lugar de get_data_path para que se elimine al cambiar de versión
+
+ # Descargar json con las posibles actualizaciones
+ # -----------------------------------------------
+ data = httptools.downloadpage(ADDON_UPDATES_JSON, timeout=2).data
+ if data == '':
+ logger.info('No se encuentran actualizaciones del addon')
+ if verbose:
+ platformtools.dialog_notification('Alfa ya está actualizado', 'No hay ninguna actualización urgente')
+ return False
+
+ data = jsontools.load(data)
+ if 'addon_version' not in data or 'fix_version' not in data:
+ logger.info('No hay actualizaciones del addon')
+ if verbose:
+ platformtools.dialog_notification('Alfa ya está actualizado', 'No hay ninguna actualización urgente')
+ return False
+
+ # Comprobar versión que tiene instalada el usuario con versión de la actualización
+ # --------------------------------------------------------------------------------
+ current_version = config.get_addon_version(with_fix=False)
+ if current_version != data['addon_version']:
+ logger.info('No hay actualizaciones para la versión %s del addon' % current_version)
+ if verbose:
+ platformtools.dialog_notification('Alfa ya está actualizado', 'No hay ninguna actualización urgente')
+ return False
+
+ if os.path.exists(last_fix_json):
+ lastfix = jsontools.load(filetools.read(last_fix_json))
+ if lastfix['addon_version'] == data['addon_version'] and lastfix['fix_version'] == data['fix_version']:
+ logger.info('Ya está actualizado con los últimos cambios. Versión %s.fix%d' % (data['addon_version'], data['fix_version']))
+ if verbose:
+ platformtools.dialog_notification('Alfa ya está actualizado', 'Versión %s.fix%d' % (data['addon_version'], data['fix_version']))
+ return False
+
+ # Descargar zip con las actualizaciones
+ # -------------------------------------
+ localfilename = os.path.join(config.get_data_path(), 'temp_updates.zip')
+ if os.path.exists(localfilename): os.remove(localfilename)
+
+ downloadtools.downloadfile(ADDON_UPDATES_ZIP, localfilename, silent=True)
+
+ # Descomprimir zip dentro del addon
+ # ---------------------------------
+ unzipper = ziptools.ziptools()
+ unzipper.extract(localfilename, config.get_runtime_path())
+
+ # Borrar el zip descargado
+ # ------------------------
+ os.remove(localfilename)
+
+ # Guardar información de la versión fixeada
+ # -----------------------------------------
+ if 'files' in data: data.pop('files', None)
+ filetools.write(last_fix_json, jsontools.dump(data))
+
+ logger.info('Addon actualizado correctamente a %s.fix%d' % (data['addon_version'], data['fix_version']))
+ if verbose:
+ platformtools.dialog_notification('Alfa actualizado a', 'Versión %s.fix%d' % (data['addon_version'], data['fix_version']))
+ return True
+
+ except:
+ logger.error('Error al comprobar actualizaciones del addon!')
+ if verbose:
+ platformtools.dialog_notification('Alfa actualizaciones', 'Error al comprobar actualizaciones')
+ return False
diff --git a/plugin.video.alfa/resources/settings.xml b/plugin.video.alfa/resources/settings.xml
index 78cb1591..b9b426cc 100644
--- a/plugin.video.alfa/resources/settings.xml
+++ b/plugin.video.alfa/resources/settings.xml
@@ -120,6 +120,11 @@
+
+
+
+
+