Exemplo n.º 1
0
def save_download_tvshow(item):
    logger.info("pelisalacarta.channels.descargas save_download_tvshow")
    logger.info("Tipo: %s" % item.contentType)
    
    progreso = platformtools.dialog_progress("Descargas", "Obteniendo datos de la serie")
    
    tmdb.find_and_set_infoLabels_tmdb(item)

    item.downloadFilename = item.downloadFilename = "%s [%s]" % (item.contentSerieName, item.contentChannel)
    episodes = get_episodes(item)

    progreso.update(0, "Añadiendo capitulos...")

    for x, i in enumerate(episodes):
        progreso.update(x * 100 / len(episodes), os.path.basename(i.downloadFilename))
        i.path = os.path.join(config.get_setting("downloadlistpath"), str(time.time()) + ".json")
        filetools.write(i.path, i.tojson())
        time.sleep(0.1)

    progreso.close()

    if not platformtools.dialog_yesno(config.get_localized_string(30101), "¿Iniciar la descarga ahora?"):
        platformtools.dialog_ok(config.get_localized_string(30101),
                                str(len(episodes)) + " capitulos de: " + item.contentSerieName,
                                config.get_localized_string(30109))
    else:
        for i in episodes:
            res = start_download(i)
            if res == 1:
                break
Exemplo n.º 2
0
def save_download_movie(item):
    logger.info("pelisalacarta.channels.descargas save_download_movie")

    progreso = platformtools.dialog_progress(
        "Descargas", "Obteniendo datos de la pelicula")
    tmdb.find_and_set_infoLabels_tmdb(item)

    progreso.update(0, "Añadiendo pelicula...")

    item.action = "menu"
    item.channel = "descargas"
    item.downloadStatus = 0
    item.downloadProgress = 0
    item.downloadSize = 0
    item.downloadCompleted = 0
    item.downloadFilename = "%s [%s]" % (item.contentTitle.strip(),
                                         item.contentChannel)
    if item.text_color: del item.text_color
    if item.text_bold: del item.text_bold
    if item.text_italic: del item.text_italic

    item.path = filetools.encode(
        os.path.join(config.get_setting("downloadlistpath"),
                     str(time.time()) + ".json"))
    filetools.write(item.path, item.tojson())

    progreso.close()

    if not platformtools.dialog_yesno(config.get_localized_string(30101),
                                      "¿Iniciar la descarga ahora?"):
        platformtools.dialog_ok(config.get_localized_string(30101),
                                item.contentTitle,
                                config.get_localized_string(30109))
    else:
        start_download(item)
Exemplo n.º 3
0
def save_download_movie(item):
    logger.info("pelisalacarta.channels.descargas save_download_movie")
    
    progreso = platformtools.dialog_progress("Descargas", "Obteniendo datos de la pelicula")
    tmdb.find_and_set_infoLabels_tmdb(item)
    
    progreso.update(0, "Añadiendo pelicula...")
    
    item.action = "menu"
    item.channel = "descargas"
    item.downloadStatus = 0
    item.downloadProgress = 0
    item.downloadSize = 0
    item.downloadCompleted = 0
    item.downloadFilename = "%s [%s]" % (item.contentTitle.strip(), item.contentChannel)
    if item.text_color: del item.text_color
    if item.text_bold: del item.text_bold
    if item.text_italic: del item.text_italic

    item.path = filetools.encode(os.path.join(config.get_setting("downloadlistpath"), str(time.time()) + ".json"))
    filetools.write(item.path, item.tojson())
    
    progreso.close()
    
    if not platformtools.dialog_yesno(config.get_localized_string(30101), "¿Iniciar la descarga ahora?"):
        platformtools.dialog_ok(config.get_localized_string(30101), item.contentTitle,
                                config.get_localized_string(30109))
    else:
        start_download(item)
Exemplo n.º 4
0
def save_download_tvshow(item):
    logger.info("contentAction: %s | contentChannel: %s | contentType: %s | contentSerieName: %s" % (item.contentAction, item.contentChannel, item.contentType, item.contentSerieName))
    
    progreso = platformtools.dialog_progress("Descargas", "Obteniendo datos de la serie")
    
    tmdb.find_and_set_infoLabels_tmdb(item)
    
    item.downloadFilename = item.downloadFilename = "%s [%s]" % (item.contentSerieName, item.contentChannel)
    
    progreso.update(0, "Obteniendo episodios...", "conectando con %s..." % item.contentChannel)

    episodes = get_episodes(item)

    progreso.update(0, "Añadiendo capitulos...", " ")

    for x, i in enumerate(episodes):
        progreso.update(x * 100 / len(episodes), "%dx%0.2d: %s" % (i.contentSeason, i.contentEpisodeNumber, i.contentTitle))
        write_json(i)
    progreso.close()

    if not platformtools.dialog_yesno(config.get_localized_string(30101), "¿Iniciar la descarga ahora?"):
        platformtools.dialog_ok(config.get_localized_string(30101),
                                str(len(episodes)) + " capitulos de: " + item.contentSerieName,
                                config.get_localized_string(30109))
    else:
        for i in episodes:
            res = start_download(i)
            if res == STATUS_CODES.canceled:
                break
