def channels_list(category='*'):
    langlistv = ["","ES","EN","IT","PT"] # Esto no me gusta mucho
    idioma = langlistv[int(config.get_setting("languagefilter"))]
    
    itemlist = []
    if category=='*': 
        itemlist.append( Item( viewmode="movie", title="Tengo una URL", channel="tengourl", action='mainlist',language="", category="F,S,D,A", type="generic"))
    if config.get_setting("personalchannel")=="true":
        itemlist.append( Item( title=config.get_setting("personalchannelname"), channel="personal", action='mainlist', language="", category="*", type="generic",thumbnail= config.get_setting("personalchannellogo")))
    if config.get_setting("personalchannel2")=="true":
        itemlist.append( Item( title=config.get_setting("personalchannelname2"), channel="personal2", action='mainlist', language="", category="*", type="generic",thumbnail=config.get_setting("personalchannellogo2")))
    if config.get_setting("personalchannel3")=="true":
        itemlist.append( Item( title=config.get_setting("personalchannelname3"), channel="personal3", action='mainlist', language="", category="*", type="generic",thumbnail=config.get_setting("personalchannellogo3")))
    if config.get_setting("personalchannel4")=="true":
        itemlist.append( Item( title=config.get_setting("personalchannelname4"), channel="personal4", action='mainlist', language="", category="*", type="generic", thumbnail=config.get_setting("personalchannellogo4")))
    if config.get_setting("personalchannel5")=="true":
        itemlist.append( Item( title=config.get_setting("personalchannelname5"), channel="personal5", action='mainlist', language="", category="*", type="generic", thumbnail=config.get_setting("personalchannellogo5")))
    
    if os.path.exists(PATH_LIST_CHANNELS_JSON): # Si existe list_channels.json lo abrimos...
        indice_canales= json.load(open(PATH_LIST_CHANNELS_JSON))
    else: # Si no existe list_channels.json lo creamos
        indice_canales= updater.sincronizar_canales()
        
    for channel in sorted(indice_canales):
        
        # Control parental
        if config.get_setting("enableadultmode") == "false" and indice_canales[channel]['adult']=='true': continue 
        
        # Canales especiales (personal.py, libreria.py, etc..)
        if indice_canales[channel]['title']=='' or not(indice_canales[channel]['type'] == "generic" or indice_canales[channel]['type'] == "xbmc"): continue
        
        # Filtrado por categoria y añadimos plot
        categoria= indice_canales[channel]['category'].encode('utf8')
        if category<>"*" and category not in categoria: continue
        plot = categoria.replace("VOS","Versión original subtitulada").replace("F","Películas").replace("S","Series").replace("D","Documentales").replace("A","Anime").replace(",",", ")
        
        # Filtrado por idioma
        if indice_canales[channel]['language'] !='' and idioma !="" and idioma not in indice_canales[channel]['language']: continue
        
        # Añadimos el thumbnail
        thumbnail= indice_canales[channel]['thumbnail']
        if thumbnail=='':
            thumbnail=urlparse.urljoin(config.get_thumbnail_path(),indice_canales[channel]['channel'] +".png")
        
        itemlist.append(Item(title= indice_canales[channel]['title'].encode('utf8'), channel=indice_canales[channel]['channel'].encode('utf8'), action='mainlist', language=indice_canales[channel]['language'], category=categoria, type=indice_canales[channel]['type'], thumbnail= thumbnail, plot=plot)) 
        #logger.info("[channelselector] channel: " + str(channel))
    return itemlist
