def mark_tvshow_as_updatable(item): logger.info("pelisalacarta.channels.biblioteca mark_tvshow_as_updatable") url_scraper = filetools.read(item.nfo, 0, 1) it = Item().fromjson(filetools.read(item.nfo, 1)) it.active = item.active filetools.write(item.nfo, url_scraper + it.tojson()) platformtools.itemlist_refresh()
def save_tvshow(item, episodelist): """ guarda en la libreria de series la serie con todos los capitulos incluidos en la lista episodelist @type item: item @param item: item que representa la serie a guardar @type episodelist: list @param episodelist: listado de items que representan los episodios que se van a guardar. @rtype insertados: int @return: el número de episodios insertados @rtype sobreescritos: int @return: el número de episodios sobreescritos @rtype fallidos: int @return: el número de episodios fallidos o -1 si ha fallado toda la serie @rtype path: str @return: directorio serie """ logger.info() # logger.debug(item.tostring('\n')) path = "" # Si llegados a este punto no tenemos titulo o code, salimos if not (item.contentSerieName or item.infoLabels['code']) or not item.channel: logger.error("NO ENCONTRADO contentSerieName NI code: " + item.url) return 0, 0, -1, path # Salimos sin guardar scraper_return = scraper.find_and_set_infoLabels(item) # Llegados a este punto podemos tener: # scraper_return = True: Un item con infoLabels con la información actualizada de la serie # scraper_return = False: Un item sin información de la peli (se ha dado a cancelar en la ventana) # item.infoLabels['code'] == "" : No se ha encontrado el identificador de IMDB necesario para continuar, salimos if not scraper_return or not item.infoLabels['code']: # TODO de momento si no hay resultado no añadimos nada, # aunq podriamos abrir un cuadro para introducir el identificador/nombre a mano logger.error("NO ENCONTRADO EN SCRAPER O NO TIENE code: " + item.url) return 0, 0, -1, path _id = item.infoLabels['code'][0] if not item.infoLabels['code'][0] or item.infoLabels['code'][0] == 'None': if item.infoLabels['code'][1] and item.infoLabels['code'][1] != 'None': _id = item.infoLabels['code'][1] elif item.infoLabels['code'][2] and item.infoLabels['code'][2] != 'None': _id = item.infoLabels['code'][2] else: logger.error("NO ENCONTRADO EN SCRAPER O NO TIENE code: " + item.url + ' / ' + item.infoLabels['code']) return 0, 0, -1, path if config.get_setting("original_title_folder", "videolibrary") == 1 and item.infoLabels['originaltitle']: base_name = item.infoLabels['originaltitle'] elif item.infoLabels['tvshowtitle']: base_name = item.infoLabels['tvshowtitle'] elif item.infoLabels['title']: base_name = item.infoLabels['title'] else: base_name = item.contentSerieName if not PY3: base_name = unicode(filetools.validate_path(base_name.replace('/', '-')), "utf8").encode("utf8") else: base_name = filetools.validate_path(base_name.replace('/', '-')) if config.get_setting("lowerize_title", "videolibrary") == 0: base_name = base_name.lower() for raiz, subcarpetas, ficheros in filetools.walk(TVSHOWS_PATH): for c in subcarpetas: code = scrapertools.find_single_match(c, '\[(.*?)\]') if code and code != 'None' and code in item.infoLabels['code']: path = filetools.join(raiz, c) _id = code break if not path: path = filetools.join(TVSHOWS_PATH, ("%s [%s]" % (base_name, _id)).strip()) logger.info("Creando directorio serie: " + path) try: filetools.mkdir(path) except OSError as exception: if exception.errno != errno.EEXIST: raise tvshow_path = filetools.join(path, "tvshow.nfo") if not filetools.exists(tvshow_path): # Creamos tvshow.nfo, si no existe, con la head_nfo, info de la serie y marcas de episodios vistos logger.info("Creando tvshow.nfo: " + tvshow_path) head_nfo = scraper.get_nfo(item) item.infoLabels['mediatype'] = "tvshow" item.infoLabels['title'] = item.contentSerieName item_tvshow = Item(title=item.contentSerieName, channel="videolibrary", action="get_seasons", fanart=item.infoLabels['fanart'], thumbnail=item.infoLabels['thumbnail'], infoLabels=item.infoLabels, path=path.replace(TVSHOWS_PATH, "")) item_tvshow.library_playcounts = {} item_tvshow.library_urls = {item.channel: item.url} else: # Si existe tvshow.nfo, pero estamos añadiendo un nuevo canal actualizamos el listado de urls head_nfo, item_tvshow = read_nfo(tvshow_path) item_tvshow.channel = "videolibrary" item_tvshow.action = "get_seasons" item_tvshow.library_urls[item.channel] = item.url # FILTERTOOLS # si el canal tiene filtro de idiomas, añadimos el canal y el show if episodelist and "list_language" in episodelist[0]: # si ya hemos añadido un canal previamente con filtro, añadimos o actualizamos el canal y show if "library_filter_show" in item_tvshow: if item.title_from_channel: item_tvshow.library_filter_show[item.channel] = item.title_from_channel else: item_tvshow.library_filter_show[item.channel] = item.show # no habia ningún canal con filtro y lo generamos por primera vez else: if item.title_from_channel: item_tvshow.library_filter_show = {item.channel: item.title_from_channel} else: item_tvshow.library_filter_show = {item.channel: item.show} if item.channel != "downloads": item_tvshow.active = 1 # para que se actualice a diario cuando se llame a videolibrary_service filetools.write(tvshow_path, head_nfo + item_tvshow.tojson()) if not episodelist: # La lista de episodios esta vacia return 0, 0, 0, path # Guardar los episodios '''import time start_time = time.time()''' insertados, sobreescritos, fallidos = save_episodes(path, episodelist, item) '''msg = "Insertados: %d | Sobreescritos: %d | Fallidos: %d | Tiempo: %2.2f segundos" % \ (insertados, sobreescritos, fallidos, time.time() - start_time) logger.debug(msg)''' return insertados, sobreescritos, fallidos, path
item_tvshow.channel = "biblioteca" item_tvshow.action = "get_temporadas" item_tvshow.library_urls[item.channel] = item.url # FILTERTOOLS # si el canal tiene filtro de idiomas, añadimos el canal y el show if episodelist and "list_idiomas" in episodelist[0]: # si ya hemos añadido un canal previamente con filtro, añadimos o actualizamos el canal y show if "library_filter_show" in item_tvshow: item_tvshow.library_filter_show[item.channel] = item.show # no habia ningún canal con filtro y lo generamos por primera vez else: item_tvshow.library_filter_show = {item.channel: item.show} if item.channel != "descargas": item_tvshow.active = 1 # para que se actualice a diario cuando se llame a library_service filetools.write(tvshow_path, head_nfo + item_tvshow.tojson()) if not episodelist: # La lista de episodios esta vacia return 0, 0, 0 # Guardar los episodios insertados, sobreescritos, fallidos = save_library_episodes( path, episodelist, item) # TODO si fallidos == -1 podriamos comprobar si es necesario eliminar la serie return insertados, sobreescritos, fallidos
if episodelist and episodelist[1].list_idiomas: item_tvshow.library_filter_show = {item.channel: episodelist[1].show} else: # Si existe tvshow.nfo, pero estamos añadiendo un nuevo canal actualizamos el listado de urls url_scraper = filetools.read(tvshow_path, 0, 1) item_tvshow = Item().fromjson(filetools.read(tvshow_path, 1)) item_tvshow.library_urls[item.channel] = item.url # si el canal tiene filtro de idiomas, escogemos el valor del index 1, para evitar la opción # "Añadir a biblioteca XBMC", que no contiene toda la información if episodelist and episodelist[1].list_idiomas: item_tvshow.library_filter_show[item.channel] = episodelist[1].show if not item_tvshow.active and item.channel != "descargas": item_tvshow.active = True # para que se actualice cuando se llame a library_service filetools.write(tvshow_path, url_scraper + item_tvshow.tojson()) if not episodelist: # La lista de episodios esta vacia return 0, 0, 0 # Guardar los episodios insertados, sobreescritos, fallidos = save_library_episodes(path, episodelist, item) # TODO si fallidos == -1 podriamos comprobar si es necesario eliminar la serie return insertados, sobreescritos, fallidos
item.channel: episodelist[1].show } else: # Si existe tvshow.nfo, pero estamos añadiendo un nuevo canal actualizamos el listado de urls url_scraper = filetools.read(tvshow_path, 0, 1) item_tvshow = Item().fromjson(filetools.read(tvshow_path, 1)) item_tvshow.library_urls[item.channel] = item.url # si el canal tiene filtro de idiomas, escogemos el valor del index 1, para evitar la opción # "Añadir a biblioteca XBMC", que no contiene toda la información if episodelist and episodelist[1].list_idiomas: item_tvshow.library_filter_show[item.channel] = episodelist[1].show if not item_tvshow.active and item.channel != "descargas": item_tvshow.active = True # para que se actualice cuando se llame a library_service filetools.write(tvshow_path, url_scraper + item_tvshow.tojson()) if not episodelist: # La lista de episodios esta vacia return 0, 0, 0 # Guardar los episodios insertados, sobreescritos, fallidos = save_library_episodes( path, episodelist, item) # TODO si fallidos == -1 podriamos comprobar si es necesario eliminar la serie return insertados, sobreescritos, fallidos
item_tvshow.channel = "biblioteca" item_tvshow.action = "get_temporadas" item_tvshow.library_urls[item.channel] = item.url # FILTERTOOLS # si el canal tiene filtro de idiomas, añadimos el canal y el show if episodelist and "list_idiomas" in episodelist[0]: # si ya hemos añadido un canal previamente con filtro, añadimos o actualizamos el canal y show if "library_filter_show" in item_tvshow: item_tvshow.library_filter_show[item.channel] = item.show # no habia ningún canal con filtro y lo generamos por primera vez else: item_tvshow.library_filter_show = {item.channel: item.show} if item.channel != "descargas": item_tvshow.active = 1 # para que se actualice a diario cuando se llame a library_service filetools.write(tvshow_path, head_nfo + item_tvshow.tojson()) if not episodelist: # La lista de episodios esta vacia return 0, 0, 0 # Guardar los episodios '''import time start_time = time.time()''' insertados, sobreescritos, fallidos = save_library_episodes(path, episodelist, item) '''msg = "Insertados: %d | Sobreescritos: %d | Fallidos: %d | Tiempo: %2.2f segundos" % \ (insertados, sobreescritos, fallidos, time.time() - start_time) logger.debug(msg)'''