some fixes

This commit is contained in:
mac12m99
2019-04-24 23:36:07 +02:00
parent 88b7d79325
commit 04c33ec365
3 changed files with 480 additions and 479 deletions

View File

@@ -1747,483 +1747,484 @@ def web_intervenida(item, data, desactivar=True):
def redirect_clone_newpct1(item, head_nfo=None, it=None, path=False, overwrite=False, lookup=False):
logger.info()
"""
Llamada para redirigir cualquier llamada a un clone de NewPct1 a NewPct1.py, o de una url de un canal caido a una alternativa
Incluye las llamadas estándar del canal y la llamadas externas:
- Play fron Library
- Videolibrary Update
La lógica es reemplazar item.channel por "newpct1" y dejar el nombre del clone en item.category.
De esta forma utiliza siempre el código de NewPct1.py, aunque con las urls y apariencia del clone seleccionado por el usuario.
En el caso de un canal/clone caído o intervenido judicialmente, puede reemplazar el canal en item.channel, o el clone en item.category, y la parte de item.url que se introduzca en una tabla. Esta conversión sólo se realiza si el canal original está inactivo, pero lo realiza siempre para los clones, o si el canal de origen y destino son los mismos.
Este método interroga el .json de NewPct1 para extraer la lista de canales clones. Si item.channel es un clone de NewPct1 y está en esa lista, actualiza item.channel='newpct1'
También en este .json está la tabla para la conversión de canales y urls:
- activo: está o no activa esta entrada
- canal_org: canal o clone de origen
- canal_des: canal o clone de destino (puede ser el mismo)
- url_org: parte de la url a sustituir de canal o clone de origen
- url_des: parte de la url a sustituir de canal o clone de destino
- patron1: expresión Regex aplicable a la url (opcional)
- patron2: expresión Regex aplicable a la url (opcional)
- patron3: expresión Regex aplicable a la url (opcional)
- patron4: expresión Regex aplicable a la url (opcional)
- patron5: expresión Regex aplicable a la url (opcional)
- content_inc: contenido al que aplica esta entrada, o * (item.contentType o item.extra)
- content_exc: contenido que se excluye de esta entrada (item.contentType) (opcional). opción para 'emerg'
- ow_force: indicador para la acción de "videolibrary_service.py". Puede crear la variable item.ow_force:
- force: indica al canal que analize toda la serie y que videolibrary_service la reescriba
- auto: indica a videolibrary_service que la reescriba
- no: no acción para videolibrary_service, solo redirige en visionado de videolibrary
- del: borra las estrucuturas de un determinado canal en videolibrary_service, quizás creadas por errores de un canal
- emerg: funcionalidad muy similar a la de "del". se general dinámicamente cada vez que entra un canal con el estado activado en el .json de "emergency_urls". Permite cargar las urls de emergencia en todos los elementos existentes de la Videoteca para canal afectado
ejemplos:
('1', 'mejortorrent', 'mejortorrent1', 'http://www.mejortorrent.com/', 'https://mejortorrent1.com/', '(http.?:\/\/.*?\/)', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-(?:[^-]+-)([^0-9]+-)', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-(?:[^-]+-)[^0-9]+-\\d+-(Temporada-).html', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-(?:[^-]+-)[^0-9]+-(\\d+)-', '', 'tvshow, season', '', 'force'),
('1', 'mejortorrent', 'mejortorrent1', 'http://www.mejortorrent.com/', 'https://mejortorrent1.com/', '(http.?:\/\/.*?\/)', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-([^.]+).html', '', '', '', 'movie', '', 'force')",
('1', 'torrentrapid', 'torrentlocura', 'http://torrentrapid.com/', 'http://torrentlocura.com/', '', '', '', '', '', '*', '', 'no'),
('1', 'newpct1', '', '', '', '', '', '', '', '', '*', '', 'del'),
('1', 'torrentrapid', 'torrentrapid', '', '', '', '', '', '', '', '*', '1 ó 2', 'emerg'),
La llamada recibe el parámetro Item, el .nfo y los devuleve actualizados, así como opcionalmente el parámetro "overwrite· que puede forzar la reescritura de todos los archivos de la serie, y el parámetro "path" si viene de videolibrary_service. Por último, recibe opcionalmente el parámetro "lookup" si se quiere solo averigurar si habrá migración para ese título, pero sin realizarla.
"""
#logger.debug(item)
#if it != None: logger.debug(it)
if not it:
it = Item()
item_back = item.clone()
it_back = item.clone()
ow_force_param = True
update_stat = 0
delete_stat = 0
canal_org_des_list = []
json_path_list = []
emergency_urls_force = False
status_migration = False
#if item.ow_force == '1': #Ha podido qudar activado de una pasada anteriores
# del item.ow_force
# logger.error('** item.ow_force: ' + item.path) #aviso que ha habido una incidencia
if it.ow_force == '1': #Ha podido quedar activado de una pasada anterior
del it.ow_force
if path and it.infoLabels['mediatype'] == 'tvshow':
try:
nfo = filetools.join(path, '/tvshow.nfo')
filetools.write(nfo, head_nfo + it.tojson()) #escribo el .nfo de la peli por si aborta update
logger.error('** .nfo ACTUALIZADO: it.ow_force: ' + nfo) #aviso que ha habido una incidencia
except:
logger.error('** .nfo ERROR actualizar: it.ow_force: ' + nfo) #aviso que ha habido una incidencia
logger.error(traceback.format_exc())
#Array con los datos de los canales alternativos
#Cargamos en .json de Newpct1 para ver las listas de valores en settings
fail_over_list = channeltools.get_channel_json(channel_py)
for settings in fail_over_list['settings']: #Se recorren todos los settings
if settings['id'] == "clonenewpct1_channels_list": #Encontramos en setting
fail_over_list = settings['default'] #Carga lista de clones
if settings['id'] == "intervenidos_channels_list": #Encontramos en setting
intervencion = settings['default'] #Carga lista de clones y canales intervenidos
#primero tratamos los clones de Newpct1
channel_alt = item.channel
#if item.url and not it.library_urls:
# channel_alt = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').lower() #Salvamos en nombre del canal o clone
# if not channel_alt:
# channel_alt = item.channel
channel = "'%s'" % channel_alt
category = ''
if channel_alt != 'videolibrary':
item.category = channel_alt.capitalize()
category = "'%s'" % channel_alt
channel_py_alt = 'xyz123'
if channel in fail_over_list : #Si es un clone de Newpct1, se actualiza el canal y la categoría
item.channel = channel_py
channel_py_alt = "'%s'" % channel_py
if item.channel_host: #y se borran resto de pasadas anteriores
del item.channel_host
if it.emergency_urls:
item.emergency_urls = it.emergency_urls #Refrescar desde el .nfo
#Analizamos si hay series o películas que migrar, debido a que se ha activado en el .json del canal la opción "guardar"
#"emergency_urls = 1", y hay que calcularla para todos los episodios y película existentes en la Videoteca.
#Si "emergency_urls" está activada para uno o más canales, se verifica en el .nfo del vídeo si ya se ha realizado
#la carga de las urls de emergencia. Sí se ha hecho, se ignora el proceso de conversión. Si no, se convierte por el
#canal en curso cuando hay item.url, o para todos los canales en item.library_urls si no hay un canal específico en curso.
#El mecanismo consiste en generar una regla temporal de migración para cada canal activado. Esta regla actua borrando
#todos los .json de la serie/película. En el caso de la serie, el proceso de actualización de la videoteca los regenerará
#automáticamente. En el caso de peliculas, se general aquí el json actualizado y se marca el .nfo como actualizado.
#Cuando en el .json se activa "Borrar", "emergency_urls = 2", se borran todos los enlaces existentes
#Cuando en el .json se activa "Actualizar", "emergency_urls = 3", se actualizan todos los enlaces existentes
"""
status_migration = regenerate_clones() #TEMPORAL: Reparación de Videoteca con Newpct1
verify_cached_torrents() #TEMPORAL: verificamos si los .torrents son correctos
try: #Si ha habido errores, vemos la lista y los reparamos
json_error_path = filetools.join(config.get_runtime_path(), 'error_cached_torrents.json')
if filetools.exists(json_error_path): #hay erroer que hay que reparar?
from core import jsontools
json_error_file = jsontools.load(filetools.read(json_error_path)) #Leemos la lista de errores
if not json_error_file:
filetools.remove(json_error_path) #si ya no quedan errores, borramos el .json
elif path in json_error_file: #está este títu,o en la lista de errores?
json_error_file.pop(path) #sí. Lo quitamos
if not json_error_file:
filetools.remove(json_error_path) #si ya no quedan errores, borramos el .json
else:
filetools.write(json_error_path, jsontools.dump(json_error_file)) #si quedan, actualizamos el .json
if item.contentType == 'movie': #si es una pelicula, forzamos su actualización
emergency_urls_force = True
else: #si es una serie, que regenere los episodios que faltan (en error)
item.ow_force = '1' #... de todas las temporadas
except:
logger.error('Error en el proceso de REPARACION de vídeos con .torrents dañados')
logger.error(traceback.format_exc())
#Arreglo temporal para Newpct1
try:
if channel in fail_over_list or channel_alt == 'videolibrary':
channel_bis = channel_py
if not item.url and it.library_urls and channel_alt == 'videolibrary':
for canal_vid, url_vid in it.library_urls.items(): #Se recorre "item.library_urls" para buscar canales candidatos
canal_vid_alt = "'%s'" % canal_vid
if canal_vid_alt in fail_over_list: #Se busca si es un clone de newpct1
channel_bis = channel_py
channel_alt = canal_vid
channel = "'%s'" % channel_alt
break
else:
channel_bis = canal_vid
if channel_bis == channel_py and config.get_setting("emergency_urls", channel_bis) == 1 and config.get_setting("emergency_urls_torrents", channel_bis) and item.emergency_urls and item.emergency_urls.get(channel_alt, False):
raiz, carpetas_series, ficheros = filetools.walk(path).next()
objetivo = '[%s]_01.torrent' % channel_alt
encontrado = False
for fichero in ficheros:
if objetivo in fichero:
encontrado = True
break
if not encontrado:
logger.error('REGENERANDO: ' + str(item.emergency_urls))
item.emergency_urls.pop(channel_alt, None)
except:
logger.error('Error en el proceso de RECARGA de URLs de Emergencia')
logger.error(traceback.format_exc())
"""
try:
if item.url and not channel_py in item.url and it.emergency_urls: #Viene de actualización de videoteca de series
#Analizamos si el canal ya tiene las urls de emergencia: guardar o borrar
if (config.get_setting("emergency_urls", item.channel) == 1 and (not item.emergency_urls or (item.emergency_urls and not item.emergency_urls.get(channel_alt, False)))) or (config.get_setting("emergency_urls", item.channel) == 2 and item.emergency_urls.get(channel_alt, False)) or config.get_setting("emergency_urls", item.channel) == 3 or emergency_urls_force:
intervencion += ", ('1', '%s', '%s', '', '', '', '', '', '', '', '*', '%s', 'emerg')" % (channel_alt, channel_alt, config.get_setting("emergency_urls", item.channel))
elif it.library_urls: #Viene de "listar peliculas´"
for canal_vid, url_vid in it.library_urls.items(): #Se recorre "item.library_urls" para buscar canales candidatos
if canal_vid == channel_py: #Si tiene Newcpt1 en canal, es un error
continue
canal_vid_alt = "'%s'" % canal_vid
if canal_vid_alt in fail_over_list: #Se busca si es un clone de newpct1
channel_bis = channel_py
else:
channel_bis = canal_vid
#Analizamos si el canal ya tiene las urls de emergencia: guardar o borrar
if (config.get_setting("emergency_urls", channel_bis) == 1 and (not it.emergency_urls or (it.emergency_urls and not it.emergency_urls.get(canal_vid, False)))) or (config.get_setting("emergency_urls", channel_bis) == 2 and it.emergency_urls.get(canal_vid, False)) or config.get_setting("emergency_urls", channel_bis) == 3 or emergency_urls_force:
intervencion += ", ('1', '%s', '%s', '', '', '', '', '', '', '', '*', '%s', 'emerg')" % (canal_vid, canal_vid, config.get_setting("emergency_urls", channel_bis))
except:
logger.error('Error en el proceso de ALMACENAMIENTO de URLs de Emergencia')
logger.error(traceback.format_exc())
#Ahora tratamos las webs intervenidas, tranformamos la url, el nfo y borramos los archivos obsoletos de la serie
if (channel not in intervencion and channel_py_alt not in intervencion and category not in intervencion and channel_alt != 'videolibrary') or not item.infoLabels or status_migration: #lookup o migración
return (item, it, overwrite) #... el canal/clone está listado
import ast
intervencion_list = ast.literal_eval(intervencion) #Convertir a Array el string
#logger.debug(intervencion_list)
if lookup == True:
overwrite = False #Solo avisamos si hay cambios
i = 0
for activo, canal_org, canal_des, url_org, url_des, patron1, patron2, patron3, patron4, patron5, content_inc, content_exc, ow_force in intervencion_list:
i += 1
opt = ''
#Es esta nuestra entrada?
if activo == '1' and (canal_org == channel_alt or canal_org == item.category.lower() or channel_alt == 'videolibrary' or ow_force == 'del' or ow_force == 'emerg'):
if item.url:
logger.debug('INTERV. LIST: ' + str(intervencion_list[i-1]) + ' / CHANNEL: ' + str(channel_alt) + ' / URL: ' + str(item.url))
if ow_force == 'del' or ow_force == 'emerg': #Si es un borrado de estructuras erroneas, hacemos un proceso aparte
canal_des_def = canal_des #Si hay canal de sustitución para item.library_urls, lo usamos
if not canal_des_def and canal_org in item.library_urls and len(item.library_urls) == 1: #Si no, lo extraemos de la url
canal_des_def = scrapertools.find_single_match(item.library_urls[canal_org], 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').lower() #salvamos la url actual de la estructura a borrar
url_total = ''
if item.url:
url_total = item.url #Si existe item.url, lo salvamos para futuro uso
if item.library_urls and canal_org in item.library_urls: #Si existe una entrada con el canal a borrar, lo procesamos
if lookup == True: #Queremos que el canal solo visualice sin migración?
overwrite = True #Avisamos que hay cambios
continue
logger.error('** REGLA: ' + canal_org + ', ' + canal_des+ ', ' + ow_force)
logger.error('item.library_urls PREVIA: ' + str(item.library_urls))
url_total = item.library_urls[canal_org] #salvamos la url actual de la estructura a borrar
url_total_status = False
if len(item.library_urls) == 1 or canal_des: #si el nuevo canal no existe ya...
item.library_urls.update({canal_des_def: url_total}) #restauramos la url con el nuevo canal
url_total_status = True #marcamos esta url como válida
overwrite = True #Le decimos que sobreescriba todos los .jsons
item.ow_force = '1' #Le decimos que revise todas las temporadas
if len(item.library_urls) > 1 and ow_force == 'del':
item.library_urls.pop(canal_org, None) #borramos la url del canal a borrar
overwrite = True #Le decimos que sobreescriba todos los .jsons
item.ow_force = '1' #Le decimos que revise todas las temporadas
if it.library_urls:
it.library_urls = item.library_urls #lo salvamos en el .nfo, si lo hay
if item.url and item.url == url_total and url_total_status == False: #si la url es la del canal borrado...
for canal_vid, url_vid in item.library_urls.items():
canal_vid_alt = "'%s'" % canal_vid
if canal_vid_alt not in intervencion: #... la sustituimos por la primera válida
item.url = url_vid
break
if canal_vid_alt in fail_over_list: #Si es un clone de Newpct1, salvamos la nueva categoría
item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').lower() #Salvamos categoría
else:
item.category = canal_vid.capitalize() #si no, salvamos nueva categoría
logger.error('item.library_urls ACTUALIZADA: ' + str(item.library_urls))
if lookup == False: #si es migración completa...
delete_stat += 1 #Ya hemos actualizado algo, o habrá que hacerlo...
if ow_force == 'emerg': opt = content_exc #Salvamos la opción de Guardar o Borrar enlaces
canal_org_des_list += [(canal_org, canal_des, url_total, opt, ow_force)] #salvamos el resultado para su proceso
else:
if channel_alt == 'videolibrary': #Viene de videolibrary.list_movies: IMPRESCINDIBLE
for canal_vid, url_vid in item.library_urls.items():
if canal_org != canal_vid: #Miramos si canal_org de la regla está en item.library_urls
continue
else:
channel_alt = canal_org #Sí, ponermos el nombre del canal de origen
channel_b = "'%s'" % canal_org
if channel_b in fail_over_list: #Si es un clone de Newpct1, se actualiza a newpct1
channel_alt = channel_py
if channel_alt == 'videolibrary':
continue
if item.contentType == "list": #Si viene de Videolibrary, le cambiamos ya el canal
if item.channel != channel_py:
item.channel = canal_des #Cambiamos el canal. Si es clone, lo hace el canal
continue #Salimos sin hacer nada más. item está casi vacío
if item.contentType not in content_inc and "*" not in content_inc: #Está el contenido el la lista de incluidos
continue
if item.contentType in content_exc: #Está el contenido excluido?
continue
channel_enabled = 0
channel_enabled_alt = 1
if item.channel != channel_py:
try:
if channeltools.is_enabled(channel_alt): channel_enabled = 1 #Verificamos que el canal esté inactivo
if config.get_setting('enabled', channel_alt) == False: channel_enabled_alt = 0
channel_enabled = channel_enabled * channel_enabled_alt #Si está inactivo en algún sitio, tomamos eso
except:
pass
if channel_enabled == 1 and canal_org != canal_des: #Si el canal está activo, puede ser solo...
continue #... una intervención que afecte solo a una región
if ow_force == 'no' and it.library_urls: #Esta regla solo vale para findvideos...
continue #... salidmos si estamos actualizando
if lookup == True: #Queremos que el canal solo visualice sin migración?
if ow_force != 'no':
overwrite = True #Avisamos que hay cambios
continue #Salimos sin tocar archivos
url_total = ''
if item.url:
url_total = item.url
elif not item.url and item.library_urls:
url_total = item.library_urls[canal_org]
url_total = url_total.replace(url_org, url_des) #reemplazamos una parte de url
url = ''
if patron1: #Hay expresión regex?
url += scrapertools.find_single_match(url_total, patron1) #La aplicamos a url
if patron2: #Hay más expresión regex?
url += scrapertools.find_single_match(url_total, patron2) #La aplicamos a url
if patron3: #Hay más expresión regex?
url += scrapertools.find_single_match(url_total, patron3) #La aplicamos a url
if patron4: #Hay más expresión regex?
url += scrapertools.find_single_match(url_total, patron4) #La aplicamos a url
if patron5: #Hay más expresión regex?
url += scrapertools.find_single_match(url_total, patron5) #La aplicamos a url
if url:
url_total = url #Guardamos la suma de los resultados intermedios
if item.channel == channel_py or channel in fail_over_list: #Si es Newpct1...
if item.contentType == "tvshow":
url_total = re.sub(r'\/\d+\/?$', '', url_total) #parece que con el título encuentra la serie, normalmente...
update_stat += 1 #Ya hemos actualizado algo
canal_org_des_list += [(canal_org, canal_des, url_total, opt, ow_force)] #salvamos el resultado para su proceso
if update_stat > 0 or delete_stat > 0: #Ha habido alguna actualización o borrado? Entonces salvamos
if (update_stat > 0 and path != False) or item.ow_force == '1':
logger.error('** Lista de Actualizaciones a realizar: ' + str(canal_org_des_list))
for canal_org_def, canal_des_def, url_total, opt_def, ow_force_def in canal_org_des_list: #pasamos por todas las "parejas" cambiadas
url_total_def = url_total
if ow_force_def != 'del' and ow_force_def != 'emerg':
if item.url:
item.url = url_total #Salvamos la url convertida
if item.library_urls:
item.library_urls.pop(canal_org_def, None)
item.library_urls.update({canal_des_def: url_total})
it.library_urls = item.library_urls
if item.channel != channel_py and item.channel != 'videolibrary':
item.channel = canal_des_def #Cambiamos el canal. Si es clone, lo hace el canal
if channel_alt == item.category.lower(): #Actualizamos la Categoría y si la tenía
item.category = item.channel.capitalize()
if ow_force_def == 'force' and item.contentType != 'movie': #Queremos que el canal revise la serie entera?
item.ow_force = '1' #Se lo decimos
if ow_force_def in ['force', 'auto']: #Sobreescribir la series?
overwrite = True #Sí, lo marcamos
if it.library_urls and path != False and ow_force_def != 'no': #Continuamos si hay .nfo, path, y queremos actualizarlo
item.update_next = '1'
del item.update_next #Borramos estos campos para forzar la actualización ya
it.update_next = '1'
del it.update_next
#Verificamos que las webs de los canales estén activas antes de borrar los .json, para asegurar que se pueden regenerar
i = 0
canal_org_des_list_ALT = [] #Creamos esta lista para salvar las parejas
canal_org_des_list_ALT.extend(canal_org_des_list) #... y borrar de la original las web caidas
for canal_org_def, canal_des_def, url_total, opt_def, ow_force_def in canal_org_des_list_ALT: #pasamos por las "parejas" a borrar
if "magnet:" in url_total or type(url_total) != str: #Si la url es un Magnet, o es una lista, pasamos
i += 1
continue
try:
response = httptools.downloadpage(url_total)
except:
logger.error(traceback.format_exc())
logger.error('Web ' + canal_des_def.upper() + ' ERROR. Regla no procesada: ' + str(canal_org_des_list[i]))
del canal_org_des_list[i] #Borro regla
continue #... y paso a la siguiente
if not response:
logger.error('Web ' + canal_des_def.upper() + ' INACTIVA. Regla no procesada: ' + str(canal_org_des_list[i]))
del canal_org_des_list[i] #Borro regla
continue #... y paso a la siguiente
i += 1
if i == 0:
item = item_back.clone() #Restauro las imágenes inciales
it = it_back.clone()
item.torrent_caching_fail = True #Marcamos el proceso como fallido
return (item, it, False)
# Listamos todos los ficheros de la serie, asi evitamos tener que comprobar si existe uno por uno
canal_erase_list = []
from core import videolibrarytools
raiz, carpetas_series, ficheros = filetools.walk(path).next()
ficheros = [filetools.join(path, f) for f in ficheros] #Almacenamos la lista de archivos de la carpeta
#logger.error(ficheros)
for archivo in ficheros:
for canal_org_def, canal_des_def, url_total, opt_def, ow_force_def in canal_org_des_list: #pasamos por las "parejas" a borrar
canal_erase = '[%s]' % canal_org_def
canal_erase_alt = "'%s'" % canal_org_def
canal_new = '[%s]' % canal_des_def
archivo_alt = "'%s'" % scrapertools.find_single_match(archivo, '\[(\w+)\].json')
if archivo_alt == "''": archivo_alt = "'xyz123'"
#logger.error(canal_erase + canal_new + archivo + archivo_alt)
#Borramos los .json que sean de los canal afectados, incluidos todos los de los clones de newpct1 si éste es el canal
if canal_erase in archivo or (ow_force_def == 'emerg' and canal_erase_alt in fail_over_list and archivo_alt in fail_over_list and it.contentType != 'movie'):
if canal_des_def and it.contentType == 'movie' and not '.torrent' in archivo: #Si es película ...
item_json = ''
item_json = Item().fromjson(filetools.read(archivo)) #leemos el .json ante de borrarlo para salvar...
if not item_json: #error al leer el .json. Algo no funciona...
continue
title = item_json.title #... el título con su formato
language = item_json.language #... los idiomas, que no están en el .nfo
wanted = item_json.wanted #... y wanted con el título original
json_path = archivo.replace(canal_erase, canal_new) #Salvamos el path del .json para luego crearlo
json_path_list += [(canal_org_def, canal_des_def, url_total, json_path, title, language, wanted, ow_force_def, opt_def, archivo)]
filetools.remove(archivo) #Borramos el .json y el .torrent
logger.error('** BORRAMOS: ' + str(archivo))
if ow_force_def == 'del' or ow_force_def == 'emerg': #Si la función es 'del' or 'emerg' ...
overwrite = True #Le decimos que sobreescriba todos los .jsons
item.ow_force = '1' #Le decimos que revise todas las temporadas
#Si se ha cambiado algo, se actualizan los .nfo
if it.nfo: del it.nfo #Borramos variables innecesarias
if it.path: del it.path #Borramos variables innecesarias
if it.text_color: del it.text_color #Borramos variables innecesarias
if item.contentType == "movie" and ".nfo" in archivo: #Para películas
archivo_nfo = archivo #Guardamos el path del .nfo para futuro uso
if it.ow_force: del it.ow_force
filetools.write(archivo, head_nfo + it.tojson()) #escribo el .nfo de la peli
if item.contentType != "movie" and "tvshow.nfo" in archivo:
archivo_nfo = archivo #Guardamos el path del .nfo para futuro uso
filetools.write(archivo, head_nfo + it.tojson()) #escribo el tvshow.nfo por si aborta update
#Aquí convertimos las películas. Después de borrado el .json, dejamos que videolibrarytools lo regenere
if item.contentType == "movie": #Dejamos que regenere el archivo .json
item_movie = item.clone()
if item_movie.ow_force: del item_movie.ow_force
item_movie.update_last = '1'
if item_movie.update_last: del item_movie.update_last
if item_movie.library_playcounts: del item_movie.library_playcounts #Borramos lo que no es necesario en el .json
if item_movie.library_urls: del item_movie.library_urls
if item_movie.nfo: del item_movie.nfo
if item_movie.path: del item_movie.path
if item_movie.strm_path: del item_movie.strm_path
if item_movie.text_color: del item_movie.text_color
if item_movie.channel_host: del item_movie.channel_host
if not item_movie.context: item_movie.context = "['buscar_trailer']"
if not item_movie.extra: item_movie.extra = "peliculas"
if json_path_list:
logger.error('** .json LIST: ' + str(json_path_list))
for canal_org_def, canal_des_def, url_total, json_path, title, language, wanted, ow_force_def, opt_def, archivo in json_path_list: #pasamos por todos canales
logger.error('** ESCRIBIMOS: ' + json_path)
item_movie.emergency_urls = False
del item_movie.emergency_urls
item_movie.channel = canal_des_def #mombre del canal migrado
if not item_movie.category: item_movie.category = canal_des_def.capitalize() #categoría
item_movie.url = url_total #url migrada
if title: item_movie.title = title #restaurmos el título con formato
if language: item_movie.language = language #restaurmos los idiomas
if wanted: item_movie.wanted = wanted #restaurmos wanted
item_movie.added_replacing = canal_org_def #guardamos la traza del canal reemplazado
if ow_force_def == 'emerg' and opt_def in ['1', '3']: #Si era una op. para añadir/actualizar urls de emergencia ...
item_movie = videolibrarytools.emergency_urls(item_movie, None, archivo) #... ejecutamos "findvideos" del canal para obtenerlas
if item_movie.channel_host: del item_movie.channel_host
if item_movie.unify: del item_movie.unify
if item_movie.extra2: del item_movie.extra2
if item_movie.emergency_urls: #... si las hay ...
if it.emergency_urls and not isinstance(it.emergency_urls, dict):
del it.emergency_urls
if not it.emergency_urls: #... lo actualizamos en el .nfo
it.emergency_urls = dict() #... iniciamos la variable si no existe
it.emergency_urls.update({canal_des_def: True}) #... se marca como activo
if it.ow_force: del it.ow_force
filetools.write(archivo_nfo, head_nfo + it.tojson()) #actualizo el .nfo de la peli
else:
logger.error('Error en FINDVIDEOS: ' + archivo + ' / Regla: ' + canal_org_def + ', ' + opt_def + ', ' + ow_force_def)
if ow_force_def == 'emerg' and opt_def == '2': #Si era una operación para borrar urls de emergencia ...
if it.emergency_urls and not isinstance(it.emergency_urls, dict):
del it.emergency_urls
if it.emergency_urls and it.emergency_urls.get(item_movie.channel, False):
it.emergency_urls.pop(item_movie.channel, None) #borramos la entrada del .nfo
if it.ow_force: del it.ow_force
filetools.write(archivo_nfo, head_nfo + it.tojson()) #actualizo el .nfo de la peli
filetools.write(json_path, item_movie.tojson()) #Salvamos el nuevo .json de la película
if (update_stat > 0 and path != False and ow_force_def in ['force', 'auto']) or item.ow_force == '1' or len(json_path_list) > 0:
logger.error('ITEM cambiado')
if it.emergency_urls:
logger.error(it.emergency_urls)
logger.error(item)
return (item, it, overwrite)
# logger.info()
#
# """
#
# Llamada para redirigir cualquier llamada a un clone de NewPct1 a NewPct1.py, o de una url de un canal caido a una alternativa
# Incluye las llamadas estándar del canal y la llamadas externas:
# - Play fron Library
# - Videolibrary Update
#
# La lógica es reemplazar item.channel por "newpct1" y dejar el nombre del clone en item.category.
# De esta forma utiliza siempre el código de NewPct1.py, aunque con las urls y apariencia del clone seleccionado por el usuario.
#
# En el caso de un canal/clone caído o intervenido judicialmente, puede reemplazar el canal en item.channel, o el clone en item.category, y la parte de item.url que se introduzca en una tabla. Esta conversión sólo se realiza si el canal original está inactivo, pero lo realiza siempre para los clones, o si el canal de origen y destino son los mismos.
#
# Este método interroga el .json de NewPct1 para extraer la lista de canales clones. Si item.channel es un clone de NewPct1 y está en esa lista, actualiza item.channel='newpct1'
#
# También en este .json está la tabla para la conversión de canales y urls:
# - activo: está o no activa esta entrada
# - canal_org: canal o clone de origen
# - canal_des: canal o clone de destino (puede ser el mismo)
# - url_org: parte de la url a sustituir de canal o clone de origen
# - url_des: parte de la url a sustituir de canal o clone de destino
# - patron1: expresión Regex aplicable a la url (opcional)
# - patron2: expresión Regex aplicable a la url (opcional)
# - patron3: expresión Regex aplicable a la url (opcional)
# - patron4: expresión Regex aplicable a la url (opcional)
# - patron5: expresión Regex aplicable a la url (opcional)
# - content_inc: contenido al que aplica esta entrada, o * (item.contentType o item.extra)
# - content_exc: contenido que se excluye de esta entrada (item.contentType) (opcional). opción para 'emerg'
# - ow_force: indicador para la acción de "videolibrary_service.py". Puede crear la variable item.ow_force:
# - force: indica al canal que analize toda la serie y que videolibrary_service la reescriba
# - auto: indica a videolibrary_service que la reescriba
# - no: no acción para videolibrary_service, solo redirige en visionado de videolibrary
# - del: borra las estrucuturas de un determinado canal en videolibrary_service, quizás creadas por errores de un canal
# - emerg: funcionalidad muy similar a la de "del". se general dinámicamente cada vez que entra un canal con el estado activado en el .json de "emergency_urls". Permite cargar las urls de emergencia en todos los elementos existentes de la Videoteca para canal afectado
# ejemplos:
# ('1', 'mejortorrent', 'mejortorrent1', 'http://www.mejortorrent.com/', 'https://mejortorrent1.com/', '(http.?:\/\/.*?\/)', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-(?:[^-]+-)([^0-9]+-)', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-(?:[^-]+-)[^0-9]+-\\d+-(Temporada-).html', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-(?:[^-]+-)[^0-9]+-(\\d+)-', '', 'tvshow, season', '', 'force'),
# ('1', 'mejortorrent', 'mejortorrent1', 'http://www.mejortorrent.com/', 'https://mejortorrent1.com/', '(http.?:\/\/.*?\/)', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-([^.]+).html', '', '', '', 'movie', '', 'force')",
# ('1', 'torrentrapid', 'torrentlocura', 'http://torrentrapid.com/', 'http://torrentlocura.com/', '', '', '', '', '', '*', '', 'no'),
# ('1', 'newpct1', '', '', '', '', '', '', '', '', '*', '', 'del'),
# ('1', 'torrentrapid', 'torrentrapid', '', '', '', '', '', '', '', '*', '1 ó 2', 'emerg'),
#
# La llamada recibe el parámetro Item, el .nfo y los devuleve actualizados, así como opcionalmente el parámetro "overwrite· que puede forzar la reescritura de todos los archivos de la serie, y el parámetro "path" si viene de videolibrary_service. Por último, recibe opcionalmente el parámetro "lookup" si se quiere solo averigurar si habrá migración para ese título, pero sin realizarla.
#
# """
# #logger.debug(item)
# #if it != None: logger.debug(it)
# if not it:
# it = Item()
# item_back = item.clone()
# it_back = item.clone()
# ow_force_param = True
# update_stat = 0
# delete_stat = 0
# canal_org_des_list = []
# json_path_list = []
# emergency_urls_force = False
# status_migration = False
#
# #if item.ow_force == '1': #Ha podido qudar activado de una pasada anteriores
# # del item.ow_force
# # logger.error('** item.ow_force: ' + item.path) #aviso que ha habido una incidencia
# if it.ow_force == '1': #Ha podido quedar activado de una pasada anterior
# del it.ow_force
# if path and it.infoLabels['mediatype'] == 'tvshow':
# try:
# nfo = filetools.join(path, '/tvshow.nfo')
# filetools.write(nfo, head_nfo + it.tojson()) #escribo el .nfo de la peli por si aborta update
# logger.error('** .nfo ACTUALIZADO: it.ow_force: ' + nfo) #aviso que ha habido una incidencia
# except:
# logger.error('** .nfo ERROR actualizar: it.ow_force: ' + nfo) #aviso que ha habido una incidencia
# logger.error(traceback.format_exc())
#
# #Array con los datos de los canales alternativos
# #Cargamos en .json de Newpct1 para ver las listas de valores en settings
# fail_over_list = channeltools.get_channel_json(channel_py)
# for settings in fail_over_list['settings']: #Se recorren todos los settings
# if settings['id'] == "clonenewpct1_channels_list": #Encontramos en setting
# fail_over_list = settings['default'] #Carga lista de clones
# if settings['id'] == "intervenidos_channels_list": #Encontramos en setting
# intervencion = settings['default'] #Carga lista de clones y canales intervenidos
#
# #primero tratamos los clones de Newpct1
# channel_alt = item.channel
# #if item.url and not it.library_urls:
# # channel_alt = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').lower() #Salvamos en nombre del canal o clone
# # if not channel_alt:
# # channel_alt = item.channel
# channel = "'%s'" % channel_alt
# category = ''
# if channel_alt != 'videolibrary':
# item.category = channel_alt.capitalize()
# category = "'%s'" % channel_alt
# channel_py_alt = 'xyz123'
# if channel in fail_over_list : #Si es un clone de Newpct1, se actualiza el canal y la categoría
# item.channel = channel_py
# channel_py_alt = "'%s'" % channel_py
# if item.channel_host: #y se borran resto de pasadas anteriores
# del item.channel_host
#
# if it.emergency_urls:
# item.emergency_urls = it.emergency_urls #Refrescar desde el .nfo
#
# #Analizamos si hay series o películas que migrar, debido a que se ha activado en el .json del canal la opción "guardar"
# #"emergency_urls = 1", y hay que calcularla para todos los episodios y película existentes en la Videoteca.
# #Si "emergency_urls" está activada para uno o más canales, se verifica en el .nfo del vídeo si ya se ha realizado
# #la carga de las urls de emergencia. Sí se ha hecho, se ignora el proceso de conversión. Si no, se convierte por el
# #canal en curso cuando hay item.url, o para todos los canales en item.library_urls si no hay un canal específico en curso.
# #El mecanismo consiste en generar una regla temporal de migración para cada canal activado. Esta regla actua borrando
# #todos los .json de la serie/película. En el caso de la serie, el proceso de actualización de la videoteca los regenerará
# #automáticamente. En el caso de peliculas, se general aquí el json actualizado y se marca el .nfo como actualizado.
# #Cuando en el .json se activa "Borrar", "emergency_urls = 2", se borran todos los enlaces existentes
# #Cuando en el .json se activa "Actualizar", "emergency_urls = 3", se actualizan todos los enlaces existentes
#
# """
# status_migration = regenerate_clones() #TEMPORAL: Reparación de Videoteca con Newpct1
#
# verify_cached_torrents() #TEMPORAL: verificamos si los .torrents son correctos
# try: #Si ha habido errores, vemos la lista y los reparamos
# json_error_path = filetools.join(config.get_runtime_path(), 'error_cached_torrents.json')
# if filetools.exists(json_error_path): #hay erroer que hay que reparar?
# from core import jsontools
# json_error_file = jsontools.load(filetools.read(json_error_path)) #Leemos la lista de errores
# if not json_error_file:
# filetools.remove(json_error_path) #si ya no quedan errores, borramos el .json
# elif path in json_error_file: #está este títu,o en la lista de errores?
# json_error_file.pop(path) #sí. Lo quitamos
# if not json_error_file:
# filetools.remove(json_error_path) #si ya no quedan errores, borramos el .json
# else:
# filetools.write(json_error_path, jsontools.dump(json_error_file)) #si quedan, actualizamos el .json
# if item.contentType == 'movie': #si es una pelicula, forzamos su actualización
# emergency_urls_force = True
# else: #si es una serie, que regenere los episodios que faltan (en error)
# item.ow_force = '1' #... de todas las temporadas
# except:
# logger.error('Error en el proceso de REPARACION de vídeos con .torrents dañados')
# logger.error(traceback.format_exc())
#
# #Arreglo temporal para Newpct1
# try:
# if channel in fail_over_list or channel_alt == 'videolibrary':
# channel_bis = channel_py
# if not item.url and it.library_urls and channel_alt == 'videolibrary':
# for canal_vid, url_vid in it.library_urls.items(): #Se recorre "item.library_urls" para buscar canales candidatos
# canal_vid_alt = "'%s'" % canal_vid
# if canal_vid_alt in fail_over_list: #Se busca si es un clone de newpct1
# channel_bis = channel_py
# channel_alt = canal_vid
# channel = "'%s'" % channel_alt
# break
# else:
# channel_bis = canal_vid
# if channel_bis == channel_py and config.get_setting("emergency_urls", channel_bis) == 1 and config.get_setting("emergency_urls_torrents", channel_bis) and item.emergency_urls and item.emergency_urls.get(channel_alt, False):
# raiz, carpetas_series, ficheros = filetools.walk(path).next()
# objetivo = '[%s]_01.torrent' % channel_alt
# encontrado = False
# for fichero in ficheros:
# if objetivo in fichero:
# encontrado = True
# break
# if not encontrado:
# logger.error('REGENERANDO: ' + str(item.emergency_urls))
# item.emergency_urls.pop(channel_alt, None)
# except:
# logger.error('Error en el proceso de RECARGA de URLs de Emergencia')
# logger.error(traceback.format_exc())
# """
#
# try:
# if item.url and not channel_py in item.url and it.emergency_urls: #Viene de actualización de videoteca de series
# #Analizamos si el canal ya tiene las urls de emergencia: guardar o borrar
# if (config.get_setting("emergency_urls", item.channel) == 1 and (not item.emergency_urls or (item.emergency_urls and not item.emergency_urls.get(channel_alt, False)))) or (config.get_setting("emergency_urls", item.channel) == 2 and item.emergency_urls.get(channel_alt, False)) or config.get_setting("emergency_urls", item.channel) == 3 or emergency_urls_force:
# intervencion += ", ('1', '%s', '%s', '', '', '', '', '', '', '', '*', '%s', 'emerg')" % (channel_alt, channel_alt, config.get_setting("emergency_urls", item.channel))
#
# elif it.library_urls: #Viene de "listar peliculas´"
# for canal_vid, url_vid in it.library_urls.items(): #Se recorre "item.library_urls" para buscar canales candidatos
# if canal_vid == channel_py: #Si tiene Newcpt1 en canal, es un error
# continue
# canal_vid_alt = "'%s'" % canal_vid
# if canal_vid_alt in fail_over_list: #Se busca si es un clone de newpct1
# channel_bis = channel_py
# else:
# channel_bis = canal_vid
# #Analizamos si el canal ya tiene las urls de emergencia: guardar o borrar
# if (config.get_setting("emergency_urls", channel_bis) == 1 and (not it.emergency_urls or (it.emergency_urls and not it.emergency_urls.get(canal_vid, False)))) or (config.get_setting("emergency_urls", channel_bis) == 2 and it.emergency_urls.get(canal_vid, False)) or config.get_setting("emergency_urls", channel_bis) == 3 or emergency_urls_force:
# intervencion += ", ('1', '%s', '%s', '', '', '', '', '', '', '', '*', '%s', 'emerg')" % (canal_vid, canal_vid, config.get_setting("emergency_urls", channel_bis))
# except:
# logger.error('Error en el proceso de ALMACENAMIENTO de URLs de Emergencia')
# logger.error(traceback.format_exc())
#
# #Ahora tratamos las webs intervenidas, tranformamos la url, el nfo y borramos los archivos obsoletos de la serie
# if (channel not in intervencion and channel_py_alt not in intervencion and category not in intervencion and channel_alt != 'videolibrary') or not item.infoLabels or status_migration: #lookup o migración
# return (item, it, overwrite) #... el canal/clone está listado
#
# import ast
# intervencion_list = ast.literal_eval(intervencion) #Convertir a Array el string
# #logger.debug(intervencion_list)
#
# if lookup == True:
# overwrite = False #Solo avisamos si hay cambios
# i = 0
# for activo, canal_org, canal_des, url_org, url_des, patron1, patron2, patron3, patron4, patron5, content_inc, content_exc, ow_force in intervencion_list:
# i += 1
# opt = ''
# #Es esta nuestra entrada?
# if activo == '1' and (canal_org == channel_alt or canal_org == item.category.lower() or channel_alt == 'videolibrary' or ow_force == 'del' or ow_force == 'emerg'):
#
# if item.url:
# logger.debug('INTERV. LIST: ' + str(intervencion_list[i-1]) + ' / CHANNEL: ' + str(channel_alt) + ' / URL: ' + str(item.url))
#
# if ow_force == 'del' or ow_force == 'emerg': #Si es un borrado de estructuras erroneas, hacemos un proceso aparte
# canal_des_def = canal_des #Si hay canal de sustitución para item.library_urls, lo usamos
# if not canal_des_def and canal_org in item.library_urls and len(item.library_urls) == 1: #Si no, lo extraemos de la url
# canal_des_def = scrapertools.find_single_match(item.library_urls[canal_org], 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').lower() #salvamos la url actual de la estructura a borrar
# url_total = ''
# if item.url:
# url_total = item.url #Si existe item.url, lo salvamos para futuro uso
# if item.library_urls and canal_org in item.library_urls: #Si existe una entrada con el canal a borrar, lo procesamos
# if lookup == True: #Queremos que el canal solo visualice sin migración?
# overwrite = True #Avisamos que hay cambios
# continue
# logger.error('** REGLA: ' + canal_org + ', ' + canal_des+ ', ' + ow_force)
# logger.error('item.library_urls PREVIA: ' + str(item.library_urls))
# url_total = item.library_urls[canal_org] #salvamos la url actual de la estructura a borrar
# url_total_status = False
# if len(item.library_urls) == 1 or canal_des: #si el nuevo canal no existe ya...
# item.library_urls.update({canal_des_def: url_total}) #restauramos la url con el nuevo canal
# url_total_status = True #marcamos esta url como válida
# overwrite = True #Le decimos que sobreescriba todos los .jsons
# item.ow_force = '1' #Le decimos que revise todas las temporadas
# if len(item.library_urls) > 1 and ow_force == 'del':
# item.library_urls.pop(canal_org, None) #borramos la url del canal a borrar
# overwrite = True #Le decimos que sobreescriba todos los .jsons
# item.ow_force = '1' #Le decimos que revise todas las temporadas
# if it.library_urls:
# it.library_urls = item.library_urls #lo salvamos en el .nfo, si lo hay
#
# if item.url and item.url == url_total and url_total_status == False: #si la url es la del canal borrado...
# for canal_vid, url_vid in item.library_urls.items():
# canal_vid_alt = "'%s'" % canal_vid
# if canal_vid_alt not in intervencion: #... la sustituimos por la primera válida
# item.url = url_vid
# break
# if canal_vid_alt in fail_over_list: #Si es un clone de Newpct1, salvamos la nueva categoría
# item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').lower() #Salvamos categoría
# else:
# item.category = canal_vid.capitalize() #si no, salvamos nueva categoría
# logger.error('item.library_urls ACTUALIZADA: ' + str(item.library_urls))
#
# if lookup == False: #si es migración completa...
# delete_stat += 1 #Ya hemos actualizado algo, o habrá que hacerlo...
# if ow_force == 'emerg': opt = content_exc #Salvamos la opción de Guardar o Borrar enlaces
# canal_org_des_list += [(canal_org, canal_des, url_total, opt, ow_force)] #salvamos el resultado para su proceso
#
# else:
# if channel_alt == 'videolibrary': #Viene de videolibrary.list_movies: IMPRESCINDIBLE
# for canal_vid, url_vid in item.library_urls.items():
# if canal_org != canal_vid: #Miramos si canal_org de la regla está en item.library_urls
# continue
# else:
# channel_alt = canal_org #Sí, ponermos el nombre del canal de origen
# channel_b = "'%s'" % canal_org
# if channel_b in fail_over_list: #Si es un clone de Newpct1, se actualiza a newpct1
# channel_alt = channel_py
# if channel_alt == 'videolibrary':
# continue
# if item.contentType == "list": #Si viene de Videolibrary, le cambiamos ya el canal
# if item.channel != channel_py:
# item.channel = canal_des #Cambiamos el canal. Si es clone, lo hace el canal
# continue #Salimos sin hacer nada más. item está casi vacío
# if item.contentType not in content_inc and "*" not in content_inc: #Está el contenido el la lista de incluidos
# continue
# if item.contentType in content_exc: #Está el contenido excluido?
# continue
# channel_enabled = 0
# channel_enabled_alt = 1
# if item.channel != channel_py:
# try:
# if channeltools.is_enabled(channel_alt): channel_enabled = 1 #Verificamos que el canal esté inactivo
# if config.get_setting('enabled', channel_alt) == False: channel_enabled_alt = 0
# channel_enabled = channel_enabled * channel_enabled_alt #Si está inactivo en algún sitio, tomamos eso
# except:
# pass
# if channel_enabled == 1 and canal_org != canal_des: #Si el canal está activo, puede ser solo...
# continue #... una intervención que afecte solo a una región
# if ow_force == 'no' and it.library_urls: #Esta regla solo vale para findvideos...
# continue #... salidmos si estamos actualizando
# if lookup == True: #Queremos que el canal solo visualice sin migración?
# if ow_force != 'no':
# overwrite = True #Avisamos que hay cambios
# continue #Salimos sin tocar archivos
# url_total = ''
# if item.url:
# url_total = item.url
# elif not item.url and item.library_urls:
# url_total = item.library_urls[canal_org]
# url_total = url_total.replace(url_org, url_des) #reemplazamos una parte de url
# url = ''
# if patron1: #Hay expresión regex?
# url += scrapertools.find_single_match(url_total, patron1) #La aplicamos a url
# if patron2: #Hay más expresión regex?
# url += scrapertools.find_single_match(url_total, patron2) #La aplicamos a url
# if patron3: #Hay más expresión regex?
# url += scrapertools.find_single_match(url_total, patron3) #La aplicamos a url
# if patron4: #Hay más expresión regex?
# url += scrapertools.find_single_match(url_total, patron4) #La aplicamos a url
# if patron5: #Hay más expresión regex?
# url += scrapertools.find_single_match(url_total, patron5) #La aplicamos a url
# if url:
# url_total = url #Guardamos la suma de los resultados intermedios
# if item.channel == channel_py or channel in fail_over_list: #Si es Newpct1...
# if item.contentType == "tvshow":
# url_total = re.sub(r'\/\d+\/?$', '', url_total) #parece que con el título encuentra la serie, normalmente...
# update_stat += 1 #Ya hemos actualizado algo
# canal_org_des_list += [(canal_org, canal_des, url_total, opt, ow_force)] #salvamos el resultado para su proceso
#
# if update_stat > 0 or delete_stat > 0: #Ha habido alguna actualización o borrado? Entonces salvamos
# if (update_stat > 0 and path != False) or item.ow_force == '1':
# logger.error('** Lista de Actualizaciones a realizar: ' + str(canal_org_des_list))
# for canal_org_def, canal_des_def, url_total, opt_def, ow_force_def in canal_org_des_list: #pasamos por todas las "parejas" cambiadas
# url_total_def = url_total
# if ow_force_def != 'del' and ow_force_def != 'emerg':
# if item.url:
# item.url = url_total #Salvamos la url convertida
# if item.library_urls:
# item.library_urls.pop(canal_org_def, None)
# item.library_urls.update({canal_des_def: url_total})
# it.library_urls = item.library_urls
# if item.channel != channel_py and item.channel != 'videolibrary':
# item.channel = canal_des_def #Cambiamos el canal. Si es clone, lo hace el canal
# if channel_alt == item.category.lower(): #Actualizamos la Categoría y si la tenía
# item.category = item.channel.capitalize()
# if ow_force_def == 'force' and item.contentType != 'movie': #Queremos que el canal revise la serie entera?
# item.ow_force = '1' #Se lo decimos
# if ow_force_def in ['force', 'auto']: #Sobreescribir la series?
# overwrite = True #Sí, lo marcamos
#
# if it.library_urls and path != False and ow_force_def != 'no': #Continuamos si hay .nfo, path, y queremos actualizarlo
# item.update_next = '1'
# del item.update_next #Borramos estos campos para forzar la actualización ya
# it.update_next = '1'
# del it.update_next
#
# #Verificamos que las webs de los canales estén activas antes de borrar los .json, para asegurar que se pueden regenerar
# i = 0
# canal_org_des_list_ALT = [] #Creamos esta lista para salvar las parejas
# canal_org_des_list_ALT.extend(canal_org_des_list) #... y borrar de la original las web caidas
# for canal_org_def, canal_des_def, url_total, opt_def, ow_force_def in canal_org_des_list_ALT: #pasamos por las "parejas" a borrar
# if "magnet:" in url_total or type(url_total) != str: #Si la url es un Magnet, o es una lista, pasamos
# i += 1
# continue
# try:
# response = httptools.downloadpage(url_total)
# except:
# logger.error(traceback.format_exc())
# logger.error('Web ' + canal_des_def.upper() + ' ERROR. Regla no procesada: ' + str(canal_org_des_list[i]))
# del canal_org_des_list[i] #Borro regla
# continue #... y paso a la siguiente
# if not response:
# logger.error('Web ' + canal_des_def.upper() + ' INACTIVA. Regla no procesada: ' + str(canal_org_des_list[i]))
# del canal_org_des_list[i] #Borro regla
# continue #... y paso a la siguiente
# i += 1
# if i == 0:
# item = item_back.clone() #Restauro las imágenes inciales
# it = it_back.clone()
# item.torrent_caching_fail = True #Marcamos el proceso como fallido
# return (item, it, False)
#
# # Listamos todos los ficheros de la serie, asi evitamos tener que comprobar si existe uno por uno
# canal_erase_list = []
# from core import videolibrarytools
# raiz, carpetas_series, ficheros = filetools.walk(path).next()
# ficheros = [filetools.join(path, f) for f in ficheros] #Almacenamos la lista de archivos de la carpeta
# #logger.error(ficheros)
# for archivo in ficheros:
# for canal_org_def, canal_des_def, url_total, opt_def, ow_force_def in canal_org_des_list: #pasamos por las "parejas" a borrar
# canal_erase = '[%s]' % canal_org_def
# canal_erase_alt = "'%s'" % canal_org_def
# canal_new = '[%s]' % canal_des_def
# archivo_alt = "'%s'" % scrapertools.find_single_match(archivo, '\[(\w+)\].json')
# if archivo_alt == "''": archivo_alt = "'xyz123'"
# #logger.error(canal_erase + canal_new + archivo + archivo_alt)
# #Borramos los .json que sean de los canal afectados, incluidos todos los de los clones de newpct1 si éste es el canal
# if canal_erase in archivo or (ow_force_def == 'emerg' and canal_erase_alt in fail_over_list and archivo_alt in fail_over_list and it.contentType != 'movie'):
# if canal_des_def and it.contentType == 'movie' and not '.torrent' in archivo: #Si es película ...
# item_json = ''
# item_json = Item().fromjson(filetools.read(archivo)) #leemos el .json ante de borrarlo para salvar...
# if not item_json: #error al leer el .json. Algo no funciona...
# continue
# title = item_json.title #... el título con su formato
# language = item_json.language #... los idiomas, que no están en el .nfo
# wanted = item_json.wanted #... y wanted con el título original
# json_path = archivo.replace(canal_erase, canal_new) #Salvamos el path del .json para luego crearlo
# json_path_list += [(canal_org_def, canal_des_def, url_total, json_path, title, language, wanted, ow_force_def, opt_def, archivo)]
# filetools.remove(archivo) #Borramos el .json y el .torrent
# logger.error('** BORRAMOS: ' + str(archivo))
# if ow_force_def == 'del' or ow_force_def == 'emerg': #Si la función es 'del' or 'emerg' ...
# overwrite = True #Le decimos que sobreescriba todos los .jsons
# item.ow_force = '1' #Le decimos que revise todas las temporadas
#
# #Si se ha cambiado algo, se actualizan los .nfo
# if it.nfo: del it.nfo #Borramos variables innecesarias
# if it.path: del it.path #Borramos variables innecesarias
# if it.text_color: del it.text_color #Borramos variables innecesarias
# if item.contentType == "movie" and ".nfo" in archivo: #Para películas
# archivo_nfo = archivo #Guardamos el path del .nfo para futuro uso
# if it.ow_force: del it.ow_force
# filetools.write(archivo, head_nfo + it.tojson()) #escribo el .nfo de la peli
# if item.contentType != "movie" and "tvshow.nfo" in archivo:
# archivo_nfo = archivo #Guardamos el path del .nfo para futuro uso
# filetools.write(archivo, head_nfo + it.tojson()) #escribo el tvshow.nfo por si aborta update
#
# #Aquí convertimos las películas. Después de borrado el .json, dejamos que videolibrarytools lo regenere
# if item.contentType == "movie": #Dejamos que regenere el archivo .json
# item_movie = item.clone()
# if item_movie.ow_force: del item_movie.ow_force
# item_movie.update_last = '1'
# if item_movie.update_last: del item_movie.update_last
# if item_movie.library_playcounts: del item_movie.library_playcounts #Borramos lo que no es necesario en el .json
# if item_movie.library_urls: del item_movie.library_urls
# if item_movie.nfo: del item_movie.nfo
# if item_movie.path: del item_movie.path
# if item_movie.strm_path: del item_movie.strm_path
# if item_movie.text_color: del item_movie.text_color
# if item_movie.channel_host: del item_movie.channel_host
# if not item_movie.context: item_movie.context = "['buscar_trailer']"
# if not item_movie.extra: item_movie.extra = "peliculas"
#
# if json_path_list:
# logger.error('** .json LIST: ' + str(json_path_list))
# for canal_org_def, canal_des_def, url_total, json_path, title, language, wanted, ow_force_def, opt_def, archivo in json_path_list: #pasamos por todos canales
# logger.error('** ESCRIBIMOS: ' + json_path)
# item_movie.emergency_urls = False
# del item_movie.emergency_urls
# item_movie.channel = canal_des_def #mombre del canal migrado
# if not item_movie.category: item_movie.category = canal_des_def.capitalize() #categoría
# item_movie.url = url_total #url migrada
# if title: item_movie.title = title #restaurmos el título con formato
# if language: item_movie.language = language #restaurmos los idiomas
# if wanted: item_movie.wanted = wanted #restaurmos wanted
# item_movie.added_replacing = canal_org_def #guardamos la traza del canal reemplazado
#
# if ow_force_def == 'emerg' and opt_def in ['1', '3']: #Si era una op. para añadir/actualizar urls de emergencia ...
# item_movie = videolibrarytools.emergency_urls(item_movie, None, archivo) #... ejecutamos "findvideos" del canal para obtenerlas
# if item_movie.channel_host: del item_movie.channel_host
# if item_movie.unify: del item_movie.unify
# if item_movie.extra2: del item_movie.extra2
# if item_movie.emergency_urls: #... si las hay ...
# if it.emergency_urls and not isinstance(it.emergency_urls, dict):
# del it.emergency_urls
# if not it.emergency_urls: #... lo actualizamos en el .nfo
# it.emergency_urls = dict() #... iniciamos la variable si no existe
# it.emergency_urls.update({canal_des_def: True}) #... se marca como activo
# if it.ow_force: del it.ow_force
# filetools.write(archivo_nfo, head_nfo + it.tojson()) #actualizo el .nfo de la peli
# else:
# logger.error('Error en FINDVIDEOS: ' + archivo + ' / Regla: ' + canal_org_def + ', ' + opt_def + ', ' + ow_force_def)
#
# if ow_force_def == 'emerg' and opt_def == '2': #Si era una operación para borrar urls de emergencia ...
# if it.emergency_urls and not isinstance(it.emergency_urls, dict):
# del it.emergency_urls
# if it.emergency_urls and it.emergency_urls.get(item_movie.channel, False):
# it.emergency_urls.pop(item_movie.channel, None) #borramos la entrada del .nfo
# if it.ow_force: del it.ow_force
# filetools.write(archivo_nfo, head_nfo + it.tojson()) #actualizo el .nfo de la peli
#
# filetools.write(json_path, item_movie.tojson()) #Salvamos el nuevo .json de la película
#
# if (update_stat > 0 and path != False and ow_force_def in ['force', 'auto']) or item.ow_force == '1' or len(json_path_list) > 0:
# logger.error('ITEM cambiado')
# if it.emergency_urls:
# logger.error(it.emergency_urls)
# logger.error(item)
#
# return (item, it, overwrite)
return item, Item(), False
def verify_cached_torrents():

View File

@@ -26,7 +26,7 @@ def find_in_text(regex, text, flags=re.IGNORECASE | re.DOTALL):
class UnshortenIt(object):
_adfly_regex = r'adf\.ly|j\.gs|q\.gs|u\.bb|ay\.gy|atominik\.com|tinyium\.com|microify\.com|threadsphere\.bid|clearload\.bid|activetect\.net|swiftviz\.net|briskgram\.net|activetect\.net|baymaleti\.net|thouth\.net|uclaut.net'
_adfly_regex = r'adf\.ly|j\.gs|q\.gs|u\.bb|ay\.gy|atominik\.com|tinyium\.com|microify\.com|threadsphere\.bid|clearload\.bid|activetect\.net|swiftviz\.net|briskgram\.net|activetect\.net|baymaleti\.net|thouth\.net|uclaut\.net|gloyah\.net'
_linkbucks_regex = r'linkbucks\.com|any\.gs|cash4links\.co|cash4files\.co|dyo\.gs|filesonthe\.net|goneviral\.com|megaline\.co|miniurls\.co|qqc\.co|seriousdeals\.net|theseblogs\.com|theseforums\.com|tinylinks\.co|tubeviral\.com|ultrafiles\.net|urlbeat\.net|whackyvidz\.com|yyv\.co'
_adfocus_regex = r'adfoc\.us'
_lnxlu_regex = r'lnx\.lu'

View File

@@ -4,7 +4,7 @@
"ignore_urls": [],
"patterns": [
{
"pattern": "(?:openload|oload).*?/(?:embed|f)/([0-9a-zA-Z-_]+)",
"pattern": "(?:openload|oload|openloads).*?/(?:embed|f|e)/([0-9a-zA-Z-_]+)",
"url": "https://openload.co/embed/\\1/"
}
]