Exemplo n.º 5
0
def get_episodes(item):
    logger.info("pelisalacarta.channels.descargas get_episodes")
    
    #El item YA es un episodio, no cal buscar
    if item.contentType == "episode":
      episodes = [item.clone()]
      
    #El item es uma serie o temporada
    elif item.contentType in ["tvshow", "season"]:
      # importamos el canal
      channel = __import__('channels.%s' % item.contentChannel, None, None, ["channels.%s" % item.contentChannel])
      # Obtenemos el listado de episodios
      episodes = getattr(channel, item.contentAction)(item)
    
    itemlist = []
    
    #Tenemos las lista, ahora vamos a comprobar
    for episode in episodes:
      
      #Si partiamos de un item que ya era episodio estos datos ya están bien, no hay que modificarlos
      if item.contentType != "episode":
        episode.contentAction = episode.action
        episode.contentChannel = episode.channel
      
      #Si el resultado es una temporada, no nos vale, tenemos que descargar los episodios de cada temporada
      if episode.contentType == "season":
        itemlist.extend(get_episodes(episode))
      
      #Si el resultado es un episodio ya es lo que necesitamos, lo preparamos para añadirlo a la descarga 
      if episode.contentType == "episode":
        episode.infoLabels = item.infoLabels
        tmdb.find_and_set_infoLabels_tmdb(episode)
        episode.action = "menu"
        episode.channel = "descargas"
        episode.downloadStatus = 0
        episode.downloadProgress = 0
        episode.downloadSize = 0
        episode.downloadCompleted = 0
        if episode.text_color: del episode.text_color
        if episode.text_bold: del episode.text_bold
        if episode.text_italic: del episode.text_italic

        season_and_episode = scrapertools.get_season_and_episode(episode.title)

        if season_and_episode and episode.contentTitle:
            episode.contentSeason, episode.contentEpisodeNumber = season_and_episode.split("x")
            episode.downloadFilename = os.path.join(item.downloadFilename,"%s - %s" %
                                                                      (season_and_episode, episode.contentTitle.strip()))
        else:
            episode.contentTitle = re.sub("\[[^\]]+\]|\([^\)]+\)","",episode.title).strip()
            episode.downloadFilename = os.path.join(item.downloadFilename, episode.contentTitle)
            
        itemlist.append(episode)
        
      #Cualquier otro resultado no nos vale, lo ignoramos
      else:
        logger.info("Omitiendo item no válido: %s" % episode.tostring())
        
    return itemlist 
Exemplo n.º 6
0
def get_episodes(item):
    logger.info("contentAction: %s | contentChannel: %s | contentType: %s" % (item.contentAction, item.contentChannel, item.contentType))
    
    #El item que pretendemos descargar YA es un episodio
    if item.contentType == "episode":
      episodes = [item.clone()]
      
    #El item es uma serie o temporada
    elif item.contentType in ["tvshow", "season"]:
      # importamos el canal
      channel = __import__('channels.%s' % item.contentChannel, None, None, ["channels.%s" % item.contentChannel])
      # Obtenemos el listado de episodios
      episodes = getattr(channel, item.contentAction)(item)
      
    
    itemlist = []
    
    #Tenemos las lista, ahora vamos a comprobar
    for episode in episodes:
      
      #Si partiamos de un item que ya era episodio estos datos ya están bien, no hay que modificarlos
      if item.contentType != "episode":
        episode.contentAction = episode.action
        episode.contentChannel = episode.channel
      
      #Si el resultado es una temporada, no nos vale, tenemos que descargar los episodios de cada temporada
      if episode.contentType == "season":
        itemlist.extend(get_episodes(episode))
      
      #Si el resultado es un episodio ya es lo que necesitamos, lo preparamos para añadirlo a la descarga 
      if episode.contentType == "episode":
        
        #Pasamos el id al episodio
        if not episode.infoLabels["tmdb_id"]:
          episode.infoLabels["tmdb_id"] = item.infoLabels["tmdb_id"]
        
        #Episodio, Temporada y Titulo
        if not episode.contentSeason or not episode.contentEpisodeNumber:
          season_and_episode = scrapertools.get_season_and_episode(episode.title)
          if season_and_episode:
            episode.contentSeason = season_and_episode.split("x")[0]
            episode.contentEpisodeNumber = season_and_episode.split("x")[1]
          
        #Buscamos en tmdb
        if item.infoLabels["tmdb_id"]:
          tmdb.find_and_set_infoLabels_tmdb(episode)
                
        #Episodio, Temporada y Titulo
        if not episode.contentTitle:
          episode.contentTitle = re.sub("\[[^\]]+\]|\([^\)]+\)|\d*x\d*\s*-","",episode.title).strip()
          
        episode.downloadFilename = os.path.join(item.downloadFilename,"%dx%0.2d - %s" % (episode.contentSeason, episode.contentEpisodeNumber, episode.contentTitle.strip()))
        
        itemlist.append(episode)
      #Cualquier otro resultado no nos vale, lo ignoramos
      else:
        logger.info("Omitiendo item no válido: %s" % episode.tostring())
        
    return itemlist 
def save_library_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
    """
    logger.info("streamondemand.platformcode.library save_library_tvshow")

    # Itentamos obtener el titulo correcto:
    # 1. contentSerieName: Este deveria ser el sitio correcto
    # 2. show
    titulo = item.contentSerieName
    if not titulo:
        titulo = item.show

    # Colocamos el titulo en su sitio para que tmdb lo localize
    item.contentSerieName = titulo
    # establecemos "active" para que se actualice cuando se llame a library_service
    item.active = True

    # Si llegados a este punto no tenemos titulo, salimos
    if not item.contentSerieName or not item.channel:
        return 0, 0, -1  # Salimos sin guardar

    # TODO configurar para segun el scraper se llame a uno u otro
    tmdb.find_and_set_infoLabels_tmdb(
        item,
        config.get_setting("scrap_ask_name") == "true")

    path = filetools.join(
        TVSHOWS_PATH, "{0} [{1}]".format(item.contentSerieName.strip().lower(),
                                         item.channel).lower())
    if not filetools.exists(path):
        logger.info(
            "streamondemand.platformcode.library save_library_tvshow Creando directorio serie:"
            + path)
        try:
            filetools.mkdir(path)
        except OSError, exception:
            if exception.errno != errno.EEXIST:
                raise
Exemplo n.º 8
0
def save_library_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
    """
    logger.info()
    # logger.debug(item.tostring('\n'))
    path = ""

    # Si llegados a este punto no tenemos titulo o tmdb_id, salimos
    if not (item.contentSerieName or item.infoLabels['tmdb_id']) or not item.channel:
        logger.debug("NO ENCONTRADO contentSerieName NI tmdb_id")
        return 0, 0, -1  # Salimos sin guardar

    # TODO configurar para segun el scraper se llame a uno u otro
    tmdb_return = tmdb.find_and_set_infoLabels_tmdb(item)

    # Llegados a este punto podemos tener:
    #  tmdb_return = True: Un item con infoLabels con la información actualizada de la serie
    #  tmdb_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 tmdb_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.debug("NO ENCONTRADO EN TMDB O NO TIENE IMDB_ID")
        return 0, 0, -1

    _id = item.infoLabels['code']
    if item.infoLabels['title']:
        base_name = item.infoLabels['title']
    else:
        base_name = item.contentSerieName

    base_name = filetools.text2filename(base_name)

    for raiz, subcarpetas, ficheros in filetools.walk(TVSHOWS_PATH):
        for c in subcarpetas:
            if c.endswith("[%s]" % _id):
                path = filetools.join(raiz, c)
                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, exception:
            if exception.errno != errno.EEXIST:
                raise
