Example #1
0
def getitems(item):
    logger.info("getitems")
    itemlist = []

    # Extrae los parámetros
    channel = item.channel
    accion = item.action
    url = item.url
    if url != "none":
        if not "filenium" in url:
            url = urllib.unquote_plus(url)
    server = item.server
    title = item.title
    extra = item.extra
    category = item.category
    fulltitle = item.fulltitle

    try:
        if accion == "mainlist" and config.get_setting(
                "updatechannels") == "true":
            try:
                logger.info("Verificando actualización del canal")
                from core import updater
                actualizado = updater.updatechannel(channel)

                if actualizado:
                    itemlist.append(
                        Item(title="¡Canal descargado y actualizado!"))
            except:
                import sys
                for line in sys.exc_info():
                    logger.error("%s" % line)

        # El item que invocó es importante para obtener el siguiente
        senderitem = Item(title=title,
                          channel=channel,
                          action=accion,
                          url=url,
                          server=server,
                          extra=extra,
                          category=category,
                          fulltitle=fulltitle)
        if "|" in url:
            partes = urllib.unquote_plus(senderitem.url).split("|")
            refered_item = Item(title=partes[0],
                                url=partes[2],
                                thumbnail="",
                                server=partes[1],
                                plot="",
                                extra=partes[3])
            logger.info("refered_item title=" + refered_item.title + ", url=" +
                        refered_item.url + ", server=" + refered_item.server +
                        ", extra=" + refered_item.extra)

        else:
            refered_item = Item()

        # Importa el canal y ejecuta la función
        try:
            exec "from pelisalacarta.channels import " + channel + " as channelmodule"
        except:
            import sys
            for line in sys.exc_info():
                logger.error("%s" % line)
            try:
                exec "from pelisalacarta import " + channel + " as channelmodule"
            except:
                import sys
                for line in sys.exc_info():
                    logger.error("%s" % line)
                try:
                    exec "from core import " + channel + " as channelmodule"
                except:
                    pass

        # play - es el menú de reproducción de un vídeo
        if accion == "play":
            logger.info("ACCION PLAY")
            if hasattr(channelmodule, 'play'):
                logger.info("[launcher.py] executing channel 'play' method")
                logger.info(channelmodule.__file__)
                itemlist = channelmodule.play(senderitem)
                senderitem = itemlist[0]
                senderitem.folder = False
            else:
                logger.info(
                    "[launcher.py] no channel 'play' method, executing core method"
                )
            itemlist = menu_video(senderitem)

        # play_video - genera una playlist con una sola entrada para que wiimc la reproduzca
        elif accion == "play_video":
            logger.info("ACCION PLAY_VIDEO")
            logger.info("url=" + senderitem.url)
            senderitem.folder = False
            itemlist.append(senderitem)

        # search - es el buscador
        elif channel == "buscador" and accion == "mainlist":
            logger.info("ACCION SEARCH (buscador)")
            texto = requestpath.split("plx")[1]
            exec "itemlist = buscador.do_search_results(texto)"

        elif accion == "search":
            logger.info("ACCION SEARCH")
            texto = requestpath.split("plx")[1]
            exec "itemlist = channelmodule." + accion + "(senderitem,texto)"

        # findvideos - debe encontrar videos reproducibles
        elif accion == "findvideos":
            logger.info("ACCION FINDVIDEOS")
            try:
                exec "itemlist = channelmodule." + accion + "(senderitem)"
            except:
                import sys
                for line in sys.exc_info():
                    logger.error("%s" % line)
                itemlist = findvideos(senderitem, channel)

        elif accion == "descargar":
            itemlist = download_item(senderitem, refered_item)
        elif accion == "download_all":
            itemlist = download_all(senderitem, refered_item)
        elif accion == "add_to_favorites":
            itemlist = add_to_favorites(senderitem, refered_item)
        elif accion == "remove_from_favorites":
            itemlist = remove_from_favorites(senderitem, refered_item)
        elif accion == "add_to_downloads":
            itemlist = add_to_downloads(senderitem, refered_item)
        elif accion == "remove_from_downloads":
            itemlist = remove_from_downloads(senderitem, refered_item)

        elif accion == "remove_from_error_downloads":
            itemlist = remove_from_error_downloads(senderitem, refered_item)
        elif accion == "add_again_to_downloads":
            itemlist = add_again_to_downloads(senderitem, refered_item)
        elif accion == "send_to_jdownloader":
            itemlist = send_to_jdownloader(senderitem, refered_item)
        elif accion == "search_trailer":
            itemlist = search_trailer(senderitem, refered_item)
        elif accion == "add_serie_to_wiideoteca":
            itemlist = wiideoteca.AgregarSerie(senderitem)
        elif accion == "UltimoVisto":
            itemlist = wiideoteca.UltimoVisto(senderitem)

        else:
            if senderitem.url == "none":
                senderitem.url = ""
            exec "itemlist.extend( channelmodule." + accion + "(senderitem) )"
        '''
        # Lo almacena en cache
        fichero = open( cached_file ,"wb")
        cerealizer.dump(itemlist,fichero)
        fichero.close()
        '''

        logger.info("Items devueltos")
        for item in itemlist:
            logger.info(" " + item.title + " | " + item.url + " | " +
                        item.action)
    except:
        import traceback, sys
        from pprint import pprint
        exc_type, exc_value, exc_tb = sys.exc_info()
        lines = traceback.format_exception(exc_type, exc_value, exc_tb)
        for line in lines:
            line_splits = line.split("\n")
            for line_split in line_splits:
                logger.error(line_split)

    return itemlist, channel
