Esempio n. 1
0
def acciones_temporada(item):
    logger.info()
    tmdb_id = item.infoLabels['tmdb_id']
    season = item.infoLabels['season']

    acciones = []
    acciones.append('Invertir el orden en que se muestran los episodios')
    acciones.append('Actualizar desde TMDB los episodios de la Temporada %d' % season)
    acciones.append('Actualizar desde TVDB los episodios de la Temporada %d' % season)
    acciones.append('Marcar como vistos todos los episodios de la Temporada %d' % season)
    acciones.append('Marcar como no vistos todos los episodios de la Temporada %d' % season)
    acciones.append('Eliminar la Temporada %d' % season)

    # Tratamiento de la acción escogida
    ret = platformtools.dialog_select('Acción a ejecutar', acciones)
    if ret == -1: 
        return False # pedido cancel

    elif acciones[ret].startswith('Invertir el orden'):
        db = trackingtools.TrackingData()
        db.cur.execute('SELECT reverseorder FROM seasons WHERE tmdb_id=? AND season=?', (tmdb_id, season))
        inverso = 0 if db.cur.fetchone()[0] else 1
        db.cur.execute('UPDATE seasons SET reverseorder=? WHERE tmdb_id=? AND season=?', (inverso, tmdb_id, season))
        db.close(commit=True)
        return True

    elif acciones[ret].startswith('Actualizar desde TMDB'):
        res, msg = trackingtools.update_infolabels_episodes(tmdb_id, season)
        platformtools.dialog_notification('Actualizar de TMDB', msg)

    elif acciones[ret].startswith('Actualizar desde TVDB'):
        res, msg = trackingtools.update_infolabels_episodes(tmdb_id, season, with_tvdb=True)
        platformtools.dialog_notification('Actualizar de TVDB', msg)

    elif acciones[ret].startswith('Marcar como vistos'):
        res = trackingtools.update_season_watched(tmdb_id, season, True)
        msg = 'Ok, todos los episodios marcados como vistos.' if res else 'No se han podido marcar los episodios.'
        platformtools.dialog_notification('Temporada %d' % season, msg)

    elif acciones[ret].startswith('Marcar como no vistos'):
        res = trackingtools.update_season_watched(tmdb_id, season, False)
        msg = 'Ok, todos los episodios marcados como NO vistos.' if res else 'No se han podido marcar los episodios.'
        platformtools.dialog_notification('Temporada %d' % season, msg)

    elif acciones[ret].startswith('Eliminar'):
        if not platformtools.dialog_yesno('Eliminar temporada', '¿ Estás seguro de querer borrar la [COLOR gold]Temporada %d[/COLOR] de la serie [COLOR gold]%s[/COLOR] y todos sus episodios ?' % (season, item.contentSerieName)): return False
        db = trackingtools.TrackingData()
        db.delete_season(tmdb_id, season)
        db.close(commit=True)

    platformtools.itemlist_refresh()
    return True
Esempio n. 2
0
def acciones_episodio(item):
    logger.info()
    tmdb_id = item.infoLabels['tmdb_id']
    season = item.infoLabels['season']
    episode = item.infoLabels['episode']

    acciones = []
    acciones.append('Actualizar desde TMDB el episodio %d x %d' % (season, episode))
    acciones.append('Actualizar desde TVDB el episodio %d x %d' % (season, episode))
    acciones.append('Eliminar el episodio %d x %d' % (season, episode))

    # Tratamiento de la acción escogida
    ret = platformtools.dialog_select('Acción a ejecutar', acciones)
    if ret == -1: 
        return False # pedido cancel

    elif acciones[ret].startswith('Actualizar desde TMDB'):
        res, msg = trackingtools.update_infolabels_episodes(tmdb_id, season, episode)
        platformtools.dialog_notification('Actualizar de TMDB', msg)

    elif acciones[ret].startswith('Actualizar desde TVDB'):
        res, msg = trackingtools.update_infolabels_episodes(tmdb_id, season, episode, with_tvdb=True)
        platformtools.dialog_notification('Actualizar de TVDB', msg)

    elif acciones[ret].startswith('Eliminar'):
        if not platformtools.dialog_yesno('Eliminar episodio', '¿ Estás seguro de querer borrar el episodio [COLOR gold]%dx%d[/COLOR] de la serie [COLOR gold]%s[/COLOR] ?' % (season, episode, item.contentSerieName)): return False
        db = trackingtools.TrackingData()
        db.delete_episode(tmdb_id, season, episode)
        db.close(commit=True)

    platformtools.itemlist_refresh()
    return True