def save_library_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
    """
    logger.info("streamondemand.platformcode.library save_library_tvshow")

    # Itentamos obtener el titulo correcto:
    # 1. contentSerieName: Este deveria ser el sitio correcto
    # 2. show
    titulo = item.contentSerieName
    if not titulo:
        titulo = item.show

    # Colocamos el titulo en su sitio para que tmdb lo localize
    item.contentSerieName = titulo
    # establecemos "active" para que se actualice cuando se llame a library_service
    item.active = True

    # Si llegados a este punto no tenemos titulo, salimos
    if not item.contentSerieName or not item.channel:
        return 0, 0, -1  # Salimos sin guardar

    # TODO configurar para segun el scraper se llame a uno u otro
    tmdb.find_and_set_infoLabels_tmdb(item, config.get_setting("scrap_ask_name") == "true")

    path = filetools.join(TVSHOWS_PATH, "{0} [{1}]".format(item.contentSerieName.strip().lower(), item.channel).lower())
    if not filetools.exists(path):
        logger.info("streamondemand.platformcode.library save_library_tvshow Creando directorio serie:" + path)
        try:
            filetools.mkdir(path)
        except OSError, exception:
            if exception.errno != errno.EEXIST:
                raise
Exemplo n.º 10
0
def save_download_tvshow(item):
    logger.info("pelisalacarta.channels.descargas save_download_tvshow")
    logger.info("Tipo: %s" % item.contentType)

    progreso = platformtools.dialog_progress("Descargas",
                                             "Obteniendo datos de la serie")

    tmdb.find_and_set_infoLabels_tmdb(item)

    item.downloadFilename = item.downloadFilename = "%s [%s]" % (
        item.contentSerieName, item.contentChannel)
    episodes = get_episodes(item)

    progreso.update(0, "Añadiendo capitulos...")

    for x, i in enumerate(episodes):
        progreso.update(x * 100 / len(episodes),
                        os.path.basename(i.downloadFilename))
        i.path = os.path.join(config.get_setting("downloadlistpath"),
                              str(time.time()) + ".json")
        filetools.write(i.path, i.tojson())
        time.sleep(0.1)

    progreso.close()

    if not platformtools.dialog_yesno(config.get_localized_string(30101),
                                      "¿Iniciar la descarga ahora?"):
        platformtools.dialog_ok(
            config.get_localized_string(30101),
            str(len(episodes)) + " capitulos de: " + item.contentSerieName,
            config.get_localized_string(30109))
    else:
        for i in episodes:
            res = start_download(i)
            if res == 1:
                break
Exemplo n.º 11
0
def save_download_movie(item):
    logger.info("contentAction: %s | contentChannel: %s | contentTitle: %s" % (item.contentAction, item.contentChannel, item.contentTitle))
    
    progreso = platformtools.dialog_progress("Descargas", "Obteniendo datos de la pelicula")
    
    result = tmdb.find_and_set_infoLabels_tmdb(item)
    if not result:
      progreso.close()
      item.contentType = "video"
      return save_download_video(item)
    
    progreso.update(0, "Añadiendo pelicula...")

    item.downloadFilename = "%s [%s]" % (item.contentTitle.strip(), item.contentChannel)

    write_json(item)

    progreso.close()
    
    if not platformtools.dialog_yesno(config.get_localized_string(30101), "¿Iniciar la descarga ahora?"):
        platformtools.dialog_ok(config.get_localized_string(30101), item.contentTitle,
                                config.get_localized_string(30109))
    else:
        start_download(item)
Exemplo n.º 12
0
def get_episodes(item):
    logger.info("pelisalacarta.channels.descargas get_episodes")

    #El item YA es un episodio, no cal buscar
    if item.contentType == "episode":
        episodes = [item.clone()]

    #El item es uma serie o temporada
    elif item.contentType in ["tvshow", "season"]:
        # importamos el canal
        channel = __import__('channels.%s' % item.contentChannel, None, None,
                             ["channels.%s" % item.contentChannel])
        # Obtenemos el listado de episodios
        episodes = getattr(channel, item.contentAction)(item)

    itemlist = []

    #Tenemos las lista, ahora vamos a comprobar
    for episode in episodes:

        #Si partiamos de un item que ya era episodio estos datos ya están bien, no hay que modificarlos
        if item.contentType != "episode":
            episode.contentAction = episode.action
            episode.contentChannel = episode.channel

        #Si el resultado es una temporada, no nos vale, tenemos que descargar los episodios de cada temporada
        if episode.contentType == "season":
            itemlist.extend(get_episodes(episode))

        #Si el resultado es un episodio ya es lo que necesitamos, lo preparamos para añadirlo a la descarga
        if episode.contentType == "episode":
            episode.infoLabels = item.infoLabels
            tmdb.find_and_set_infoLabels_tmdb(episode)
            episode.action = "menu"
            episode.channel = "descargas"
            episode.downloadStatus = 0
            episode.downloadProgress = 0
            episode.downloadSize = 0
            episode.downloadCompleted = 0
            if episode.text_color: del episode.text_color
            if episode.text_bold: del episode.text_bold
            if episode.text_italic: del episode.text_italic

            season_and_episode = scrapertools.get_season_and_episode(
                episode.title)

            if season_and_episode and episode.contentTitle:
                episode.contentSeason, episode.contentEpisodeNumber = season_and_episode.split(
                    "x")
                episode.downloadFilename = os.path.join(
                    item.downloadFilename, "%s - %s" %
                    (season_and_episode, episode.contentTitle.strip()))
            else:
                episode.contentTitle = re.sub("\[[^\]]+\]|\([^\)]+\)", "",
                                              episode.title).strip()
                episode.downloadFilename = os.path.join(
                    item.downloadFilename, episode.contentTitle)

            itemlist.append(episode)

        #Cualquier otro resultado no nos vale, lo ignoramos
        else:
            logger.info("Omitiendo item no válido: %s" % episode.tostring())

    return itemlist
Exemplo n.º 13
0
def save_library_movie(item):
    """
    guarda en la libreria de peliculas el elemento item, con los valores que contiene.
    @type item: item
    @param item: elemento que se va a guardar.
    @rtype insertados: int
    @return:  el número de elementos insertados
    @rtype sobreescritos: int
    @return:  el número de elementos sobreescritos
    @rtype fallidos: int
    @return:  el número de elementos fallidos o -1 si ha fallado todo
    """
    logger.info("pelisalacarta.platformcode.library save_library_movie")
    # logger.debug(item.tostring('\n'))
    insertados = 0
    sobreescritos = 0
    fallidos = 0
    path = ""

    # Itentamos obtener el titulo correcto:
    # 1. contentTitle: Este deberia ser el sitio correcto, ya que title suele contener "Añadir a la biblioteca..."
    # 2. fulltitle
    # 3. title
    if not item.contentTitle:
        # Colocamos el titulo correcto en su sitio para que tmdb lo localize
        if item.fulltitle:
            item.contentTitle = item.fulltitle
        else:
            item.contentTitle = item.title

    # Si llegados a este punto no tenemos titulo, salimos
    if not item.contentTitle or not item.channel:
        logger.debug("NO ENCONTRADO contentTitle")
        return 0, 0, -1  # Salimos sin guardar

    # TODO configurar para segun el scraper se llamara a uno u otro
    tmdb_return = tmdb.find_and_set_infoLabels_tmdb(item)

    # Llegados a este punto podemos tener:
    #  tmdb_return = True: Un item con infoLabels con la información actualizada de la peli
    #  tmdb_return = False: Un item sin información de la peli (se ha dado a cancelar en la ventana)
    #  item.infoLabels['imdb_id'] == "" : No se ha encontrado el identificador de IMDB necesario para continuar, salimos
    if not tmdb_return or not item.infoLabels['imdb_id']:
        # TODO de momento si no hay resultado no añadimos nada,
        # aunq podriamos abrir un cuadro para introducir el identificador/nombre a mano
        logger.debug("NO ENCONTRADO EN TMDB O NO TIENE IMDB_ID")
        return 0, 0, -1

    _id = item.infoLabels['imdb_id']

    # progress dialog
    p_dialog = platformtools.dialog_progress('pelisalacarta', 'Añadiendo película...')

    base_name = filetools.text2filename(item.contentTitle)

    for raiz, subcarpetas, ficheros in filetools.walk(MOVIES_PATH):
        for c in subcarpetas:
            if c.endswith("[%s]" % _id):
                path = filetools.join(raiz, c)
                break

    if not path:
        # Crear carpeta
        path = filetools.join(MOVIES_PATH, ("%s [%s]" % (base_name, _id)).strip())
        logger.info("pelisalacarta.platformcode.library save_library_movie Creando directorio pelicula:" + path)
        try:
            filetools.mkdir(path)
        except OSError, exception:
            if exception.errno != errno.EEXIST:
                raise
Exemplo n.º 14
0
def save_library_episodes(path, episodelist, serie, silent=False, overwrite=True):
    """
    guarda en la ruta indicada todos los capitulos incluidos en la lista episodelist
    @type path: str
    @param path: ruta donde guardar los episodios
    @type episodelist: list
    @param episodelist: listado de items que representan los episodios que se van a guardar.
    @type serie: item
    @param serie: serie de la que se van a guardar los episodios
    @type silent: bool
    @param silent: establece si se muestra la notificación
    @param overwrite: permite sobreescribir los ficheros existentes
    @type overwrite: bool
    @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
    """
    logger.info("pelisalacarta.platformcode.library save_library_episodes")

    # No hay lista de episodios, no hay nada que guardar
    if not len(episodelist):
        logger.info("pelisalacarta.platformcode.library save_library_episodes No hay lista de episodios, "
                    "salimos sin crear strm")
        return 0, 0, 0

    insertados = 0
    sobreescritos = 0
    fallidos = 0
    news_in_playcounts = {}

    # Silent es para no mostrar progreso (para library_service)
    if not silent:
        # progress dialog
        p_dialog = platformtools.dialog_progress('pelisalacarta', 'Añadiendo episodios...')
        p_dialog.update(0, 'Añadiendo episodio...')

    # fix float porque la division se hace mal en python 2.x
    t = float(100) / len(episodelist)

    for i, e in enumerate(episodelist):
        if not silent:
            p_dialog.update(int(math.ceil((i + 1) * t)), 'Añadiendo episodio...', e.title)

        # Añade todos menos el que dice "Añadir esta serie..." o "Descargar esta serie..."
        if e.action == "add_serie_to_library" or e.action == "download_all_episodes":
            continue

        try:
            if e.channel == "descargas":
                season_episode = scrapertools.get_season_and_episode(e.contentTitle.lower())
            else:
                season_episode = scrapertools.get_season_and_episode(e.title.lower())

            e.infoLabels = serie.infoLabels
            e.contentSeason, e.contentEpisodeNumber = season_episode.split("x")
            season_episode = "%sx%s" % (e.contentSeason, str(e.contentEpisodeNumber).zfill(2))
        except:
            continue

        strm_path = filetools.join(path, "%s.strm" % season_episode)
        if not filetools.exists(strm_path):
            # Si no existe season_episode.strm añadirlo
            item_strm = e.clone(action='play_from_library', channel='biblioteca',
                                strm_path=strm_path.replace(TVSHOWS_PATH, ""), infoLabels={})
            item_strm.contentSeason = e.contentSeason
            item_strm.contentEpisodeNumber = e.contentEpisodeNumber
            item_strm.contentType = e.contentType
            item_strm.contentTitle = season_episode

            # si el canal tiene filtro se le pasa el nombre que tiene guardado para que filtre correctamente,
            if item_strm.list_idiomas:
                # si viene de library_service se obtiene del fichero tvshow.nfo, propiedad "library_filter_show"
                if "library_filter_show" in serie:
                    item_strm.library_filter_show = serie.library_filter_show.get(serie.channel, "")
                # si se ha agregado la serie lo obtenemos del titulo.
                else:
                    item_strm.library_filter_show = serie.title

                if item_strm.library_filter_show == "":
                    logger.error("Se ha producido un error al obtener el nombre de la serie a filtrar")

            # logger.debug("item_strm" + item_strm.tostring('\n'))
            # logger.debug("serie " + serie.tostring('\n'))
            filetools.write(strm_path, '%s?%s' % (addon_name, item_strm.tourl()))

        nfo_path = filetools.join(path, "%s.nfo" % season_episode)
        item_nfo = None
        if not filetools.exists(nfo_path) and e.infoLabels.get("tmdb_id"):
            # Si no existe season_episode.nfo añadirlo
            tmdb.find_and_set_infoLabels_tmdb(e)
            item_nfo = e.clone(channel="biblioteca", url="", action='findvideos',
                               strm_path=strm_path.replace(TVSHOWS_PATH, ""))
            url_scraper = "https://www.themoviedb.org/tv/%s/season/%s/episode/%s\n" % (item_nfo.infoLabels['tmdb_id'],
                                                                                       item_nfo.contentSeason,
                                                                                       item_nfo.contentEpisodeNumber)
            filetools.write(nfo_path, url_scraper + item_nfo.tojson())

        # Solo si existen season_episode.nfo y season_episode.strm continuamos
        json_path = filetools.join(path, ("%s [%s].json" % (season_episode, e.channel)).lower())
        if filetools.exists(nfo_path) and filetools.exists(strm_path):
            nuevo = not filetools.exists(json_path)

            if nuevo or overwrite:
                # Obtenemos infoLabel del episodio
                if not item_nfo:
                    item_nfo = Item().fromjson(filetools.read(nfo_path, 1))

                e.infoLabels = item_nfo.infoLabels

                if filetools.write(json_path, e.tojson()):
                    if nuevo:
                        logger.info("pelisalacarta.platformcode.library savelibrary Insertado: %s" % json_path)
                        insertados += 1
                        # Marcamos episodio como no visto
                        news_in_playcounts[season_episode] = 0
                        # Marcamos la temporada como no vista
                        news_in_playcounts["season %s" % e.contentSeason] = 0
                        # Marcamos la serie como no vista
                        # logger.debug("serie " + serie.tostring('\n'))
                        news_in_playcounts[serie.contentTitle] = 0
                    else:
                        logger.info("pelisalacarta.platformcode.library savelibrary Sobreescrito: %s" % json_path)
                        sobreescritos += 1
                else:
                    logger.info("pelisalacarta.platformcode.library savelibrary Fallido: %s" % json_path)
                    fallidos += 1

        else:
            logger.info("pelisalacarta.platformcode.library savelibrary Fallido: %s" % json_path)
            fallidos += 1

        if not silent and p_dialog.iscanceled():
            break

    if not silent:
        p_dialog.close()

    if news_in_playcounts:
        # Si hay nuevos episodios los marcamos como no vistos en tvshow.nfo ...
        tvshow_path = filetools.join(path, "tvshow.nfo")
        try:
            url_scraper = filetools.read(tvshow_path, 0, 1)
            tvshow_item = Item().fromjson(filetools.read(tvshow_path, 1))
            tvshow_item.library_playcounts.update(news_in_playcounts)

            filetools.write(tvshow_path, url_scraper + tvshow_item.tojson())
        except:
            logger.error("Error al actualizar tvshow.nfo")
            fallidos = -1

        # ... y actualizamos la biblioteca de Kodi
        if config.is_xbmc():
            update(FOLDER_TVSHOWS, filetools.basename(path) + "/")

    if fallidos == len(episodelist):
        fallidos = -1

    logger.debug("%s [%s]: insertados= %s, sobreescritos= %s, fallidos= %s" %
                 (serie.contentSerieName, serie.channel, insertados, sobreescritos, fallidos))
    return insertados, sobreescritos, fallidos
Exemplo n.º 15
0
def save_library_movie(item):
    """
    guarda en la libreria de peliculas el elemento item, con los valores que contiene.
    @type item: item
    @param item: elemento que se va a guardar.
    @rtype insertados: int
    @return:  el número de elementos insertados
    @rtype sobreescritos: int
    @return:  el número de elementos sobreescritos
    @rtype fallidos: int
    @return:  el número de elementos fallidos o -1 si ha fallado todo
    """
    logger.info("pelisalacarta.platformcode.library save_library_movie")
    # logger.debug(item.tostring('\n'))
    insertados = 0
    sobreescritos = 0
    fallidos = 0
    path = ""

    # Itentamos obtener el titulo correcto:
    # 1. contentTitle: Este deberia ser el sitio correcto, ya que title suele contener "Añadir a la biblioteca..."
    # 2. fulltitle
    # 3. title
    if not item.contentTitle:
        # Colocamos el titulo correcto en su sitio para que tmdb lo localize
        if item.fulltitle:
            item.contentTitle = item.fulltitle
        else:
            item.contentTitle = item.title

    # Si llegados a este punto no tenemos titulo, salimos
    if not item.contentTitle or not item.channel:
        logger.debug("NO ENCONTRADO contentTitle")
        return 0, 0, -1  # Salimos sin guardar

    # TODO configurar para segun el scraper se llamara a uno u otro
    tmdb_return = tmdb.find_and_set_infoLabels_tmdb(item)

    # Llegados a este punto podemos tener:
    #  tmdb_return = True: Un item con infoLabels con la información actualizada de la peli
    #  tmdb_return = False: Un item sin información de la peli (se ha dado a cancelar en la ventana)
    #  item.infoLabels['imdb_id'] == "" : No se ha encontrado el identificador de IMDB necesario para continuar, salimos
    if not tmdb_return or not item.infoLabels['imdb_id']:
        # TODO de momento si no hay resultado no añadimos nada,
        # aunq podriamos abrir un cuadro para introducir el identificador/nombre a mano
        logger.debug("NO ENCONTRADO EN TMDB O NO TIENE IMDB_ID")
        return 0, 0, -1

    _id = item.infoLabels['imdb_id']

    # progress dialog
    p_dialog = platformtools.dialog_progress('pelisalacarta',
                                             'Añadiendo película...')

    base_name = filetools.text2filename(item.contentTitle)

    for raiz, subcarpetas, ficheros in filetools.walk(MOVIES_PATH):
        for c in subcarpetas:
            if c.endswith("[%s]" % _id):
                path = filetools.join(raiz, c)
                break

    if not path:
        # Crear carpeta
        path = filetools.join(MOVIES_PATH,
                              ("%s [%s]" % (base_name, _id)).strip())
        logger.info(
            "pelisalacarta.platformcode.library save_library_movie Creando directorio pelicula:"
            + path)
        try:
            filetools.mkdir(path)
        except OSError, exception:
            if exception.errno != errno.EEXIST:
                raise
Exemplo n.º 16
0
def save_library_episodes(path,
                          episodelist,
                          serie,
                          silent=False,
                          overwrite=True):
    """
    guarda en la ruta indicada todos los capitulos incluidos en la lista episodelist
    @type path: str
    @param path: ruta donde guardar los episodios
    @type episodelist: list
    @param episodelist: listado de items que representan los episodios que se van a guardar.
    @type serie: item
    @param serie: serie de la que se van a guardar los episodios
    @type silent: bool
    @param silent: establece si se muestra la notificación
    @param overwrite: permite sobreescribir los ficheros existentes
    @type overwrite: bool
    @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
    """
    logger.info("pelisalacarta.platformcode.library save_library_episodes")

    # No hay lista de episodios, no hay nada que guardar
    if not len(episodelist):
        logger.info(
            "pelisalacarta.platformcode.library save_library_episodes No hay lista de episodios, "
            "salimos sin crear strm")
        return 0, 0, 0

    insertados = 0
    sobreescritos = 0
    fallidos = 0
    news_in_playcounts = {}

    # Silent es para no mostrar progreso (para library_service)
    if not silent:
        # progress dialog
        p_dialog = platformtools.dialog_progress('pelisalacarta',
                                                 'Añadiendo episodios...')
        p_dialog.update(0, 'Añadiendo episodio...')

    # fix float porque la division se hace mal en python 2.x
    t = float(100) / len(episodelist)

    for i, e in enumerate(episodelist):
        if not silent:
            p_dialog.update(int(math.ceil((i + 1) * t)),
                            'Añadiendo episodio...', e.title)

        # Añade todos menos el que dice "Añadir esta serie..." o "Descargar esta serie..."
        if e.action == "add_serie_to_library" or e.action == "download_all_episodes":
            continue

        try:
            if e.channel == "descargas":
                season_episode = scrapertools.get_season_and_episode(
                    e.contentTitle.lower())
            else:
                season_episode = scrapertools.get_season_and_episode(
                    e.title.lower())

            e.infoLabels = serie.infoLabels
            e.contentSeason, e.contentEpisodeNumber = season_episode.split("x")
            season_episode = "%sx%s" % (e.contentSeason,
                                        str(e.contentEpisodeNumber).zfill(2))
        except:
            continue

        strm_path = filetools.join(path, "%s.strm" % season_episode)
        if not filetools.exists(strm_path):
            # Si no existe season_episode.strm añadirlo
            item_strm = e.clone(action='play_from_library',
                                channel='biblioteca',
                                strm_path=strm_path.replace(TVSHOWS_PATH, ""),
                                infoLabels={})
            item_strm.contentSeason = e.contentSeason
            item_strm.contentEpisodeNumber = e.contentEpisodeNumber
            item_strm.contentType = e.contentType
            item_strm.contentTitle = season_episode

            # si el canal tiene filtro se le pasa el nombre que tiene guardado para que filtre correctamente,
            if item_strm.list_idiomas:
                # si viene de library_service se obtiene del fichero tvshow.nfo, propiedad "library_filter_show"
                if "library_filter_show" in serie:
                    item_strm.library_filter_show = serie.library_filter_show.get(
                        serie.channel, "")
                # si se ha agregado la serie lo obtenemos del titulo.
                else:
                    item_strm.library_filter_show = serie.title

                if item_strm.library_filter_show == "":
                    logger.error(
                        "Se ha producido un error al obtener el nombre de la serie a filtrar"
                    )

            # logger.debug("item_strm" + item_strm.tostring('\n'))
            # logger.debug("serie " + serie.tostring('\n'))
            filetools.write(strm_path,
                            '%s?%s' % (addon_name, item_strm.tourl()))

        nfo_path = filetools.join(path, "%s.nfo" % season_episode)
        item_nfo = None
        if not filetools.exists(nfo_path) and e.infoLabels.get("tmdb_id"):
            # Si no existe season_episode.nfo añadirlo
            tmdb.find_and_set_infoLabels_tmdb(e)
            item_nfo = e.clone(channel="biblioteca",
                               url="",
                               action='findvideos',
                               strm_path=strm_path.replace(TVSHOWS_PATH, ""))
            url_scraper = "https://www.themoviedb.org/tv/%s/season/%s/episode/%s\n" % (
                item_nfo.infoLabels['tmdb_id'], item_nfo.contentSeason,
                item_nfo.contentEpisodeNumber)
            filetools.write(nfo_path, url_scraper + item_nfo.tojson())

        # Solo si existen season_episode.nfo y season_episode.strm continuamos
        json_path = filetools.join(path, ("%s [%s].json" %
                                          (season_episode, e.channel)).lower())
        if filetools.exists(nfo_path) and filetools.exists(strm_path):
            nuevo = not filetools.exists(json_path)

            if nuevo or overwrite:
                # Obtenemos infoLabel del episodio
                if not item_nfo:
                    item_nfo = Item().fromjson(filetools.read(nfo_path, 1))

                e.infoLabels = item_nfo.infoLabels

                if filetools.write(json_path, e.tojson()):
                    if nuevo:
                        logger.info(
                            "pelisalacarta.platformcode.library savelibrary Insertado: %s"
                            % json_path)
                        insertados += 1
                        # Marcamos episodio como no visto
                        news_in_playcounts[season_episode] = 0
                        # Marcamos la temporada como no vista
                        news_in_playcounts["season %s" % e.contentSeason] = 0
                        # Marcamos la serie como no vista
                        # logger.debug("serie " + serie.tostring('\n'))
                        news_in_playcounts[serie.contentTitle] = 0
                    else:
                        logger.info(
                            "pelisalacarta.platformcode.library savelibrary Sobreescrito: %s"
                            % json_path)
                        sobreescritos += 1
                else:
                    logger.info(
                        "pelisalacarta.platformcode.library savelibrary Fallido: %s"
                        % json_path)
                    fallidos += 1

        else:
            logger.info(
                "pelisalacarta.platformcode.library savelibrary Fallido: %s" %
                json_path)
            fallidos += 1

        if not silent and p_dialog.iscanceled():
            break

    if not silent:
        p_dialog.close()

    if news_in_playcounts:
        # Si hay nuevos episodios los marcamos como no vistos en tvshow.nfo ...
        tvshow_path = filetools.join(path, "tvshow.nfo")
        try:
            url_scraper = filetools.read(tvshow_path, 0, 1)
            tvshow_item = Item().fromjson(filetools.read(tvshow_path, 1))
            tvshow_item.library_playcounts.update(news_in_playcounts)

            filetools.write(tvshow_path, url_scraper + tvshow_item.tojson())
        except:
            logger.error("Error al actualizar tvshow.nfo")
            fallidos = -1

        # ... y actualizamos la biblioteca de Kodi
        if config.is_xbmc():
            update(FOLDER_TVSHOWS, filetools.basename(path) + "/")

    if fallidos == len(episodelist):
        fallidos = -1

    logger.debug("%s [%s]: insertados= %s, sobreescritos= %s, fallidos= %s" %
                 (serie.contentSerieName, serie.channel, insertados,
                  sobreescritos, fallidos))
    return insertados, sobreescritos, fallidos
Exemplo n.º 17
0
def save_library_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
    """
    logger.info("pelisalacarta.platformcode.library save_library_tvshow")
    # logger.debug(item.tostring('\n'))
    path = ""
    ''''# Itentamos obtener el titulo correcto:
    # 1. contentSerieName: Este deberia ser el sitio correcto
    # 2. show
    if not item.contentSerieName:
        # Colocamos el titulo en su sitio para que tmdb lo localize
        item.contentSerieName = item.show'''

    # Si llegados a este punto no tenemos titulo o tmdb_id, salimos
    if not (item.contentSerieName
            or item.infoLabels['tmdb_id']) or not item.channel:
        logger.debug("NO ENCONTRADO contentSerieName NI tmdb_id")
        return 0, 0, -1  # Salimos sin guardar

    # TODO configurar para segun el scraper se llame a uno u otro
    tmdb_return = tmdb.find_and_set_infoLabels_tmdb(item)

    # Llegados a este punto podemos tener:
    #  tmdb_return = True: Un item con infoLabels con la información actualizada de la serie
    #  tmdb_return = False: Un item sin información de la peli (se ha dado a cancelar en la ventana)
    #  item.infoLabels['imdb_id'] == "" : No se ha encontrado el identificador de IMDB necesario para continuar, salimos
    if not tmdb_return or not item.infoLabels['imdb_id']:
        # TODO de momento si no hay resultado no añadimos nada,
        # aunq podriamos abrir un cuadro para introducir el identificador/nombre a mano
        logger.debug("NO ENCONTRADO EN TMDB O NO TIENE IMDB_ID")
        return 0, 0, -1

    _id = item.infoLabels['imdb_id']
    if item.infoLabels['title']:
        base_name = item.infoLabels['title']
    else:
        base_name = item.contentSerieName

    base_name = filetools.text2filename(base_name)

    for raiz, subcarpetas, ficheros in filetools.walk(TVSHOWS_PATH):
        for c in subcarpetas:
            if c.endswith("[%s]" % _id):
                path = filetools.join(raiz, c)
                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, exception:
            if exception.errno != errno.EEXIST:
                raise
