예제 #1
0
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
예제 #2
0
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}|&nbsp;", "", 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
예제 #3
0
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')
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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
예제 #8
0
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
예제 #9
0
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
예제 #10
0
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
예제 #11
0
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