Esempio n. 3
0
def serie_episodios(item):
    logger.info()
    itemlist = []

    db = trackingtools.TrackingData()

    db.cur.execute('SELECT reverseorder FROM seasons WHERE tmdb_id=? AND season=?', (item.infoLabels['tmdb_id'], item.infoLabels['season']))
    inverso = True if db.cur.fetchone()[0] else False

    rows = db.get_episodes(item.infoLabels['tmdb_id'], item.infoLabels['season'], inverso)
    for season, episode, infolabels in rows:

        subtitulo = valor_infolabel('episodio_titulo', infolabels)
        if subtitulo == '': subtitulo = 'Capítulo %d' % infolabels['episode']

        titulo = '%dx%02d %s' % (infolabels['season'], infolabels['episode'], subtitulo)

        thumbnail = valor_infolabel_informado(['episodio_imagen','thumbnail'], infolabels)
        if thumbnail == '': thumbnail = item.thumbnail

        fanart = valor_infolabel('fanart', infolabels)
        if fanart == '': fanart = item.fanart
        
        context = [ {'title': 'Gestionar episodio', 'channel': item.channel, 'action': 'acciones_episodio'} ]
        
        itemlist.append(item.clone( action='findvideos', title=titulo, thumbnail = thumbnail, fanart = fanart,
                                    infoLabels = infolabels, context=context ))

    db.close()

    return itemlist 
Esempio n. 4
0
def serie_temporadas(item):
    logger.info()
    itemlist = []
    item.category = item.contentSerieName
    
    db = trackingtools.TrackingData()

    rows = db.get_seasons(item.infoLabels['tmdb_id'])
    for season, infolabels in rows:
        titulo = 'Temporada %d' % season
        nombre = valor_infolabel('temporada_nombre', infolabels)
        if nombre != '' and nombre != titulo and nombre != 'Season %d' % season:
            titulo += ' ' + nombre

        thumbnail = valor_infolabel_informado(['temporada_poster','thumbnail'], infolabels)
        if thumbnail == '': thumbnail = item.thumbnail

        fanart = valor_infolabel('fanart', infolabels)
        if fanart == '': fanart = item.fanart

        context = [ {'title': 'Gestionar temporada', 'channel': item.channel, 'action': 'acciones_temporada'} ]

        itemlist.append(item.clone( action='serie_episodios', title=titulo, thumbnail = thumbnail, fanart = fanart,
                                    infoLabels = infolabels, context=context ))

    db.close()

    return itemlist
Esempio n. 5
0
def mainlist_pelis(item):
    logger.info()
    itemlist = []

    db = trackingtools.TrackingData()

    count_movies = db.get_movies_count()
    if not item.desde: item.desde = 0
    if item.desde > count_movies: item.desde = 0

    tracking_perpage = config.get_setting('tracking_perpage_movies', default=10)

    tracking_order = config.get_setting('tracking_order_movies', default=0)
    orden = ['updated DESC', 'title ASC', 'aired DESC']

    rows = db.get_movies(orden=orden[tracking_order], desde=item.desde, numero=tracking_perpage)
    for tmdb_id, infolabels in rows:
        title = valor_infolabel('title', infolabels)
        if tracking_order == 2: title += '  [COLOR gray](%s)[/COLOR]' % valor_infolabel_informado(['release_date','year'], infolabels)

        context = [ {'title': 'Gestionar película', 'channel': item.channel, 'action': 'acciones_peli'} ]

        itemlist.append(Item( channel=item.channel, action='findvideos', 
                              title = title,
                              thumbnail = valor_infolabel('thumbnail', infolabels),
                              fanart = valor_infolabel('fanart', infolabels),
                              infoLabels = infolabels,
                              context=context ))

    if item.desde + tracking_perpage < count_movies:
        itemlist.append(item.clone( title="Siguiente >>", desde=item.desde + tracking_perpage ))

    db.close()

    return itemlist