Exemplo n.º 18
0
def save_library_episodes(path, episodelist, serie, silent=False):
    """
    guarda en la ruta indicada todos los capitulos incluidos en la lista episodelist
    @type path: str
    @param path: ruta donde guardar los episodios
    @type episodelist: list
    @param episodelist: listado de items que representan los episodios que se van a guardar.
    @type serie: item
    @param serie: serie de la que se van a guardar los episodios
    @type silent: bool
    @param silent: establece si se muestra la notificación
    @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
    """
    logger.info("streamondemand.platformcode.library save_library_episodes")

    # No hay lista de episodios, no hay nada que guardar
    if not len(episodelist):
        logger.info("streamondemand.platformcode.library save_library_episodes No hay lista de episodios, "
                    "salimos sin crear strm")
        return 0, 0, 0
    insertados = 0
    sobreescritos = 0
    fallidos = 0

    # Silent es para no mostrar progreso (para library_service)
    if not silent:
        # progress dialog
        p_dialog = platformtools.dialog_progress('streamondemand', 'Aggiunta episodi...')
        p_dialog.update(0, 'Aggiunta episodio...')

    # fix float porque la division se hace mal en python 2.x
    t = float(100) / len(episodelist)

    addon_name = sys.argv[0].strip()
    if not addon_name or addon_name.startswith("default.py"):
        addon_name = "plugin://plugin.video.streamondemand/"

    for i, e in enumerate(episodelist):
        if not silent:
            p_dialog.update(int(math.ceil((i + 1) * t)), 'Aggiunta episodio...', e.title)
        # Añade todos menos el que dice "Añadir esta serie..." o "Descargar esta serie..."
        if e.action == "add_serie_to_library" or e.action == "download_all_episodes":
            continue

        season_episode = scrapertools.get_season_and_episode(e.title.lower())
        e.infoLabels = serie.infoLabels
        e.contentSeason, e.contentEpisodeNumber = season_episode.split("x")

        filename = "{0}.strm".format(season_episode)
        fullfilename = filetools.join(path, filename)

        nuevo = not filetools.exists(fullfilename)
        if e.infoLabels.get("tmdb_id"):
            tmdb.find_and_set_infoLabels_tmdb(e, config.get_setting("scrap_ask_name") == "true")

        e.strm = True

        # Para depuración creamos un .json al lado del .strm, para poder visualizar que parametros se estan guardando
        filetools.write(fullfilename + ".json", e.tojson())

        # TODO fix temporal, en algunas ocasiones no se reproduce desde la biblioteca de kodi si tiene valor
        # por ejemplo serie doctor who, en seriesblanco
        e.infoLabels['tmdb_id'] = ""

        if filetools.write(fullfilename, '{addon}?{url}'.format(addon=addon_name, url=e.tourl())):
            if nuevo:
                insertados += 1
            else:
                sobreescritos += 1
        else:
            fallidos += 1

        if not silent and p_dialog.iscanceled():
            break

    if not silent:
        p_dialog.close()

    # si se han añadido episodios los actualizamos en la biblioteca de Kodi con la serie
    if fallidos >= 0:
        # TODO arreglar el porque hay que poner la ruta special
        ruta = "special://home/userdata/addon_data/plugin.video.streamondemand/library/SERIES/" + \
               "{0} [{1}]".format(serie.contentSerieName.strip().lower(), serie.channel).lower() + "/"
        update(ruta)

    logger.debug("insertados= {0}, sobreescritos={1}, fallidos={2}".format(insertados, sobreescritos, fallidos))
    return insertados, sobreescritos, fallidos