Example #2
0
def getitems(requestpath):
    logger.info("getitems")
    itemlist = []

    # La ruta empleada en la petición
    ruta = requestpath.split("?")[0]
    logger.info("ruta=" + ruta)

    # Los parámetros son las partes de la ruta separadas por "/"
    rutas = ruta.split("/")
    cadena = " "

    # Las imprime en el log
    for linea in rutas:
        cadena = cadena + linea + " | "
    logger.info(cadena)

    # Extrae los parámetros
    channel = rutas[2]
    accion = rutas[3]
    url = rutas[4]
    if url != "none": url = urllib.unquote_plus(url)
    server = rutas[5].lower()
    title = urllib.unquote_plus(rutas[6])
    extra = urllib.unquote_plus(rutas[7])
    category = urllib.unquote_plus(rutas[8])
    fulltitle = urllib.unquote_plus(rutas[9])
    logger.info("channel=" + channel + ", accion=" + accion + ", url=" + url +
                ", server=" + server + ", title=" + title + ", extra=" +
                extra + ", category=" + category + " fulltitle=" + fulltitle)
    print "channel=" + channel + ", accion=" + accion + ", url=" + url + ", server=" + server + ", title=" + title + ", extra=" + extra + ", category=" + category

    if accion == "mainlist" and config.get_setting("updatechannels") == "true":
        logger.info("Verificando actualización del canal")
        from core import updater
        actualizado = updater.updatechannel(channel)

        if actualizado:
            itemlist.append(Item(title="¡Canal descargado y actualizado!"))

    # Obtiene un nombre válido para la cache
    hashed_url = binascii.hexlify(md5.new(requestpath).digest())
    cached_file = os.path.join(config.get_data_path(), "tmp", "cache",
                               hashed_url)
    logger.info("cached_file=" + cached_file)

    # Si el fichero está en cache
    if channel not in ("trailertools", "buscador", "configuracion", "pyload",
                       "wiidoteca") and os.path.exists(cached_file):  # <--
        logger.info("Reading from cache")
        fichero = open(cached_file, "rb")
        itemlist = cerealizer.load(fichero)
        fichero.close()

    else:
        logger.info("Not cached")

        ### ESTUDIAR
        #if accion not in ("play","findvideos","detail"): titulo = ""
        ###
        # El item que invocó es importante para obtener el siguiente
        senderitem = Item(title=title,
                          channel=channel,
                          action=accion,
                          url=url,
                          server=server,
                          extra=extra,
                          category=category,
                          fulltitle=fulltitle)
        if "|" in url:
            ## <-- unquote despues de split para no interferir cuando | aparece en algun campo
            partes = senderitem.url.split("|")
            decpartes = []
            for parte in partes:
                decpartes.append(urllib.unquote_plus(parte))
            partes = decpartes
            ## <--
            refered_item = Item(title=partes[0],
                                url=partes[2],
                                thumbnail=partes[5],
                                server=partes[1],
                                plot=partes[6],
                                extra=partes[3],
                                fulltitle=partes[4])
            logger.info("refered_item title=" + refered_item.title + ", url=" +
                        refered_item.url + ", server=" + refered_item.server +
                        ", extra=" + refered_item.extra)

        else:
            refered_item = Item()

        # Importa el canal y ejecuta la función
        if channel in ("configuracion", "trailertools", "buscador"):
            exec "import " + channel
        else:
            try:
                exec "from tvalacarta.channels import " + channel
            except:
                exec "from core import " + channel

        # play - es el menú de reproducción de un vídeo
        if accion == "play":
            logger.info("ACCION PLAY")
            print "ACCION PLAY"
            try:
                exec "itemlist = " + channel + ".play(senderitem)"
                print "itemlist = " + channel + ".play(senderitem)"
                senderitem = itemlist[0]
                senderitem.folder = False
            except:
                import sys
                for line in sys.exc_info():
                    logger.error("%s" % line)

            itemlist = menu_video(senderitem)

        # play_video - genera una playlist con una sola entrada para que wiimc la reproduzca
        elif accion == "play_video":
            logger.info("ACCION PLAY_VIDEO")
            senderitem.folder = False
            itemlist.append(senderitem)

        # search - es el buscador
        elif accion == "search":
            logger.info("ACCION SEARCH")
            texto = requestpath.split(".rss")[1]
            exec "itemlist = " + channel + "." + accion + "(senderitem,texto)"

        # findvideos - debe encontrar videos reproducibles
        elif accion == "findvideos":
            logger.info("ACCION FINDVIDEOS")
            try:
                exec "itemlist = " + channel + "." + accion + "(senderitem)"
            except:
                import sys
                for line in sys.exc_info():
                    logger.error("%s" % line)
                itemlist = findvideos(senderitem, channel)

        elif accion == "descargar":
            itemlist = download_item(senderitem, refered_item)
        elif accion == "downloadall":  ## <--
            itemlist = downloadall(senderitem, refered_item)  ## <--
        elif accion == "add_to_favorites":
            itemlist = add_to_favorites(senderitem, refered_item)
        elif accion == "remove_from_favorites":
            itemlist = remove_from_favorites(senderitem, refered_item)
        elif accion == "add_to_downloads":
            itemlist = add_to_downloads(senderitem, refered_item)
        elif accion == "remove_from_downloads":
            itemlist = remove_from_downloads(senderitem, refered_item)

        elif accion == "remove_from_error_downloads":
            itemlist = remove_from_error_downloads(senderitem, refered_item)
        elif accion == "add_again_to_downloads":
            itemlist = add_again_to_downloads(senderitem, refered_item)
        elif accion == "send_to_jdownloader":
            itemlist = send_to_jdownloader(senderitem, refered_item)
        elif accion == "send_to_pyload":
            itemlist = send_to_pyload(senderitem, refered_item)
        elif accion == "search_trailer":
            itemlist = search_trailer(senderitem, refered_item)
        elif accion == "add_serie_to_wiideoteca":
            itemlist = wiideoteca.AgregarSerie(senderitem)
        elif accion == "UltimoVisto":
            itemlist = wiideoteca.UltimoVisto(senderitem)

        else:
            if senderitem.url == "none":
                senderitem.url = ""
            exec "itemlist.extend( " + channel + "." + accion + "(senderitem) )"

        # Lo almacena en cache
        fichero = open(cached_file, "wb")
        cerealizer.dump(itemlist, fichero)
        fichero.close()

    logger.info("Items devueltos")
    for item in itemlist:
        logger.info(" " + item.title + " | " + item.url + " | " + item.action)

    return itemlist, channel