Esempio n. 6
0
def findvideos(item):
    logger.info()

    db = trackingtools.TrackingData()

    opciones = []; opciones_row = []
    if item.contentType == 'movie':
        rows = db.get_movie_channels(item.infoLabels['tmdb_id'])
        infolabels = db.get_movie(item.infoLabels['tmdb_id'])
    else:
        rows = db.get_episode_channels(item.infoLabels['tmdb_id'], item.infoLabels['season'], item.infoLabels['episode'])
        infolabels = db.get_episode(item.infoLabels['tmdb_id'], item.infoLabels['season'], item.infoLabels['episode'])

    from core import channeltools
    for channel, url in rows:
        ch_parms = channeltools.get_channel_parameters(channel)
        if ch_parms['active']: # no tener en cuenta canales que ya no existan o estén desactivados
            opciones.append(platformtools.listitem_to_select(ch_parms['name'], '', ch_parms['thumbnail']))
            opciones_row.append([channel, url])

    db.close()

    if len(opciones) == 0:
        platformtools.dialog_ok(config.__addon_name, 'No tienes guardado ningún canal en activo con enlaces.')
        return None

    elif len(opciones) == 1: # Sólo hay un canal, ir a él directamente
        ret = 0
        
    else:
        # TODO? canal preferente preseleccionado u ordenar por updated o último usado ?
        ret = platformtools.dialog_select('¿ De qué canal quieres los enlaces ?', opciones, useDetails=True)
        if ret == -1: 
            return None # pedido cancel

    it_sel = Item().fromurl(opciones_row[ret][1])
    it_sel.infoLabels = infolabels # Añadir infoLabels pq las urls se guardan sin ellos
    logger.debug(it_sel)
    
    canal = __import__('channels.' + opciones_row[ret][0], fromlist=[''])
    if hasattr(canal, 'findvideos'):
        itemlist = canal.findvideos(it_sel)
    else:
        itemlist = servertools.find_video_items(it_sel)

    return itemlist
Esempio n. 7
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
Esempio n. 8
0
def crear_lista(item):
    logger.info()

    titulo = platformtools.dialog_input(default='', heading='Nombre de la lista')
    if titulo is None or titulo == '':
        return False
    titulo = config.text_clean(titulo, blank_char='_')

    filename = titulo.replace('.sqlite', '') + '.sqlite'
    fullfilename = filetools.join(trackingtools.get_tracking_path(), filename)

    # Comprobar que el fichero no exista ya
    if filetools.exists(fullfilename):
        platformtools.dialog_ok(config.__addon_name, 'Error, ya existe una lista con este nombre!', filename)
        return False

    # Provocar que se guarde
    db = trackingtools.TrackingData(filename)
    db.close(commit=True)

    platformtools.itemlist_refresh()
    return True
Esempio n. 9
0
def mainlist_episodios(item):
    logger.info()
    itemlist = []

    db = trackingtools.TrackingData()

    count_episodes = db.get_episodes_count()
    if not item.desde: item.desde = 0
    if item.desde > count_episodes: item.desde = 0

    tracking_perpage = config.get_setting('tracking_perpage_episodes', default=10)

    tracking_order = config.get_setting('tracking_order_episodes', default=1)
    orden = ['updated DESC', 'aired DESC']

    rows = db.get_all_episodes(orden=orden[tracking_order], desde=item.desde, numero=tracking_perpage)
    for tmdb_id, season, episode, infolabels in rows:

        titulo = '%s %dx%02d' % (infolabels['tvshowtitle'], infolabels['season'], infolabels['episode'])
        subtitulo = valor_infolabel('episodio_titulo', infolabels)
        if subtitulo != '': titulo += ' ' + subtitulo
        if tracking_order == 1: titulo += '  [COLOR gray]%s[/COLOR]' % valor_infolabel('aired', infolabels)

        thumbnail = valor_infolabel_informado(['episodio_imagen','thumbnail'], infolabels)

        fanart = valor_infolabel('fanart', infolabels)
        
        context = [ {'title': 'Temporadas de la serie', 'channel': item.channel, 'action': 'serie_temporadas', 'link_mode': 'update'} ]
        
        itemlist.append(item.clone( action='findvideos', title=titulo, thumbnail = thumbnail, fanart = fanart,
                                    infoLabels = infolabels, context=context ))

    if item.desde + tracking_perpage < count_episodes:
        itemlist.append(item.clone( title="Siguiente >>", desde=item.desde + tracking_perpage ))
    
    db.close()

    return itemlist