Exemplo n.º 19
0
def save_library_movie(item):
    """
    guarda en la libreria de peliculas el elemento item, con los valores que contiene.
    @type item: item
    @param item: elemento que se va a guardar.
    @rtype insertados: int
    @return:  el número de elementos insertados
    @rtype sobreescritos: int
    @return:  el número de elementos sobreescritos
    @rtype fallidos: int
    @return:  el número de elementos fallidos o -1 si ha fallado todo
    """
    logger.info("streamondemand.platformcode.library savelibrary_movie")
    insertados = 0
    sobreescritos = 0
    fallidos = 0
    logger.debug(item.tostring('\n'))

    # Itentamos obtener el titulo correcto:
    # 1. contentTitle: Este deveria ser el sitio correcto
    # 2. fulltitle
    # 3. title
    titulo = item.contentTitle
    if not titulo:
        titulo = item.fulltitle
    if not titulo:
        titulo = item.title

    # Colocamos el titulo en su sitio para que tmdb lo localize
    item.contentTitle = titulo

    # Si llegados a este punto no tenemos titulo, salimos
    if not item.contentTitle or not item.channel:
        return 0, 0, -1  # Salimos sin guardar
    # TODO configurar para segun el scraper se llamara a uno u otro
    tmdb.find_and_set_infoLabels_tmdb(item, config.get_setting("scrap_ask_name") == "true")

    # Llegados a este punto podemos tener:
    # Un item con infoLabels con la información actualizada de la peli
    # Un item sin información de la peli (se ha dado a cancelar en la ventana)

    # progress dialog
    p_dialog = platformtools.dialog_progress('streamondemand', 'Aggiunta film...')
    filename = "{0} [{1}].strm".format(item.fulltitle.strip().lower(), item.channel)
    logger.debug(filename)
    fullfilename = filetools.join(MOVIES_PATH, filename)
    addon_name = sys.argv[0].strip()
    if not addon_name or addon_name.startswith("default.py"):
        addon_name = "plugin://plugin.video.streamondemand/"

    if filetools.exists(fullfilename):
        logger.info("streamondemand.platformcode.library savelibrary el fichero existe. Se sobreescribe")
        sobreescritos += 1
    else:
        insertados += 1

    p_dialog.update(100, 'Añadiendo película...', item.contentTitle)
    p_dialog.close()

    item.strm = True

    # Para depuración creamos un .json al lado del .strm, para poder visualizar que parametros se estan guardando
    filetools.write(fullfilename + ".json", item.tojson())

    if filetools.write(fullfilename, '{addon}?{url}'.format(addon=addon_name, url=item.tourl())):
        if 'tmdb_id' in item.infoLabels:
            create_nfo_file(item.infoLabels['tmdb_id'], fullfilename[:-5], "cine")
        else:
            if filetools.exists(fullfilename[:-5] + ".nfo"):
                filetools.remove(fullfilename[:-5] + ".nfo")

        # actualizamos la biblioteca de Kodi con la pelicula
        # TODO arreglar el porque hay que poner la ruta special
        ruta = "special://home/userdata/addon_data/plugin.video.streamondemand/library/CINE/"
        update(ruta)

        return insertados, sobreescritos, fallidos
    else:
        return 0, 0, 1