def EjecutarFuncion(item):
    logger.info("[launcher.py] EjecutarFuncion")
    logger.info("-----------------------------------------------------------------------")
    logger.info("EjecutarFuncion: Canal=" + item.channel + " Acción=" + item.action)    
    logger.info("-----------------------------------------------------------------------")
    itemlist = []
    
    #Si la acción es mainlist comprueba si hay actualizaciónes para el canal antes de cargarlo.
    if item.action == "mainlist":
        if item.channel=="channelselector":
            '''
            Esta advertencia es solo para la version beta
            '''
            dialog = xbmcgui.Dialog()
            dialog.ok(u'Atención',u'Esta es una versión no oficial de pelisalacarta de uso exclusivo para desarrolladores.',
                u'Puede descargar la versión oficial en http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/')
            
            config.set_setting('enableadultmode','false')
               
            if config.get_setting("updatecheck2")=="true": 
                #xbmcgui.Dialog().notification('Actualizaciones automaticas', 'Buscado nueva versión...', xbmcgui.NOTIFICATION_INFO ,1000)
                itemlist.extend(ActualizarPlugin())
            
            if config.get_setting("updatechannels")=="true" and len(itemlist)==0: # Si hay una nueva version del plugin no actualizar canales
               
                while xbmcgui.Window(xbmcgui.getCurrentWindowId()).getProperty("updatelibrary2")=="run": time.sleep(0.5) # Si se esta actualizando la libreria (library_service) esperar
                xbmcgui.Window(xbmcgui.getCurrentWindowId()).setProperty("updatelibrary2", "disabled")
                
                #Inicio = time.time() 
                multihilo= (config.get_setting("multithread") !='false' ) #Por defecto esta activado
                listahilos=[]
                if multihilo:
                    from threading import Thread
                    Trd = Thread(target=ActualizarCanal,args=[item.channel,config.get_localized_string(30064)])
                    listahilos.append(Trd)
                    Trd.start()
                    
                    xbmcgui.Dialog().notification('Actualizaciones automaticas', 'Buscado nuevos canales...', xbmcgui.NOTIFICATION_INFO ,1000)
                    Trd = Thread(target=updater.sincronizar_canales,args=[])
                    listahilos.append(Trd)
                    Trd.start()
                    
                    Trd = Thread(target=ActualizarServers,args=[])
                    listahilos.append(Trd)
                    Trd.start()
                else:
                    ActualizarCanal(item.channel,config.get_localized_string(30064))
                    xbmcgui.Dialog().notification('Actualizaciones automaticas', 'Buscado nuevos canales...', xbmcgui.NOTIFICATION_INFO ,1000)
                    updater.sincronizar_canales()
                    ActualizarServers()
                    
                if multihilo:
                    #esperar a q todos los hilo acaben
                    for hilo in listahilos:
                        while hilo.isAlive():
                          time.sleep(0.5)
                #print "########################## " + str(time.time()-Inicio) 
                if xbmcgui.Window(xbmcgui.getCurrentWindowId()).getProperty("updatelibrary2") =="ready": #Si se han añadido nuevos capitulos (library_service) , y no se ha hecho aun actualizar
                    xbmc.executebuiltin('UpdateLibrary(video)')
                xbmcgui.Window(xbmcgui.getCurrentWindowId()).setProperty("updatelibrary2", "enabled")
             
        elif config.get_setting("updatechannels")=="true": 
            itemlist.append(ActualizarCanal(item.channel,"¡Canal descargado y actualizado!"))
        

    # Importa el canal
    if item.channel: channelmodule = ImportarCanal(item.channel)
    