Esempio n. 10
0
def mainlist_series(item):
    logger.info()
    itemlist = []

    db = trackingtools.TrackingData()

    count_shows = db.get_shows_count()
    if not item.desde: item.desde = 0
    if item.desde > count_shows: item.desde = 0

    tracking_perpage = config.get_setting('tracking_perpage_tvshows', default=10)

    tracking_order = config.get_setting('tracking_order_tvshows', default=0)
    orden = ['updated DESC', 'title ASC', 'aired DESC']

    rows = db.get_shows(orden=orden[tracking_order], desde=item.desde, numero=tracking_perpage)
    for tmdb_id, infolabels in rows:
        title = valor_infolabel('tvshowtitle', infolabels)
        if tracking_order == 2: title += '  [COLOR gray](%s)[/COLOR]' % valor_infolabel_informado(['aired','year'], infolabels)

        # ~ if db.tracking_show_exists(tmdb_id): title += ' [COLOR gold](*)[/COLOR]'

        context = [ {'title': 'Gestionar serie', 'channel': item.channel, 'action': 'acciones_serie'} ]

        itemlist.append(Item( channel=item.channel, action='serie_temporadas', 
                              title = title,
                              thumbnail = valor_infolabel('thumbnail', infolabels),
                              fanart = valor_infolabel('fanart', infolabels),
                              infoLabels = infolabels,
                              context=context ))

    if item.desde + tracking_perpage < count_shows:
        itemlist.append(item.clone( title="Siguiente >>", desde=item.desde + tracking_perpage ))

    db.close()

    return itemlist
Esempio n. 11
0
def informacion_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

    db = trackingtools.TrackingData(item.lista)
    count_movies = db.get_movies_count()
    count_shows = db.get_shows_count()
    count_episodes = db.get_episodes_count()
    db.close()

    txt = 'Nombre: [COLOR gold]%s[/COLOR]' % item.lista

    txt += '[CR][CR]Número de películas: [B]%d[/B]' % count_movies
    txt += '[CR][CR]Número de series: [B]%d[/B]' % count_shows
    txt += '[CR][CR]Número de episodios: [B]%d[/B]' % count_episodes

    txt += '[CR][CR]Tamaño de la base de datos: [B]%s[/B]' % config.format_bytes(filetools.getsize(fullfilename))

    platformtools.dialog_textviewer('Información de la lista', txt)
    return True
Esempio n. 12
0
def info_tracking_shows(item):
    logger.info()

    db = trackingtools.TrackingData()
    db.cur.execute('SELECT a.tmdb_id, a.periodicity, a.tvdbinfo, a.lastscrap, b.title FROM tracking_shows a LEFT JOIN shows b ON a.tmdb_id = b.tmdb_id')
    series = db.cur.fetchall()
    db.close()

    txt = '%d Series con búsqueda de nuevos episodios.' % len(series)

    if config.get_setting('addon_tracking_atstart', default=True):
        interval = config.get_setting('addon_tracking_interval', default='12')
        lastscrap = config.get_setting('addon_tracking_lastscrap', default='')
        dt_scrap = datetime.fromtimestamp(float(lastscrap))
        txt += ' El servicio de búsqueda se ejecuta cada %d horas. Última ejecución: %s.' % (int(interval), dt_scrap.strftime('%d/%m/%Y a las %H:%M'))
    else:
        txt += ' Servicio de búsqueda desactivado en la configuración del addon.'

    for tmdb_id, periodicity, tvdbinfo, lastscrap, title in series:
        txt += '[CR][CR][B][COLOR gold]%s[/COLOR][/B], con tmdb_id %s : ' % (title.encode('utf-8'), tmdb_id.encode('utf-8'))
        periodicity = int(periodicity)
        if periodicity == 0: txt += ' cada vez que se ejecute el servicio'
        elif periodicity == 24: txt += ' una vez al día'
        elif periodicity == 48: txt += ' cada dos días'
        elif periodicity == 72: txt += ' cada tres días'
        elif periodicity == 24*7: txt += ' una vez por semana'
        else: txt += ' cada %d horas' % periodicity

        txt += ', con datos de TVDB.' if tvdbinfo == 1 else '.'

        if lastscrap: 
            dt_scrap = datetime.fromtimestamp(float(lastscrap))
            txt += ' Última comprobación: %s.' % dt_scrap.strftime('%A %d/%m/%Y a las %H:%M')

    platformtools.dialog_textviewer('Info tracking new episodes', txt)
    return True
