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
+478 -477
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): def redirect_clone_newpct1(item, head_nfo=None, it=None, path=False, overwrite=False, lookup=False):
logger.info() # 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 # 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: # Incluye las llamadas estándar del canal y la llamadas externas:
- Play fron Library # - Play fron Library
- Videolibrary Update # - Videolibrary Update
#
La lógica es reemplazar item.channel por "newpct1" y dejar el nombre del clone en item.category. # 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. # 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. # 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' # 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: # También en este .json está la tabla para la conversión de canales y urls:
- activo: está o no activa esta entrada # - activo: está o no activa esta entrada
- canal_org: canal o clone de origen # - canal_org: canal o clone de origen
- canal_des: canal o clone de destino (puede ser el mismo) # - 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_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 # - url_des: parte de la url a sustituir de canal o clone de destino
- patron1: expresión Regex aplicable a la url (opcional) # - patron1: expresión Regex aplicable a la url (opcional)
- patron2: 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) # - patron3: expresión Regex aplicable a la url (opcional)
- patron4: 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) # - patron5: expresión Regex aplicable a la url (opcional)
- content_inc: contenido al que aplica esta entrada, o * (item.contentType o item.extra) # - 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' # - 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: # - 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 # - force: indica al canal que analize toda la serie y que videolibrary_service la reescriba
- auto: indica a videolibrary_service que la reescriba # - auto: indica a videolibrary_service que la reescriba
- no: no acción para videolibrary_service, solo redirige en visionado de videolibrary # - 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 # - 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 # - 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: # 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.?-[^-]+-(?:[^-]+-)([^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', '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', 'torrentrapid', 'torrentlocura', 'http://torrentrapid.com/', 'http://torrentlocura.com/', '', '', '', '', '', '*', '', 'no'),
('1', 'newpct1', '', '', '', '', '', '', '', '', '*', '', 'del'), # ('1', 'newpct1', '', '', '', '', '', '', '', '', '*', '', 'del'),
('1', 'torrentrapid', 'torrentrapid', '', '', '', '', '', '', '', '*', '1 ó 2', 'emerg'), # ('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. # 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) # #logger.debug(item)
#if it != None: logger.debug(it) # #if it != None: logger.debug(it)
if not it: # if not it:
it = Item() # it = Item()
item_back = item.clone() # item_back = item.clone()
it_back = item.clone() # it_back = item.clone()
ow_force_param = True # ow_force_param = True
update_stat = 0 # update_stat = 0
delete_stat = 0 # delete_stat = 0
canal_org_des_list = [] # canal_org_des_list = []
json_path_list = [] # json_path_list = []
emergency_urls_force = False # emergency_urls_force = False
status_migration = False # status_migration = False
#
#if item.ow_force == '1': #Ha podido qudar activado de una pasada anteriores # #if item.ow_force == '1': #Ha podido qudar activado de una pasada anteriores
# del item.ow_force # # del item.ow_force
# logger.error('** item.ow_force: ' + item.path) #aviso que ha habido una incidencia # # 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 # if it.ow_force == '1': #Ha podido quedar activado de una pasada anterior
del it.ow_force # del it.ow_force
if path and it.infoLabels['mediatype'] == 'tvshow': # if path and it.infoLabels['mediatype'] == 'tvshow':
try: # try:
nfo = filetools.join(path, '/tvshow.nfo') # nfo = filetools.join(path, '/tvshow.nfo')
filetools.write(nfo, head_nfo + it.tojson()) #escribo el .nfo de la peli por si aborta update # 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 # logger.error('** .nfo ACTUALIZADO: it.ow_force: ' + nfo) #aviso que ha habido una incidencia
except: # except:
logger.error('** .nfo ERROR actualizar: it.ow_force: ' + nfo) #aviso que ha habido una incidencia # logger.error('** .nfo ERROR actualizar: it.ow_force: ' + nfo) #aviso que ha habido una incidencia
logger.error(traceback.format_exc()) # logger.error(traceback.format_exc())
#
#Array con los datos de los canales alternativos # #Array con los datos de los canales alternativos
#Cargamos en .json de Newpct1 para ver las listas de valores en settings # #Cargamos en .json de Newpct1 para ver las listas de valores en settings
fail_over_list = channeltools.get_channel_json(channel_py) # fail_over_list = channeltools.get_channel_json(channel_py)
for settings in fail_over_list['settings']: #Se recorren todos los settings # for settings in fail_over_list['settings']: #Se recorren todos los settings
if settings['id'] == "clonenewpct1_channels_list": #Encontramos en setting # if settings['id'] == "clonenewpct1_channels_list": #Encontramos en setting
fail_over_list = settings['default'] #Carga lista de clones # fail_over_list = settings['default'] #Carga lista de clones
if settings['id'] == "intervenidos_channels_list": #Encontramos en setting # if settings['id'] == "intervenidos_channels_list": #Encontramos en setting
intervencion = settings['default'] #Carga lista de clones y canales intervenidos # intervencion = settings['default'] #Carga lista de clones y canales intervenidos
#
#primero tratamos los clones de Newpct1 # #primero tratamos los clones de Newpct1
channel_alt = item.channel # channel_alt = item.channel
#if item.url and not it.library_urls: # #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 # # channel_alt = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').lower() #Salvamos en nombre del canal o clone
# if not channel_alt: # # if not channel_alt:
# channel_alt = item.channel # # channel_alt = item.channel
channel = "'%s'" % channel_alt # channel = "'%s'" % channel_alt
category = '' # category = ''
if channel_alt != 'videolibrary': # if channel_alt != 'videolibrary':
item.category = channel_alt.capitalize() # item.category = channel_alt.capitalize()
category = "'%s'" % channel_alt # category = "'%s'" % channel_alt
channel_py_alt = 'xyz123' # channel_py_alt = 'xyz123'
if channel in fail_over_list : #Si es un clone de Newpct1, se actualiza el canal y la categoría # if channel in fail_over_list : #Si es un clone de Newpct1, se actualiza el canal y la categoría
item.channel = channel_py # item.channel = channel_py
channel_py_alt = "'%s'" % channel_py # channel_py_alt = "'%s'" % channel_py
if item.channel_host: #y se borran resto de pasadas anteriores # if item.channel_host: #y se borran resto de pasadas anteriores
del item.channel_host # del item.channel_host
#
if it.emergency_urls: # if it.emergency_urls:
item.emergency_urls = it.emergency_urls #Refrescar desde el .nfo # 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" # #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. # #"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 # #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 # #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. # #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 # #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á # #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. # #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 "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 # #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 # status_migration = regenerate_clones() #TEMPORAL: Reparación de Videoteca con Newpct1
#
verify_cached_torrents() #TEMPORAL: verificamos si los .torrents son correctos # verify_cached_torrents() #TEMPORAL: verificamos si los .torrents son correctos
try: #Si ha habido errores, vemos la lista y los reparamos # try: #Si ha habido errores, vemos la lista y los reparamos
json_error_path = filetools.join(config.get_runtime_path(), 'error_cached_torrents.json') # 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? # if filetools.exists(json_error_path): #hay erroer que hay que reparar?
from core import jsontools # from core import jsontools
json_error_file = jsontools.load(filetools.read(json_error_path)) #Leemos la lista de errores # json_error_file = jsontools.load(filetools.read(json_error_path)) #Leemos la lista de errores
if not json_error_file: # if not json_error_file:
filetools.remove(json_error_path) #si ya no quedan errores, borramos el .json # 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? # elif path in json_error_file: #está este títu,o en la lista de errores?
json_error_file.pop(path) #sí. Lo quitamos # json_error_file.pop(path) #sí. Lo quitamos
if not json_error_file: # if not json_error_file:
filetools.remove(json_error_path) #si ya no quedan errores, borramos el .json # filetools.remove(json_error_path) #si ya no quedan errores, borramos el .json
else: # else:
filetools.write(json_error_path, jsontools.dump(json_error_file)) #si quedan, actualizamos el .json # 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 # if item.contentType == 'movie': #si es una pelicula, forzamos su actualización
emergency_urls_force = True # emergency_urls_force = True
else: #si es una serie, que regenere los episodios que faltan (en error) # else: #si es una serie, que regenere los episodios que faltan (en error)
item.ow_force = '1' #... de todas las temporadas # item.ow_force = '1' #... de todas las temporadas
except: # except:
logger.error('Error en el proceso de REPARACION de vídeos con .torrents dañados') # logger.error('Error en el proceso de REPARACION de vídeos con .torrents dañados')
logger.error(traceback.format_exc()) # logger.error(traceback.format_exc())
#
#Arreglo temporal para Newpct1 # #Arreglo temporal para Newpct1
try: # try:
if channel in fail_over_list or channel_alt == 'videolibrary': # if channel in fail_over_list or channel_alt == 'videolibrary':
channel_bis = channel_py # channel_bis = channel_py
if not item.url and it.library_urls and channel_alt == 'videolibrary': # 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 # 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 # canal_vid_alt = "'%s'" % canal_vid
if canal_vid_alt in fail_over_list: #Se busca si es un clone de newpct1 # if canal_vid_alt in fail_over_list: #Se busca si es un clone de newpct1
channel_bis = channel_py # channel_bis = channel_py
channel_alt = canal_vid # channel_alt = canal_vid
channel = "'%s'" % channel_alt # channel = "'%s'" % channel_alt
break # break
else: # else:
channel_bis = canal_vid # 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): # 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() # raiz, carpetas_series, ficheros = filetools.walk(path).next()
objetivo = '[%s]_01.torrent' % channel_alt # objetivo = '[%s]_01.torrent' % channel_alt
encontrado = False # encontrado = False
for fichero in ficheros: # for fichero in ficheros:
if objetivo in fichero: # if objetivo in fichero:
encontrado = True # encontrado = True
break # break
if not encontrado: # if not encontrado:
logger.error('REGENERANDO: ' + str(item.emergency_urls)) # logger.error('REGENERANDO: ' + str(item.emergency_urls))
item.emergency_urls.pop(channel_alt, None) # item.emergency_urls.pop(channel_alt, None)
except: # except:
logger.error('Error en el proceso de RECARGA de URLs de Emergencia') # logger.error('Error en el proceso de RECARGA de URLs de Emergencia')
logger.error(traceback.format_exc()) # logger.error(traceback.format_exc())
""" # """
#
try: # try:
if item.url and not channel_py in item.url and it.emergency_urls: #Viene de actualización de videoteca de series # 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 # #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: # 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)) # 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´" # 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 # 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 # if canal_vid == channel_py: #Si tiene Newcpt1 en canal, es un error
continue # continue
canal_vid_alt = "'%s'" % canal_vid # canal_vid_alt = "'%s'" % canal_vid
if canal_vid_alt in fail_over_list: #Se busca si es un clone de newpct1 # if canal_vid_alt in fail_over_list: #Se busca si es un clone de newpct1
channel_bis = channel_py # channel_bis = channel_py
else: # else:
channel_bis = canal_vid # channel_bis = canal_vid
#Analizamos si el canal ya tiene las urls de emergencia: guardar o borrar # #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: # 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)) # intervencion += ", ('1', '%s', '%s', '', '', '', '', '', '', '', '*', '%s', 'emerg')" % (canal_vid, canal_vid, config.get_setting("emergency_urls", channel_bis))
except: # except:
logger.error('Error en el proceso de ALMACENAMIENTO de URLs de Emergencia') # logger.error('Error en el proceso de ALMACENAMIENTO de URLs de Emergencia')
logger.error(traceback.format_exc()) # logger.error(traceback.format_exc())
#
#Ahora tratamos las webs intervenidas, tranformamos la url, el nfo y borramos los archivos obsoletos de la serie # #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 # 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 # return (item, it, overwrite) #... el canal/clone está listado
#
import ast # import ast
intervencion_list = ast.literal_eval(intervencion) #Convertir a Array el string # intervencion_list = ast.literal_eval(intervencion) #Convertir a Array el string
#logger.debug(intervencion_list) # #logger.debug(intervencion_list)
#
if lookup == True: # if lookup == True:
overwrite = False #Solo avisamos si hay cambios # overwrite = False #Solo avisamos si hay cambios
i = 0 # 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: # 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 # i += 1
opt = '' # opt = ''
#Es esta nuestra entrada? # #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 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: # if item.url:
logger.debug('INTERV. LIST: ' + str(intervencion_list[i-1]) + ' / CHANNEL: ' + str(channel_alt) + ' / URL: ' + str(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 # 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 # 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 # 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 # 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 = '' # url_total = ''
if item.url: # if item.url:
url_total = item.url #Si existe item.url, lo salvamos para futuro uso # 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 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? # if lookup == True: #Queremos que el canal solo visualice sin migración?
overwrite = True #Avisamos que hay cambios # overwrite = True #Avisamos que hay cambios
continue # continue
logger.error('** REGLA: ' + canal_org + ', ' + canal_des+ ', ' + ow_force) # logger.error('** REGLA: ' + canal_org + ', ' + canal_des+ ', ' + ow_force)
logger.error('item.library_urls PREVIA: ' + str(item.library_urls)) # 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 = item.library_urls[canal_org] #salvamos la url actual de la estructura a borrar
url_total_status = False # url_total_status = False
if len(item.library_urls) == 1 or canal_des: #si el nuevo canal no existe ya... # 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 # 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 # url_total_status = True #marcamos esta url como válida
overwrite = True #Le decimos que sobreescriba todos los .jsons # overwrite = True #Le decimos que sobreescriba todos los .jsons
item.ow_force = '1' #Le decimos que revise todas las temporadas # item.ow_force = '1' #Le decimos que revise todas las temporadas
if len(item.library_urls) > 1 and ow_force == 'del': # if len(item.library_urls) > 1 and ow_force == 'del':
item.library_urls.pop(canal_org, None) #borramos la url del canal a borrar # item.library_urls.pop(canal_org, None) #borramos la url del canal a borrar
overwrite = True #Le decimos que sobreescriba todos los .jsons # overwrite = True #Le decimos que sobreescriba todos los .jsons
item.ow_force = '1' #Le decimos que revise todas las temporadas # item.ow_force = '1' #Le decimos que revise todas las temporadas
if it.library_urls: # if it.library_urls:
it.library_urls = item.library_urls #lo salvamos en el .nfo, si lo hay # 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... # 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(): # for canal_vid, url_vid in item.library_urls.items():
canal_vid_alt = "'%s'" % canal_vid # canal_vid_alt = "'%s'" % canal_vid
if canal_vid_alt not in intervencion: #... la sustituimos por la primera válida # if canal_vid_alt not in intervencion: #... la sustituimos por la primera válida
item.url = url_vid # item.url = url_vid
break # break
if canal_vid_alt in fail_over_list: #Si es un clone de Newpct1, salvamos la nueva categoría # 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 # item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').lower() #Salvamos categoría
else: # else:
item.category = canal_vid.capitalize() #si no, salvamos nueva categoría # item.category = canal_vid.capitalize() #si no, salvamos nueva categoría
logger.error('item.library_urls ACTUALIZADA: ' + str(item.library_urls)) # logger.error('item.library_urls ACTUALIZADA: ' + str(item.library_urls))
#
if lookup == False: #si es migración completa... # if lookup == False: #si es migración completa...
delete_stat += 1 #Ya hemos actualizado algo, o habrá que hacerlo... # 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 # 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 # canal_org_des_list += [(canal_org, canal_des, url_total, opt, ow_force)] #salvamos el resultado para su proceso
#
else: # else:
if channel_alt == 'videolibrary': #Viene de videolibrary.list_movies: IMPRESCINDIBLE # if channel_alt == 'videolibrary': #Viene de videolibrary.list_movies: IMPRESCINDIBLE
for canal_vid, url_vid in item.library_urls.items(): # 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 # if canal_org != canal_vid: #Miramos si canal_org de la regla está en item.library_urls
continue # continue
else: # else:
channel_alt = canal_org #Sí, ponermos el nombre del canal de origen # channel_alt = canal_org #Sí, ponermos el nombre del canal de origen
channel_b = "'%s'" % canal_org # channel_b = "'%s'" % canal_org
if channel_b in fail_over_list: #Si es un clone de Newpct1, se actualiza a newpct1 # if channel_b in fail_over_list: #Si es un clone de Newpct1, se actualiza a newpct1
channel_alt = channel_py # channel_alt = channel_py
if channel_alt == 'videolibrary': # if channel_alt == 'videolibrary':
continue # continue
if item.contentType == "list": #Si viene de Videolibrary, le cambiamos ya el canal # if item.contentType == "list": #Si viene de Videolibrary, le cambiamos ya el canal
if item.channel != channel_py: # if item.channel != channel_py:
item.channel = canal_des #Cambiamos el canal. Si es clone, lo hace el canal # 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 # 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 # if item.contentType not in content_inc and "*" not in content_inc: #Está el contenido el la lista de incluidos
continue # continue
if item.contentType in content_exc: #Está el contenido excluido? # if item.contentType in content_exc: #Está el contenido excluido?
continue # continue
channel_enabled = 0 # channel_enabled = 0
channel_enabled_alt = 1 # channel_enabled_alt = 1
if item.channel != channel_py: # if item.channel != channel_py:
try: # try:
if channeltools.is_enabled(channel_alt): channel_enabled = 1 #Verificamos que el canal esté inactivo # 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 # 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 # channel_enabled = channel_enabled * channel_enabled_alt #Si está inactivo en algún sitio, tomamos eso
except: # except:
pass # pass
if channel_enabled == 1 and canal_org != canal_des: #Si el canal está activo, puede ser solo... # 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 # 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... # if ow_force == 'no' and it.library_urls: #Esta regla solo vale para findvideos...
continue #... salidmos si estamos actualizando # continue #... salidmos si estamos actualizando
if lookup == True: #Queremos que el canal solo visualice sin migración? # if lookup == True: #Queremos que el canal solo visualice sin migración?
if ow_force != 'no': # if ow_force != 'no':
overwrite = True #Avisamos que hay cambios # overwrite = True #Avisamos que hay cambios
continue #Salimos sin tocar archivos # continue #Salimos sin tocar archivos
url_total = '' # url_total = ''
if item.url: # if item.url:
url_total = item.url # url_total = item.url
elif not item.url and item.library_urls: # elif not item.url and item.library_urls:
url_total = item.library_urls[canal_org] # url_total = item.library_urls[canal_org]
url_total = url_total.replace(url_org, url_des) #reemplazamos una parte de url # url_total = url_total.replace(url_org, url_des) #reemplazamos una parte de url
url = '' # url = ''
if patron1: #Hay expresión regex? # if patron1: #Hay expresión regex?
url += scrapertools.find_single_match(url_total, patron1) #La aplicamos a url # url += scrapertools.find_single_match(url_total, patron1) #La aplicamos a url
if patron2: #Hay más expresión regex? # if patron2: #Hay más expresión regex?
url += scrapertools.find_single_match(url_total, patron2) #La aplicamos a url # url += scrapertools.find_single_match(url_total, patron2) #La aplicamos a url
if patron3: #Hay más expresión regex? # if patron3: #Hay más expresión regex?
url += scrapertools.find_single_match(url_total, patron3) #La aplicamos a url # url += scrapertools.find_single_match(url_total, patron3) #La aplicamos a url
if patron4: #Hay más expresión regex? # if patron4: #Hay más expresión regex?
url += scrapertools.find_single_match(url_total, patron4) #La aplicamos a url # url += scrapertools.find_single_match(url_total, patron4) #La aplicamos a url
if patron5: #Hay más expresión regex? # if patron5: #Hay más expresión regex?
url += scrapertools.find_single_match(url_total, patron5) #La aplicamos a url # url += scrapertools.find_single_match(url_total, patron5) #La aplicamos a url
if url: # if url:
url_total = url #Guardamos la suma de los resultados intermedios # 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.channel == channel_py or channel in fail_over_list: #Si es Newpct1...
if item.contentType == "tvshow": # if item.contentType == "tvshow":
url_total = re.sub(r'\/\d+\/?$', '', url_total) #parece que con el título encuentra la serie, normalmente... # 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 # 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 # 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 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': # if (update_stat > 0 and path != False) or item.ow_force == '1':
logger.error('** Lista de Actualizaciones a realizar: ' + str(canal_org_des_list)) # 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 # 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 # url_total_def = url_total
if ow_force_def != 'del' and ow_force_def != 'emerg': # if ow_force_def != 'del' and ow_force_def != 'emerg':
if item.url: # if item.url:
item.url = url_total #Salvamos la url convertida # item.url = url_total #Salvamos la url convertida
if item.library_urls: # if item.library_urls:
item.library_urls.pop(canal_org_def, None) # item.library_urls.pop(canal_org_def, None)
item.library_urls.update({canal_des_def: url_total}) # item.library_urls.update({canal_des_def: url_total})
it.library_urls = item.library_urls # it.library_urls = item.library_urls
if item.channel != channel_py and item.channel != 'videolibrary': # if item.channel != channel_py and item.channel != 'videolibrary':
item.channel = canal_des_def #Cambiamos el canal. Si es clone, lo hace el canal # 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 # if channel_alt == item.category.lower(): #Actualizamos la Categoría y si la tenía
item.category = item.channel.capitalize() # item.category = item.channel.capitalize()
if ow_force_def == 'force' and item.contentType != 'movie': #Queremos que el canal revise la serie entera? # if ow_force_def == 'force' and item.contentType != 'movie': #Queremos que el canal revise la serie entera?
item.ow_force = '1' #Se lo decimos # item.ow_force = '1' #Se lo decimos
if ow_force_def in ['force', 'auto']: #Sobreescribir la series? # if ow_force_def in ['force', 'auto']: #Sobreescribir la series?
overwrite = True #Sí, lo marcamos # 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 # if it.library_urls and path != False and ow_force_def != 'no': #Continuamos si hay .nfo, path, y queremos actualizarlo
item.update_next = '1' # item.update_next = '1'
del item.update_next #Borramos estos campos para forzar la actualización ya # del item.update_next #Borramos estos campos para forzar la actualización ya
it.update_next = '1' # it.update_next = '1'
del it.update_next # 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 # #Verificamos que las webs de los canales estén activas antes de borrar los .json, para asegurar que se pueden regenerar
i = 0 # i = 0
canal_org_des_list_ALT = [] #Creamos esta lista para salvar las parejas # 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 # 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 # 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 # if "magnet:" in url_total or type(url_total) != str: #Si la url es un Magnet, o es una lista, pasamos
i += 1 # i += 1
continue # continue
try: # try:
response = httptools.downloadpage(url_total) # response = httptools.downloadpage(url_total)
except: # except:
logger.error(traceback.format_exc()) # logger.error(traceback.format_exc())
logger.error('Web ' + canal_des_def.upper() + ' ERROR. Regla no procesada: ' + str(canal_org_des_list[i])) # 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 # del canal_org_des_list[i] #Borro regla
continue #... y paso a la siguiente # continue #... y paso a la siguiente
if not response: # if not response:
logger.error('Web ' + canal_des_def.upper() + ' INACTIVA. Regla no procesada: ' + str(canal_org_des_list[i])) # 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 # del canal_org_des_list[i] #Borro regla
continue #... y paso a la siguiente # continue #... y paso a la siguiente
i += 1 # i += 1
if i == 0: # if i == 0:
item = item_back.clone() #Restauro las imágenes inciales # item = item_back.clone() #Restauro las imágenes inciales
it = it_back.clone() # it = it_back.clone()
item.torrent_caching_fail = True #Marcamos el proceso como fallido # item.torrent_caching_fail = True #Marcamos el proceso como fallido
return (item, it, False) # return (item, it, False)
#
# Listamos todos los ficheros de la serie, asi evitamos tener que comprobar si existe uno por uno # # Listamos todos los ficheros de la serie, asi evitamos tener que comprobar si existe uno por uno
canal_erase_list = [] # canal_erase_list = []
from core import videolibrarytools # from core import videolibrarytools
raiz, carpetas_series, ficheros = filetools.walk(path).next() # 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 # ficheros = [filetools.join(path, f) for f in ficheros] #Almacenamos la lista de archivos de la carpeta
#logger.error(ficheros) # #logger.error(ficheros)
for archivo in 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 # 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 = '[%s]' % canal_org_def
canal_erase_alt = "'%s'" % canal_org_def # canal_erase_alt = "'%s'" % canal_org_def
canal_new = '[%s]' % canal_des_def # canal_new = '[%s]' % canal_des_def
archivo_alt = "'%s'" % scrapertools.find_single_match(archivo, '\[(\w+)\].json') # archivo_alt = "'%s'" % scrapertools.find_single_match(archivo, '\[(\w+)\].json')
if archivo_alt == "''": archivo_alt = "'xyz123'" # if archivo_alt == "''": archivo_alt = "'xyz123'"
#logger.error(canal_erase + canal_new + archivo + archivo_alt) # #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 # #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_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 ... # if canal_des_def and it.contentType == 'movie' and not '.torrent' in archivo: #Si es película ...
item_json = '' # item_json = ''
item_json = Item().fromjson(filetools.read(archivo)) #leemos el .json ante de borrarlo para salvar... # 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... # if not item_json: #error al leer el .json. Algo no funciona...
continue # continue
title = item_json.title #... el título con su formato # title = item_json.title #... el título con su formato
language = item_json.language #... los idiomas, que no están en el .nfo # language = item_json.language #... los idiomas, que no están en el .nfo
wanted = item_json.wanted #... y wanted con el título original # 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 = 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)] # 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 # filetools.remove(archivo) #Borramos el .json y el .torrent
logger.error('** BORRAMOS: ' + str(archivo)) # logger.error('** BORRAMOS: ' + str(archivo))
if ow_force_def == 'del' or ow_force_def == 'emerg': #Si la función es 'del' or 'emerg' ... # 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 # overwrite = True #Le decimos que sobreescriba todos los .jsons
item.ow_force = '1' #Le decimos que revise todas las temporadas # item.ow_force = '1' #Le decimos que revise todas las temporadas
#
#Si se ha cambiado algo, se actualizan los .nfo # #Si se ha cambiado algo, se actualizan los .nfo
if it.nfo: del it.nfo #Borramos variables innecesarias # if it.nfo: del it.nfo #Borramos variables innecesarias
if it.path: del it.path #Borramos variables innecesarias # if it.path: del it.path #Borramos variables innecesarias
if it.text_color: del it.text_color #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 # if item.contentType == "movie" and ".nfo" in archivo: #Para películas
archivo_nfo = archivo #Guardamos el path del .nfo para futuro uso # archivo_nfo = archivo #Guardamos el path del .nfo para futuro uso
if it.ow_force: del it.ow_force # if it.ow_force: del it.ow_force
filetools.write(archivo, head_nfo + it.tojson()) #escribo el .nfo de la peli # filetools.write(archivo, head_nfo + it.tojson()) #escribo el .nfo de la peli
if item.contentType != "movie" and "tvshow.nfo" in archivo: # if item.contentType != "movie" and "tvshow.nfo" in archivo:
archivo_nfo = archivo #Guardamos el path del .nfo para futuro uso # 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 # 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 # #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 # if item.contentType == "movie": #Dejamos que regenere el archivo .json
item_movie = item.clone() # item_movie = item.clone()
if item_movie.ow_force: del item_movie.ow_force # if item_movie.ow_force: del item_movie.ow_force
item_movie.update_last = '1' # item_movie.update_last = '1'
if item_movie.update_last: del item_movie.update_last # 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_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.library_urls: del item_movie.library_urls
if item_movie.nfo: del item_movie.nfo # if item_movie.nfo: del item_movie.nfo
if item_movie.path: del item_movie.path # if item_movie.path: del item_movie.path
if item_movie.strm_path: del item_movie.strm_path # if item_movie.strm_path: del item_movie.strm_path
if item_movie.text_color: del item_movie.text_color # if item_movie.text_color: del item_movie.text_color
if item_movie.channel_host: del item_movie.channel_host # if item_movie.channel_host: del item_movie.channel_host
if not item_movie.context: item_movie.context = "['buscar_trailer']" # if not item_movie.context: item_movie.context = "['buscar_trailer']"
if not item_movie.extra: item_movie.extra = "peliculas" # if not item_movie.extra: item_movie.extra = "peliculas"
#
if json_path_list: # if json_path_list:
logger.error('** .json LIST: ' + str(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 # 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) # logger.error('** ESCRIBIMOS: ' + json_path)
item_movie.emergency_urls = False # item_movie.emergency_urls = False
del item_movie.emergency_urls # del item_movie.emergency_urls
item_movie.channel = canal_des_def #mombre del canal migrado # item_movie.channel = canal_des_def #mombre del canal migrado
if not item_movie.category: item_movie.category = canal_des_def.capitalize() #categoría # if not item_movie.category: item_movie.category = canal_des_def.capitalize() #categoría
item_movie.url = url_total #url migrada # item_movie.url = url_total #url migrada
if title: item_movie.title = title #restaurmos el título con formato # if title: item_movie.title = title #restaurmos el título con formato
if language: item_movie.language = language #restaurmos los idiomas # if language: item_movie.language = language #restaurmos los idiomas
if wanted: item_movie.wanted = wanted #restaurmos wanted # if wanted: item_movie.wanted = wanted #restaurmos wanted
item_movie.added_replacing = canal_org_def #guardamos la traza del canal reemplazado # 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 ... # 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 # 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.channel_host: del item_movie.channel_host
if item_movie.unify: del item_movie.unify # if item_movie.unify: del item_movie.unify
if item_movie.extra2: del item_movie.extra2 # if item_movie.extra2: del item_movie.extra2
if item_movie.emergency_urls: #... si las hay ... # if item_movie.emergency_urls: #... si las hay ...
if it.emergency_urls and not isinstance(it.emergency_urls, dict): # if it.emergency_urls and not isinstance(it.emergency_urls, dict):
del it.emergency_urls # del it.emergency_urls
if not it.emergency_urls: #... lo actualizamos en el .nfo # if not it.emergency_urls: #... lo actualizamos en el .nfo
it.emergency_urls = dict() #... iniciamos la variable si no existe # it.emergency_urls = dict() #... iniciamos la variable si no existe
it.emergency_urls.update({canal_des_def: True}) #... se marca como activo # it.emergency_urls.update({canal_des_def: True}) #... se marca como activo
if it.ow_force: del it.ow_force # if it.ow_force: del it.ow_force
filetools.write(archivo_nfo, head_nfo + it.tojson()) #actualizo el .nfo de la peli # filetools.write(archivo_nfo, head_nfo + it.tojson()) #actualizo el .nfo de la peli
else: # else:
logger.error('Error en FINDVIDEOS: ' + archivo + ' / Regla: ' + canal_org_def + ', ' + opt_def + ', ' + ow_force_def) # 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 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): # if it.emergency_urls and not isinstance(it.emergency_urls, dict):
del it.emergency_urls # del it.emergency_urls
if it.emergency_urls and it.emergency_urls.get(item_movie.channel, False): # 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 # it.emergency_urls.pop(item_movie.channel, None) #borramos la entrada del .nfo
if it.ow_force: del it.ow_force # if it.ow_force: del it.ow_force
filetools.write(archivo_nfo, head_nfo + it.tojson()) #actualizo el .nfo de la peli # 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 # 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: # 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') # logger.error('ITEM cambiado')
if it.emergency_urls: # if it.emergency_urls:
logger.error(it.emergency_urls) # logger.error(it.emergency_urls)
logger.error(item) # logger.error(item)
#
return (item, it, overwrite) # return (item, it, overwrite)
return item, Item(), False
def verify_cached_torrents(): def verify_cached_torrents():
+1 -1
View File
@@ -26,7 +26,7 @@ def find_in_text(regex, text, flags=re.IGNORECASE | re.DOTALL):
class UnshortenIt(object): 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' _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' _adfocus_regex = r'adfoc\.us'
_lnxlu_regex = r'lnx\.lu' _lnxlu_regex = r'lnx\.lu'
+1 -1
View File
@@ -4,7 +4,7 @@
"ignore_urls": [], "ignore_urls": [],
"patterns": [ "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/" "url": "https://openload.co/embed/\\1/"
} }
] ]