def mainlist(item): logger.info() itemlist = [] item.category = 'Buscar' itemlist.append( item.clone( channel='tmdblists', action='mainlist', title='Listas y búsquedas en TMDB', thumbnail=config.get_thumb('bookshelf'), plot= 'Buscar personas y ver listas de películas y series de la base de datos de The Movie Database' )) itemlist.append( item.clone( action='search', search_type='movie', title='Buscar Película ...', thumbnail=config.get_thumb('movie'), plot= 'Escribir el nombre de una película para buscarla en los canales de películas' )) itemlist.append( item.clone( action='search', search_type='tvshow', title='Buscar Serie ...', thumbnail=config.get_thumb('tvshow'), plot= 'Escribir el nombre de una serie para buscarla en los canales de series' )) itemlist.append( item.clone( action='search', search_type='documentary', title='Buscar Documental ...', thumbnail=config.get_thumb('documentary'), plot= 'Escribir el nombre de un documental para buscarlo en los canales de documentales' )) itemlist.append( item.clone( action='search', search_type='all', title='Buscar Película y/o Serie ...', plot= 'Buscar indistintamente películas o series en todos los canales del addon' )) # ~ itemlist.append(item.clone( action='show_help', title='Información sobre búsquedas', folder=False, thumbnail=config.get_thumb('help') )) return itemlist
def findvideos(item): logger.info() itemlist = [] list_opciones = [] IDIOMAS = {"banderita1": "Español", "banderita2": "VOSE", "banderita3": "Latino"} url = "http://estrenosli.org/ver-online-" + item.url data = httptools.downloadpage(url).data data = re.sub(r"\n|\r|\t|\s{2}| ", "", data) patron = '<div class="content"><a href="([^"]+).*?' patron += '<div class="content_mini"><span class="([^"]+)' matches = re.compile(patron, re.DOTALL).findall(data) for url, banderita in matches: idioma = "" if banderita in IDIOMAS: idioma = " [%s]" % IDIOMAS[banderita] data = httptools.downloadpage(url).data data = re.sub(r"\n|\r|\t|\s{2}| ", "", data) if item.extra == 'multi-episodie': patron = '<div class="linksDescarga"><span class="titulo">Video Online:([^<]+).*?<a href="([^"]+)' matches = re.compile(patron, re.DOTALL).findall(data) for capitulo, url in matches: s = servertools.findvideos(url, skip=True) if s: itemlist.append(item.clone(url=s[0][1], action="play", folder=False, server=s[0][2], title="Ver %s en %s%s" % ( capitulo.strip(), s[0][2].capitalize(), idioma), thumbnail2=item.thumbnail, thumbnail=config.get_thumb("server_" + s[0][2] + ".png"))) else: import os for s in servertools.findvideos(data): itemlist.append(item.clone(url=s[1], action="play", folder=False, server=s[2], title="Ver en %s%s" % (s[2].capitalize(), idioma), thumbnail2=item.thumbnail, thumbnail=os.path.join(config.get_runtime_path(), "resources", "media", "servers", "server_" + s[2] + ".png"))) # Insertar items "Buscar trailer" y "Añadir a la videoteca" if itemlist and item.extra == "movie": if item.contentQuality: title = "%s [%s]" % (item.contentTitle, item.contentQuality) else: title = item.contentTitle itemlist.insert(0, item.clone(channel="trailertools", action="buscartrailer", text_color=color3, title=title, viewmode="list")) if config.get_videolibrary_support(): itemlist.append(Item(channel=item.channel, title="Añadir película a la videoteca", action="add_pelicula_to_library", url=item.url, text_color="green", contentTitle=item.contentTitle, extra="library", thumbnail=thumbnail_host)) return itemlist
def search_list(item): logger.info() itemlist = [] data = get_source(item.url) patron = 'img title.*?src=(.*?) width=.*?class=tisearch><a href=(.*?)>(.*?)<\/a>' matches = re.compile(patron, re.DOTALL).findall(data) for scrapedthumb, scrapedurl, scrapedtitle in matches: title = scrapedtitle url = scrapedurl thumbnail = scrapedthumb itemlist.append(item.clone(title=title, url=url, thumbnail=thumbnail, action='findvideos')) # Pagination < link next_page = scrapertools.find_single_match(data, '<link rel=next href=(.*?) />') if next_page: itemlist.append(Item(channel=item.channel, action="search_list", title='>> Pagina Siguiente', url=next_page, thumbnail=config.get_thumb("thumb_next.png"))) return itemlist
def render_items(itemlist, parent_item): """ Función encargada de mostrar el itemlist en kodi, se pasa como parametros el itemlist y el item del que procede @type itemlist: list @param itemlist: lista de elementos a mostrar @type parent_item: item @param parent_item: elemento padre """ # Si el itemlist no es un list salimos if not type(itemlist) == list: return # Si no hay ningun item, mostramos un aviso if not len(itemlist): itemlist.append( Item(title='No hay elementos que mostrar', thumbnail=config.get_thumb('roadblock'))) # Asignamos variables handle = int(sys.argv[1]) breadcrumb = parent_item.category if parent_item.category != '' else parent_item.channel # Formatear títulos de manera standard para los listados de pelis/series de los canales if parent_item.channel == 'search' or ( parent_item.channel != 'tracking' and itemlist[0].contentType in ['movie', 'tvshow']): #, 'season', 'episode' itemlist = formatear_titulos(itemlist) # Colores personalizados para menú contextual colores = {} colores['tracking'] = config.get_setting('context_tracking_color', default='blue') colores['search_exact'] = config.get_setting('context_search_exact_color', default='gold') colores['search_similar'] = config.get_setting( 'context_search_similar_color', default='yellow') colores['download'] = config.get_setting('context_download_color', default='orange') colores['trailer'] = config.get_setting('context_trailer_color', default='pink') # Recorremos el itemlist for item in itemlist: #logger.debug(item) # Si no hay action o es findvideos/play, folder=False pq no se va a devolver ningún listado if item.action in ['findvideos', 'play', '']: item.folder = False # Si el item no contiene categoría, le ponemos la del item padre if item.category == '': item.category = parent_item.category # Si hay color se aplica al título y se suprime el tag para que no se arrastre if item.text_color != '': item.title = '[COLOR %s]%s[/COLOR]' % (item.text_color, item.title) item.__dict__.pop('text_color') # Creamos el listitem listitem = xbmcgui.ListItem(item.title) # Añadimos los infoLabels set_infolabels(listitem, item) # No arrastrar plot si no es una peli/serie/temporada/episodio if item.plot and item.contentType not in [ 'movie', 'tvshow', 'season', 'episode' ]: item.__dict__['infoLabels'].pop('plot') # Montamos el menu contextual y se suprime el tag para que no se arrastre context_commands = set_context_commands(item, parent_item, colores) listitem.addContextMenuItems(context_commands) if item.context: item.__dict__.pop('context') # IsPlayable necesario con setResolvedUrl para recibir un "id" en sys.argv[1] (sino recibiría -1) if item.action == 'findvideos': listitem.setProperty('IsPlayable', 'true') if item.channel == 'tracking': # Generar url con los datos mínimos pq Kodi indexa con la url exacta en la tabla files. # De esta manera, aunque se cambien title,infoLabels,thumbnail,etc, la url se mantendrá igual # y no se perderán las marcas de visto/no visto propias de Kodi. it_minimo = Item( channel='tracking', action='findvideos', folder=False, title='', contentType=item.contentType, infoLabels={'tmdb_id': item.infoLabels['tmdb_id']}) if item.contentType == 'episode': it_minimo.infoLabels['season'] = item.infoLabels['season'] it_minimo.infoLabels['episode'] = item.infoLabels[ 'episode'] if item.action == 'findvideos' and item.channel == 'tracking': item_url = config.build_url(it_minimo) else: item_url = config.build_url(item) xbmcplugin.addDirectoryItem(handle=handle, url=item_url, listitem=listitem, isFolder=item.folder) # Fijar los tipos de vistas... if parent_item.channel == 'mainmenu' or ( parent_item.channel == 'tracking' and parent_item.action in ['mainlist', 'mainlist_listas']): xbmcplugin.setContent(handle, '') # vista con: Lista amplia, Muro de iconos elif parent_item.channel == 'tracking' and parent_item.action in [ 'mainlist_series', 'mainlist_episodios', 'serie_temporadas', 'serie_episodios' ]: xbmcplugin.setContent( handle, 'tvshows' ) # vista con: Lista, Cartel, Mays., Muro de información, Lista amplia, Muro, Pancarta, Fanart else: xbmcplugin.setContent( handle, 'movies' ) # vista con: Lista, Cartel, Mays., Muro de información, Lista amplia, Muro, Fanart # Fijamos el "breadcrumb" xbmcplugin.setPluginCategory(handle=handle, category=breadcrumb) # No ordenar items orden = xbmcplugin.SORT_METHOD_NONE if parent_item.channel == 'tracking': if parent_item.action == 'serie_temporadas': orden = xbmcplugin.SORT_METHOD_TITLE xbmcplugin.addSortMethod(handle=handle, sortMethod=orden) # Cerramos el directorio xbmcplugin.endOfDirectory(handle=handle, succeeded=True) # Fijar la vista if parent_item.channel == 'tracking': if parent_item.action == 'mainlist_pelis': viewmode = config.get_setting('tracking_viewmode_movies', default=0) elif parent_item.action == 'mainlist_series': viewmode = config.get_setting('tracking_viewmode_tvshows', default=0) elif parent_item.action == 'serie_temporadas': viewmode = config.get_setting('tracking_viewmode_seasons', default=0) elif parent_item.action == 'serie_episodios': viewmode = config.get_setting('tracking_viewmode_episodes', default=0) else: viewmode = 0 if viewmode > 0: # ~ Lista(50), Cartel(51), Mays.(53), Muro de información(54), Lista amplia(55), Muro(500), Fanart(502) # ~ List(50), Poster(51), Shift(53), InfoWall(54), WideList(55), Wall(500), Fanart(502) viewmodes = [0, 50, 51, 53, 54, 55, 500, 502] xbmc.executebuiltin("Container.SetViewMode(%d)" % viewmodes[viewmode]) logger.info('FINAL render_items')
def mainlist(item): logger.info() itemlist = [] item.category = trackingtools.get_current_dbname() db = trackingtools.TrackingData() count_movies = db.get_movies_count() count_shows = db.get_shows_count() count_episodes = db.get_episodes_count() db.close() itemlist.append(item.clone( title = 'Películas (%d)' % count_movies, action = 'mainlist_pelis', thumbnail=config.get_thumb('movie') )) context = [ {'title': 'Info tracking new episodes', 'channel': item.channel, 'action': 'info_tracking_shows'} ] context.append( {'title': 'Buscar ahora nuevos episodios', 'channel': item.channel, 'action': 'doit_tracking_shows'} ) itemlist.append(item.clone( title = 'Series (%d)' % count_shows, action = 'mainlist_series', thumbnail=config.get_thumb('tvshow'), context=context )) itemlist.append(item.clone( title = 'Episodios (%d) recientes' % count_episodes, action = 'mainlist_episodios', thumbnail=config.get_thumb('hot') )) itemlist.append(item.clone( title='Gestionar listas', action='mainlist_listas' )) return itemlist
def activar_lista(item): logger.info() fullfilename = filetools.join(trackingtools.get_tracking_path(), item.lista) if not filetools.exists(fullfilename): platformtools.dialog_ok(config.__addon_name, 'Error, no se encuentra la lista!', item.lista) return False trackingtools.set_current_dbname(item.lista) # ~ platformtools.itemlist_refresh() # mejor con replace=True para que no haya problemas si se vuelve atrás item_inicio = Item( channel='tracking', action='mainlist', title='Seguimiento', thumbnail=config.get_thumb('videolibrary') ) platformtools.itemlist_update(item_inicio, replace=True) return True
def mainlist_listas(item): logger.info() itemlist = [] item.category = 'Listas' current_dbname = trackingtools.get_current_dbname() tracking_path = trackingtools.get_tracking_path() import glob path = filetools.join(tracking_path, '*.sqlite') for fichero in glob.glob(path): lista = filetools.basename(fichero) nombre = lista.replace('.sqlite', '') titulo = nombre if nombre != current_dbname else '[COLOR gold]%s[/COLOR] [lista activa]' % nombre context = [ {'title': 'Gestionar lista', 'channel': item.channel, 'action': 'acciones_lista', 'lista': lista} ] # ídem que intro pero por si se accede al menú contextual itemlist.append(item.clone(action='acciones_lista', lista=lista, title=titulo, folder=False, context=context)) plot = 'Puedes crear varias listas para guardar películas y series. Por ejemplo una infantil, otras temáticas, otras para cada usuario, etc.' plot += ' Desde el menú contextual de cada película o serie tienes la opción de mover o copiar a otras listas.' itemlist.append(item.clone(action='crear_lista', title='Crear nueva lista ...', folder=False, plot=plot, thumbnail=config.get_thumb('booklet'))) plot = 'Si tienes alguna lista en otros dispositivos de tu red puedes copiarla a este.' plot += ' Para poder hacerlo necesitas haber añadido tu dispositivo remoto como fuente desde Kodi y tener acceso a la carpeta dónde tengas las listas.' itemlist.append(item.clone(action='copiar_lista', title='Copiar de otro dispositivo ...', folder=False, plot=plot, thumbnail=config.get_thumb('computer'))) return itemlist
def mainlist(item): logger.info() itemlist = [] item.category = 'TMDB' itemlist.append( item.clone( action='personas', search_type='cast', title='Buscar por Personas (Interpretación) ...', plot= 'Escribir el nombre de un actor o una actriz para listar todas las películas y series en las que ha intervenido.' )) itemlist.append( item.clone( action='personas', search_type='crew', title='Buscar por Personas (Dirección) ...', plot= 'Escribir el nombre de una persona para listar todas las películas y series que ha dirigido.' )) itemlist.append( item.clone(action='listado_personas', search_type='person', extra='popular', title='Personas más Populares')) itemlist.append( item.clone(action='listado', search_type='movie', extra='popular', title='Películas más Populares')) itemlist.append( item.clone(action='listado', search_type='movie', extra='top_rated', title='Películas Mejor Valoradas')) itemlist.append( item.clone(action='listado', search_type='movie', extra='now_playing', title='Películas en Cartelera')) # ~ itemlist.append(item.clone( action='listado', search_type='movie', url = 'movie/upcoming', title='Próximas Películas' )) itemlist.append( item.clone(action='generos', search_type='movie', title='Películas por Géneros')) itemlist.append( item.clone(action='listado', search_type='tvshow', extra='popular', title='Series más Populares')) itemlist.append( item.clone(action='listado', search_type='tvshow', extra='top_rated', title='Series Mejor Valoradas')) itemlist.append( item.clone(action='listado', search_type='tvshow', extra='on_the_air', title='Series emitiéndose actualmente')) # ~ itemlist.append(item.clone( action='listado', search_type='tvshow', url = 'tv/airing_today', title='Series que se emiten Hoy' )) itemlist.append( item.clone(action='generos', search_type='tvshow', title='Series por Géneros')) itemlist.append( item.clone(action='show_help', title='Información / Ayuda', folder=False, thumbnail=config.get_thumb('help'))) return itemlist
def mainlist(item): logger.info() itemlist = [] thumb_filmaffinity = os.path.join(config.get_runtime_path(), 'resources', 'media', 'channels', 'thumb', 'filmaffinity.png') thumb_tmdb = os.path.join(config.get_runtime_path(), 'resources', 'media', 'channels', 'thumb', 'tmdb.png') item.category = 'Buscar' itemlist.append( item.clone( channel='tmdblists', action='mainlist', title='Listas y búsquedas en TMDB', thumbnail=thumb_tmdb, plot= 'Buscar personas y ver listas de películas y series de la base de datos de The Movie Database' )) itemlist.append( item.clone( channel='filmaffinitylists', action='mainlist', title='Listas en Filmaffinity', thumbnail=thumb_filmaffinity, plot= 'Ver listas de películas, series, documentales y otros de Filmaffinity' )) itemlist.append( item.clone( action='search', search_type='movie', title='Buscar Película ...', thumbnail=config.get_thumb('movie'), plot= 'Escribir el nombre de una película para buscarla en los canales de películas' )) itemlist.append( item.clone( action='search', search_type='tvshow', title='Buscar Serie ...', thumbnail=config.get_thumb('tvshow'), plot= 'Escribir el nombre de una serie para buscarla en los canales de series' )) itemlist.append( item.clone( action='search', search_type='documentary', title='Buscar Documental ...', thumbnail=config.get_thumb('documentary'), plot= 'Escribir el nombre de un documental para buscarlo en los canales de documentales' )) itemlist.append( item.clone( action='search', search_type='all', title='Buscar Película y/o Serie ...', plot= 'Buscar indistintamente películas o series en todos los canales del addon' )) # ~ itemlist.append(item.clone( action='show_help', title='Información sobre búsquedas', folder=False, thumbnail=config.get_thumb('help') )) return itemlist
def channels(item): logger.info() itemlist = [] if item.extra == 'movies': item.category = 'Canales con Películas' accion = 'mainlist_pelis' filtros = {'categories': 'movie'} elif item.extra == 'tvshows': item.category = 'Canales con Series' accion = 'mainlist_series' filtros = {'categories': 'tvshow'} elif item.extra == 'documentaries': item.category = 'Canales con Documentales' accion = 'mainlist' filtros = {'categories': 'documentary'} else: item.category = 'Todos los Canales' accion = 'mainlist' filtros = {} channels_list_status = config.get_setting( 'channels_list_status', default=0) # 0:Todos, 1:preferidos+activos, 2:preferidos if channels_list_status > 0: filtros['status'] = 0 if channels_list_status == 1 else 1 color_preferidos = config.get_setting('channels_list_prefe_color') ch_list = channeltools.get_channels_list(filtros=filtros) for ch in ch_list: context = [] if ch['status'] != -1: context.append({ 'title': 'Marcar como Desactivado', 'channel': item.channel, 'action': 'marcar_canal', 'estado': -1 }) if ch['status'] != 0: context.append({ 'title': 'Marcar como Activo', 'channel': item.channel, 'action': 'marcar_canal', 'estado': 0 }) if ch['status'] != 1: context.append({ 'title': 'Marcar como Preferido', 'channel': item.channel, 'action': 'marcar_canal', 'estado': 1 }) color = color_preferidos if ch[ 'status'] == 1 else 'white' if ch['status'] == 0 else 'gray' plot = '' if item.extra == 'all': plot += '[' + ', '.join( [config.get_localized_category(ct) for ct in ch['categories']]) + '][CR]' plot += '[' + ', '.join([idioma_canal(lg) for lg in ch['language']]) + ']' if ch['notes'] != '': plot += '[CR][CR]' + ch['notes'] titulo = ch['name'] if ch['status'] == -1: titulo += ' (desactivado)' itemlist.append( Item(channel=ch['id'], action=accion, title=titulo, context=context, text_color=color, plot=plot, thumbnail=ch['thumbnail'], category=ch['name'])) if item.extra == 'movies': itemlist.append( Item(channel='search', action='search', search_type='movie', title='Buscar Película ...', thumbnail=config.get_thumb('search'))) elif item.extra == 'tvshows': itemlist.append( Item(channel='search', action='search', search_type='tvshow', title='Buscar Serie ...', thumbnail=config.get_thumb('search'))) elif item.extra == 'documentaries': itemlist.append( Item(channel='search', action='search', search_type='documentary', title='Buscar Documental ...', thumbnail=config.get_thumb('search'))) return itemlist
def mainlist(item): logger.info() item.category = config.__addon_name itemlist = [] itemlist.append( item.clone(action='channels', extra='movies', title='Películas', thumbnail=config.get_thumb('movie'))) itemlist.append( item.clone(action='channels', extra='tvshows', title='Series', thumbnail=config.get_thumb('tvshow'))) itemlist.append( item.clone(action='channels', extra='documentaries', title='Documentales', thumbnail=config.get_thumb('documentary'))) itemlist.append( Item(channel='generos', action='mainlist', title='Géneros', thumbnail=config.get_thumb('genres'))) itemlist.append( Item(channel='search', action='mainlist', title='Buscar', thumbnail=config.get_thumb('search'))) itemlist.append( Item(channel='tracking', action='mainlist', title='Enlaces guardados (videoteca)', thumbnail=config.get_thumb('videolibrary'))) itemlist.append( Item(channel='downloads', action='mainlist', title='Descargas', thumbnail=config.get_thumb('downloads'))) itemlist.append( Item(channel='actions', action='open_settings', title='Configuración / Ayuda (Balandro v%s)' % config.get_addon_version(), folder=False, thumbnail=config.get_thumb('settings'))) if config.get_setting('channels_link_main', default=False): itemlist.append( item.clone(action='channels', extra='all', title='Canales', thumbnail=config.get_thumb('stack'))) # Developers: import os if os.path.exists( os.path.join(config.get_runtime_path(), 'modules', 'test.py')): itemlist.append( Item(channel='test', action='mainlist', title='Tests Canales y Servidores', thumbnail=config.get_thumb('dev'))) if os.path.exists( os.path.join(config.get_runtime_path(), 'modules', 'developer.py')): itemlist.append( Item(channel='developer', action='mainlist', title='Gestión de géneros', thumbnail=config.get_thumb('dev'))) return itemlist