Esempio n. 13
0
def acciones_serie(item):
    logger.info()
    tmdb_id = item.infoLabels['tmdb_id']

    db = trackingtools.TrackingData()

    acciones = []
    acciones.append('Información de enlaces guardados')
    acciones.append('Programar búsqueda automática de nuevos episodios')
    acciones.append('Buscar ahora nuevos episodios')
    acciones.append('Actualizar datos desde TMDB (themoviedb.org)')
    acciones.append('Actualizar datos desde TVDB (thetvdb.com)')
    # TODO? 'Vista/No vista' => bucle para todas las temporadas/episodios y marcarlos en bd_kodi_files !? De momento por temporada.

    # Diferentes canales con enlaces ya sea en serie, temporadas o episodios
    sql = 'SELECT DISTINCT channel FROM ('
    sql += ' SELECT DISTINCT channel FROM channels_shows WHERE tmdb_id=?'
    sql += ' UNION'
    sql += ' SELECT DISTINCT channel FROM channels_seasons WHERE tmdb_id=?'
    sql += ' UNION'
    sql += ' SELECT DISTINCT channel FROM channels_episodes WHERE tmdb_id=?'
    sql += ')'
    db.cur.execute(sql, (tmdb_id,tmdb_id,tmdb_id))
    canales = db.cur.fetchall()  # Ej: [(u'seriesblanco',), (u'seriespapaya',)]
    for (channel,) in canales:
        acciones.append('Eliminar enlaces del canal [COLOR blue]%s[/COLOR]' % channel.encode('utf-8'))

    acciones.append('Eliminar serie')
    acciones.append('Mover serie a otra lista')
    acciones.append('Copiar serie a otra lista')
    if config.get_setting('tracking_order_tvshows', default=0) == 0: # Si está ordenado por Updated opción para subirla a la primera de la lista modificando su updated.
        acciones.append('Mostrar serie al principio de la lista')

    # Tratamiento de la acción escogida
    ret = platformtools.dialog_select(item.contentSerieName, acciones)
    if ret == -1: 
        db.close()
        return False # pedido cancel

    elif acciones[ret] == 'Mostrar serie al principio de la lista':
        db.cur.execute('UPDATE shows SET updated=? WHERE tmdb_id=?', (datetime.now(), tmdb_id))

    elif acciones[ret] == 'Eliminar serie':
        if not platformtools.dialog_yesno('Eliminar serie', '¿Estás seguro de querer borrar la serie [COLOR gold]%s[/COLOR] con tmdb_id: %s ?' % (item.contentSerieName, tmdb_id)): return False
        db.delete_show(tmdb_id)

    elif acciones[ret].startswith('Eliminar enlaces del canal '):
        channel = config.quitar_colores(acciones[ret].replace('Eliminar enlaces del canal ', ''))
        db.delete_show_channel(tmdb_id, channel)

    elif acciones[ret].startswith('Actualizar datos desde TMDB'):
        res, msg = trackingtools.update_infolabels_show(tmdb_id)
        platformtools.dialog_notification('Actualizar de TMDB', msg)

    elif acciones[ret].startswith('Actualizar datos desde TVDB'):
        res, msg = trackingtools.update_infolabels_show(tmdb_id, with_tvdb=True)
        platformtools.dialog_notification('Actualizar de TVDB', msg)

    elif acciones[ret] == 'Información de enlaces guardados':
        txt = 'Serie [B][COLOR gold]%s[/COLOR][/B] con tmdb_id: %s' % (item.contentSerieName, tmdb_id)
        
        # Mostrar info de tracking
        db.cur.execute('SELECT periodicity, tvdbinfo, lastscrap FROM tracking_shows WHERE tmdb_id=?', (tmdb_id,))
        row = db.cur.fetchone()
        if row is not None:
            periodicity = int(row[0])
            # ~ txt += ', tiene activada la búsqueda automática de nuevos episodios cada %d horas' % int(row[0])
            txt += ', tiene activada la búsqueda automática de nuevos episodios'
            if row[1] == 1: txt += ' con datos de TVDB'
            if periodicity == 0: txt += ' cada vez que se ejecute el servicio.'
            elif periodicity == 24: txt += ' una vez al día.'
            elif periodicity == 48: txt += ' cada dos días.'
            elif periodicity == 72: txt += ' cada tres días.'
            elif periodicity == 24*7: txt += ' una vez por semana.'
            else: txt += ' cada %d horas.' % periodicity
            if row[2]: 
                dt_scrap = datetime.fromtimestamp(float(row[2]))
                txt += ' Última comprobación: %s.' % dt_scrap.strftime('%A %d/%m/%Y a las %H:%M')

        # Mostrar info de infolabels
        db.cur.execute('SELECT COUNT(*) FROM episodes WHERE tmdb_id=?', (tmdb_id,))
        num_epi = db.cur.fetchone()[0]
        db.cur.execute('SELECT season FROM seasons WHERE tmdb_id=? ORDER BY season ASC', (tmdb_id,))
        seasons = db.cur.fetchall()
        txt += '[CR][CR]%d episodios en %d temporadas. ' % (num_epi, len(seasons))
        for (season,) in seasons:
            db.cur.execute('SELECT COUNT(*) FROM episodes WHERE tmdb_id=? AND season=?', (tmdb_id, season))
            num_epi = db.cur.fetchone()[0]
            txt += ' [B]T%d[/B] (%d)' % (season, num_epi)

        # Mostrar info de enlaces
        txt += '[CR][CR]Enlaces a nivel de serie y temporadas:'
        for (channel,) in canales:
            guardados = []

            db.cur.execute('SELECT channel FROM channels_shows WHERE tmdb_id=? AND channel=?', (tmdb_id, channel.encode('utf-8')))
            if db.cur.fetchone() is not None:
                guardados.append('Serie')

            db.cur.execute('SELECT season FROM channels_seasons WHERE tmdb_id=? AND channel=? ORDER BY season ASC', (tmdb_id, channel.encode('utf-8')))
            enlaces = db.cur.fetchall()
            for (season,) in enlaces:
                guardados.append('T%d' % season)
            
            if len(guardados) > 0:
                if 'Serie' in guardados and len(guardados) == 1: guardados = ['Temporadas y episodios en un mismo enlace']
                txt += '[CR][COLOR blue]%s[/COLOR]: %s.' % (channel.encode('utf-8'), ', '.join(guardados))
            else:
                txt += '[CR][COLOR blue]%s[/COLOR]: episodios sueltos.' % channel.encode('utf-8')

        txt += '[CR][CR]Episodios por canal:'
        for (channel,) in canales:
            # ~ db.cur.execute('SELECT season, episode FROM channels_episodes WHERE tmdb_id=? AND channel=? ORDER BY season ASC, episode ASC', (tmdb_id, channel.encode('utf-8')))
            # ~ enlaces = db.cur.fetchall()
            # ~ if len(enlaces) > 0:
                # ~ txt += '[CR][COLOR blue]%s[/COLOR]:' % channel.encode('utf-8')
                # ~ for season, episode in enlaces:
                    # ~ txt += ' %dx%d' % (season, episode)
            db.cur.execute('SELECT season, COUNT() FROM channels_episodes WHERE tmdb_id=? AND channel=? GROUP BY season ORDER BY season ASC', (tmdb_id, channel.encode('utf-8')))
            enlaces = db.cur.fetchall()
            if len(enlaces) > 0:
                txt += '[CR][COLOR blue]%s[/COLOR]: %s' % (channel.encode('utf-8'), ', '.join(['T%d (%d)' % (season, count) for season, count in enlaces]))

        db.close()
        platformtools.dialog_textviewer('Información de enlaces guardados', txt)
        return True

    elif acciones[ret] == 'Programar búsqueda automática de nuevos episodios':
        db.cur.execute('SELECT periodicity, tvdbinfo FROM tracking_shows WHERE tmdb_id=?', (tmdb_id,))
        row = db.cur.fetchone()
        if row is not None:
            if platformtools.dialog_yesno('Tracking', '¿ Desactivar la búsqueda automática de nuevos episodios para la serie [COLOR gold]%s[/COLOR] con tmdb_id: %s ?' % (item.contentSerieName, tmdb_id)):
                db.cur.execute('DELETE FROM tracking_shows WHERE tmdb_id=?', (tmdb_id,))
                platformtools.dialog_notification(item.contentSerieName, 'Desactivada la búsqueda automática de nuevos episodios.')
                cambiar_opciones = False
            else:
                cambiar_opciones = True
        else:
            if not platformtools.dialog_yesno('Tracking', '¿ Activar la búsqueda automática de nuevos episodios para la serie [COLOR gold]%s[/COLOR] con tmdb_id: %s ?' % (item.contentSerieName, tmdb_id)):
                db.close()
                return False
            cambiar_opciones = True

        if cambiar_opciones:
            opciones = ['Cada vez que se ejecute el servicio', 'Una vez al día', 'Cada dos días', 'Cada tres días', 'Cada semana']
            ret = platformtools.dialog_select('¿ Cada cuanto comprobar si hay nuevos episodios ?', opciones)
            if ret == -1:
                db.close()
                return False
            periodicity = 0 if ret == 0 else 24 if ret == 1 else 48 if ret == 2 else 72 if ret == 3 else 24*7
            tvdbinfo = platformtools.dialog_yesno('Tracking', '¿ Quieres que se acceda a tvdb para recuperar datos de los nuevos episodios ? (bastante más lento pero en algunos casos se obtiene más información)')
            
            db.cur.execute('INSERT OR REPLACE INTO tracking_shows (tmdb_id, updated, periodicity, tvdbinfo) VALUES (?, ?, ?, ?)', (tmdb_id, datetime.now(), periodicity, tvdbinfo))
            platformtools.dialog_notification(item.contentSerieName, 'Activada la búsqueda automática de nuevos episodios.')

    elif acciones[ret] == 'Buscar ahora nuevos episodios':
        db.cur.execute('SELECT tvdbinfo FROM tracking_shows WHERE tmdb_id=?', (tmdb_id,))
        row = db.cur.fetchone()
        tvdbinfo = False if row is None else True if row[0] == 1 else False
        db.close()

        done, msg = trackingtools.search_new_episodes(tmdb_id, show_progress=True, tvdbinfo=tvdbinfo)
        return True
                
    elif acciones[ret] == 'Copiar serie a otra lista' or acciones[ret] == 'Mover serie a otra lista':
        operacion = 'copiada' if acciones[ret] == 'Copiar serie a otra lista' else 'movida'

        # Diálogo para escoger lista
        opciones = []
        itemlist_listas = mainlist_listas(item)
        for it in itemlist_listas:
            if it.lista != '' and '[lista activa]' not in it.title: # descarta item crear y lista activa
                opciones.append(it.title)

        if len(opciones) == 0:
            db.close()
            platformtools.dialog_ok(config.__addon_name, 'No hay otras listas dónde mover el enlace.', 'Puedes crearlas desde el menú Gestionar listas.')
            return False

        ret = platformtools.dialog_select('Seleccionar lista destino', opciones)
        if ret == -1: 
            db.close()
            return False # pedido cancel

        dbname_destino = opciones[ret]
        filename_destino = filetools.join(trackingtools.get_tracking_path(), dbname_destino + '.sqlite')
        
        db.cur.execute('ATTACH DATABASE ? AS db_destino', (filename_destino,))
        
        db.cur.execute('DELETE FROM db_destino.shows WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('DELETE FROM db_destino.channels_shows WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('DELETE FROM db_destino.seasons WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('DELETE FROM db_destino.channels_seasons WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('DELETE FROM db_destino.episodes WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('DELETE FROM db_destino.channels_episodes WHERE tmdb_id=?', (tmdb_id,))

        db.cur.execute('INSERT INTO db_destino.shows SELECT * FROM shows WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('INSERT INTO db_destino.channels_shows SELECT * FROM channels_shows WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('INSERT INTO db_destino.seasons SELECT * FROM seasons WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('INSERT INTO db_destino.channels_seasons SELECT * FROM channels_seasons WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('INSERT INTO db_destino.episodes SELECT * FROM episodes WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('INSERT INTO db_destino.channels_episodes SELECT * FROM channels_episodes WHERE tmdb_id=?', (tmdb_id,))
        
        if operacion == 'movida':
            db.cur.execute('DELETE FROM shows WHERE tmdb_id=?', (tmdb_id,))
            db.cur.execute('DELETE FROM channels_shows WHERE tmdb_id=?', (tmdb_id,))
            db.cur.execute('DELETE FROM seasons WHERE tmdb_id=?', (tmdb_id,))
            db.cur.execute('DELETE FROM channels_seasons WHERE tmdb_id=?', (tmdb_id,))
            db.cur.execute('DELETE FROM episodes WHERE tmdb_id=?', (tmdb_id,))
            db.cur.execute('DELETE FROM channels_episodes WHERE tmdb_id=?', (tmdb_id,))

        db.cur.execute('DETACH DATABASE db_destino')

        platformtools.dialog_notification(acciones[ret], '[COLOR gold]%s[/COLOR] %s a lista [COLOR blue]%s[/COLOR]' % (item.contentSerieName, operacion, dbname_destino) )
        if operacion == 'copiada':
            db.close(commit=True)
            return True # No necesita itemlist_refresh posterior


    db.close(commit=True)

    platformtools.itemlist_refresh()
    return True
Esempio n. 14
0
def acciones_peli(item):
    logger.info()
    tmdb_id = item.infoLabels['tmdb_id']

    db = trackingtools.TrackingData()

    acciones = []
    acciones.append('Información de enlaces guardados')
    acciones.append('Actualizar datos desde TMDB (themoviedb.org)')

    rows = db.get_movie_channels(tmdb_id)
    for channel, url in rows:
        acciones.append('Eliminar enlaces del canal [COLOR blue]%s[/COLOR]' % channel.encode('utf-8'))

    acciones.append('Eliminar película')
    acciones.append('Mover película a otra lista')
    acciones.append('Copiar película a otra lista')
    if config.get_setting('tracking_order_movies', default=0) == 0: # Si está ordenado por Updated opción para subirla a la primera de la lista modificando su updated.
        acciones.append('Mostrar película al principio de la lista')

    # Tratamiento de la acción escogida
    ret = platformtools.dialog_select(item.contentTitle, acciones)
    if ret == -1: 
        db.close()
        return False # pedido cancel

    elif acciones[ret].startswith('Actualizar datos desde TMDB'):
        res, msg = trackingtools.update_infolabels_movie(tmdb_id)
        platformtools.dialog_notification('Actualizar de TMDB', msg)

    elif acciones[ret] == 'Mostrar película al principio de la lista':
        db.cur.execute('UPDATE movies SET updated=? WHERE tmdb_id=?', (datetime.now(), tmdb_id))

    elif acciones[ret] == 'Eliminar película':
        if not platformtools.dialog_yesno('Eliminar película', '¿Estás seguro de querer borrar la película [COLOR gold]%s[/COLOR] con tmdb_id: %s ?' % (item.contentTitle, tmdb_id)): return False
        db.delete_movie(tmdb_id)

    elif acciones[ret].startswith('Eliminar enlaces del canal '):
        channel = config.quitar_colores(acciones[ret].replace('Eliminar enlaces del canal ', ''))
        db.delete_movie_channel(tmdb_id, channel)

    elif acciones[ret] == 'Información de enlaces guardados':
        txt = 'Película [B][COLOR gold]%s[/COLOR][/B] con tmdb_id: %s' % (item.contentTitle, tmdb_id)

        if len(rows) > 0:
            txt += '[CR][CR]Con enlaces a los canales: [COLOR blue]%s[/COLOR].' % ', '.join([channel.encode('utf-8') for channel, url in rows]) 
        else:
            txt += '[CR][CR]No hay enlaces guardados a ningún canal.'

        db.close()
        platformtools.dialog_textviewer('Información de enlaces guardados', txt)
        return True

    elif acciones[ret] == 'Copiar película a otra lista' or acciones[ret] == 'Mover película a otra lista':
        operacion = 'copiada' if acciones[ret] == 'Copiar película a otra lista' else 'movida'

        # Diálogo para escoger lista
        opciones = []
        itemlist_listas = mainlist_listas(item)
        for it in itemlist_listas:
            if it.lista != '' and '[lista activa]' not in it.title: # descarta item crear y lista activa
                opciones.append(it.title)

        if len(opciones) == 0:
            db.close()
            platformtools.dialog_ok(config.__addon_name, 'No hay otras listas dónde mover el enlace.', 'Puedes crearlas desde el menú Gestionar listas.')
            return False

        ret = platformtools.dialog_select('Seleccionar lista destino', opciones)
        if ret == -1: 
            db.close()
            return False # pedido cancel

        dbname_destino = opciones[ret]
        filename_destino = filetools.join(trackingtools.get_tracking_path(), dbname_destino + '.sqlite')
        
        db.cur.execute('ATTACH DATABASE ? AS db_destino', (filename_destino,))
        
        db.cur.execute('DELETE FROM db_destino.movies WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('DELETE FROM db_destino.channels_movies WHERE tmdb_id=?', (tmdb_id,))

        db.cur.execute('INSERT INTO db_destino.movies SELECT * FROM movies WHERE tmdb_id=?', (tmdb_id,))
        db.cur.execute('INSERT INTO db_destino.channels_movies SELECT * FROM channels_movies WHERE tmdb_id=?', (tmdb_id,))
        
        if operacion == 'movida':
            db.cur.execute('DELETE FROM movies WHERE tmdb_id=?', (tmdb_id,))
            db.cur.execute('DELETE FROM channels_movies WHERE tmdb_id=?', (tmdb_id,))

        db.cur.execute('DETACH DATABASE db_destino')

        platformtools.dialog_notification(acciones[ret], '[COLOR gold]%s[/COLOR] %s a lista [COLOR blue]%s[/COLOR]' % (item.contentTitle, operacion, dbname_destino) )
        if operacion == 'copiada':
            db.close(commit=True)
            return True # No necesita itemlist_refresh posterior


    db.close(commit=True)

    platformtools.itemlist_refresh()
    return True