#######################################################################
#        Aqui se ejecuta cada función segun el canal                  #
#  si no se cumple ninguna condición se ejecuta la funcion generica:  #
#               itemlist = canal.accion(item)                         #
#######################################################################

    
    #Si no hay canal, ejecuta la función dentro de este launcher
    if item.channel=="":
      exec "itemlist = "+item.action+"(item)"
    
    else:
      # play - es el menú de reproducción de un vídeo
      if item.action=="play":
          logger.info("ACCION PLAY")
          if hasattr(channelmodule, 'play'):
              logger.info("[launcher.py] executing channel 'play' method")
              logger.info(channelmodule.__file__)
              itemlist = channelmodule.play(item)
          else:
              logger.info("[launcher.py] no channel 'play' method, executing core method")
              itemlist.append(item)
              
          if len(itemlist)>0:
              itemlist = play(itemlist[0])

      # search - es para abrir el teclado y enviar el texto
      elif item.action=="search":
          logger.info("ACCION SEARCH")
          keyboard = xbmc.Keyboard("")
          keyboard.doModal()
          if (keyboard.isConfirmed()):
              tecleado = keyboard.getText()
              itemlist = channelmodule.search(item,tecleado)
          else:
              itemlist = []

      # Todas las demas Funciones
      else:
          #Si existe la funcion en el canal la ejecuta
          if hasattr(channelmodule, item.action):
              logger.info("[launcher.py] - Ejectuando accion: " + item.channel + "." + item.action + "(item)")
              exec "itemlist = channelmodule." + item.action + "(item)"
          #Si existe la funcion en el launcher la ejecuta
          elif hasattr(sys.modules[__name__], item.action):
              logger.info("[launcher.py] - Ejectuando accion: " + item.action + "(item)")
              exec "itemlist =" + item.action + "(item)"
          #Si no existe devuelve un error
          else:
              logger.info("[launcher.py] - No se ha encontrado la accion ["+ item.action + "] en el canal ["+item.channel+"] ni en el launcher")
 
    #Si no es una lista lo convierte a un string, para que no se muestre en pantalla ni de error por ser NoneType         
    if not type(itemlist)==list: itemlist=""
    
    #Aplicar varias modificaciones a los resultados (fanarts, menus contextuales predefinidos, etc...)
    for x, item in enumerate(itemlist):
      if item.show:
          if itemlist[x].context:
            itemlist[x].context= itemlist[x].context + "|Añadir esta serie a la biblioteca,add_serie_to_library|Descargar todos los episodios de la serie,download_all_episodes"
          else:
            itemlist[x].context="Añadir esta serie a la biblioteca,add_serie_to_library|Descargar todos los episodios de la serie,download_all_episodes"
          itemlist[x].refered_action=item.action
      if item.action=="play" or item.action =="findvideos":
          if itemlist[x].context:
            itemlist[x].context= itemlist[x].context + "|Buscar Trailer,search_trailer"
          else:
            itemlist[x].context="Buscar Trailer,search_trailer"

      if item.fanart=="":
        channel_fanart = os.path.join( config.get_runtime_path(), 'resources', 'images', 'fanart', item.channel+'.jpg')
        if os.path.exists(channel_fanart):
            item.fanart = channel_fanart
        else:
            item.fanart = os.path.join(config.get_runtime_path(),"fanart.jpg")

    logger.info("[launcher.py] - EjecutarFuncion - Items devueltos")  
    logger.info("-----------------------------------------------------------------------")
    for item in itemlist:
      logger.info(item.tostring())
    logger.info("-----------------------------------------------------------------------")
    
    return itemlist
