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