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
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