示例#3
0
def EjecutarFuncion(item):
    logger.info("[launcher.py] EjecutarFuncion")
    logger.info(
        "-----------------------------------------------------------------------"
    )
    logger.info("EjecutarFuncion: Canal=" + item.channel + " Acción=" +
                item.action)
    logger.info(
        "-----------------------------------------------------------------------"
    )
    itemlist = []

    #Si la acción es mainlist comprueba si hay actualizaciónes para el canal antes de cargarlo.
    if item.action == "mainlist":
        if item.channel == "channelselector":
            '''
            Esta advertencia es solo para la version beta
            '''
            dialog = xbmcgui.Dialog()
            dialog.ok(
                u'Atención',
                u'Esta es una versión no oficial de pelisalacarta de uso exclusivo para desarrolladores.',
                u'Puede descargar la versión oficial en http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/'
            )

            config.set_setting('enableadultmode', 'false')

            if config.get_setting("updatecheck2") == "true":
                #xbmcgui.Dialog().notification('Actualizaciones automaticas', 'Buscado nueva versión...', xbmcgui.NOTIFICATION_INFO ,1000)
                itemlist.extend(ActualizarPlugin())

            if config.get_setting("updatechannels") == "true" and len(
                    itemlist
            ) == 0:  # Si hay una nueva version del plugin no actualizar canales

                while xbmcgui.Window(xbmcgui.getCurrentWindowId()).getProperty(
                        "updatelibrary2") == "run":
                    time.sleep(
                        0.5
                    )  # Si se esta actualizando la libreria (library_service) esperar
                xbmcgui.Window(xbmcgui.getCurrentWindowId()).setProperty(
                    "updatelibrary2", "disabled")

                #Inicio = time.time()
                multihilo = (config.get_setting("multithread") != 'false'
                             )  #Por defecto esta activado
                listahilos = []
                if multihilo:
                    from threading import Thread
                    Trd = Thread(target=ActualizarCanal,
                                 args=[
                                     item.channel,
                                     config.get_localized_string(30064)
                                 ])
                    listahilos.append(Trd)
                    Trd.start()

                    xbmcgui.Dialog().notification(
                        'Actualizaciones automaticas',
                        'Buscado nuevos canales...', xbmcgui.NOTIFICATION_INFO,
                        1000)
                    Trd = Thread(target=updater.sincronizar_canales, args=[])
                    listahilos.append(Trd)
                    Trd.start()

                    Trd = Thread(target=ActualizarServers, args=[])
                    listahilos.append(Trd)
                    Trd.start()
                else:
                    ActualizarCanal(item.channel,
                                    config.get_localized_string(30064))
                    xbmcgui.Dialog().notification(
                        'Actualizaciones automaticas',
                        'Buscado nuevos canales...', xbmcgui.NOTIFICATION_INFO,
                        1000)
                    updater.sincronizar_canales()
                    ActualizarServers()

                if multihilo:
                    #esperar a q todos los hilo acaben
                    for hilo in listahilos:
                        while hilo.isAlive():
                            time.sleep(0.5)
                #print "########################## " + str(time.time()-Inicio)
                if xbmcgui.Window(xbmcgui.getCurrentWindowId()).getProperty(
                        "updatelibrary2"
                ) == "ready":  #Si se han añadido nuevos capitulos (library_service) , y no se ha hecho aun actualizar
                    xbmc.executebuiltin('UpdateLibrary(video)')
                xbmcgui.Window(xbmcgui.getCurrentWindowId()).setProperty(
                    "updatelibrary2", "enabled")

        elif config.get_setting("updatechannels") == "true":
            itemlist.append(
                ActualizarCanal(item.channel,
                                "¡Canal descargado y actualizado!"))

    # Importa el canal
    if item.channel: channelmodule = ImportarCanal(item.channel)

    #######################################################################
    #        Aqui se ejecuta cada función segun el canal                  #
    #  si no se cumple ninguna condición se ejecuta la funcion generica:  #
    #               itemlist = canal.accion(item)                         #
    #######################################################################

    #Si no hay canal, ejecuta la función dentro de este launcher
    if item.channel == "":
        exec "itemlist = " + item.action + "(item)"

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

            if len(itemlist) > 0:
                itemlist = play(itemlist[0])

        # search - es para abrir el teclado y enviar el texto
        elif item.action == "search":
            logger.info("ACCION SEARCH")
            keyboard = xbmc.Keyboard("")
            keyboard.doModal()
            if (keyboard.isConfirmed()):
                tecleado = keyboard.getText()
                itemlist = channelmodule.search(item, tecleado)
            else:
                itemlist = []

        # Todas las demas Funciones
        else:
            #Si existe la funcion en el canal la ejecuta
            if hasattr(channelmodule, item.action):
                logger.info("[launcher.py] - Ejectuando accion: " +
                            item.channel + "." + item.action + "(item)")
                exec "itemlist = channelmodule." + item.action + "(item)"
            #Si existe la funcion en el launcher la ejecuta
            elif hasattr(sys.modules[__name__], item.action):
                logger.info("[launcher.py] - Ejectuando accion: " +
                            item.action + "(item)")
                exec "itemlist =" + item.action + "(item)"
            #Si no existe devuelve un error
            else:
                logger.info("[launcher.py] - No se ha encontrado la accion [" +
                            item.action + "] en el canal [" + item.channel +
                            "] ni en el launcher")

    #Si no es una lista lo convierte a un string, para que no se muestre en pantalla ni de error por ser NoneType
    if not type(itemlist) == list: itemlist = ""

    #Aplicar varias modificaciones a los resultados (fanarts, menus contextuales predefinidos, etc...)
    for x, item in enumerate(itemlist):
        if item.show:
            if itemlist[x].context:
                itemlist[x].context = itemlist[
                    x].context + "|Añadir esta serie a la biblioteca,add_serie_to_library|Descargar todos los episodios de la serie,download_all_episodes"
            else:
                itemlist[
                    x].context = "Añadir esta serie a la biblioteca,add_serie_to_library|Descargar todos los episodios de la serie,download_all_episodes"
            itemlist[x].refered_action = item.action
        if item.action == "play" or item.action == "findvideos":
            if itemlist[x].context:
                itemlist[x].context = itemlist[
                    x].context + "|Buscar Trailer,search_trailer"
            else:
                itemlist[x].context = "Buscar Trailer,search_trailer"

        if item.fanart == "":
            channel_fanart = os.path.join(config.get_runtime_path(),
                                          'resources', 'images', 'fanart',
                                          item.channel + '.jpg')
            if os.path.exists(channel_fanart):
                item.fanart = channel_fanart
            else:
                item.fanart = os.path.join(config.get_runtime_path(),
                                           "fanart.jpg")

    logger.info("[launcher.py] - EjecutarFuncion - Items devueltos")
    logger.info(
        "-----------------------------------------------------------------------"
    )
    for item in itemlist:
        logger.info(item.tostring())
    logger.info(
        "-----------------------------------------------------------------------"
    )

    return itemlist