def _sync_collection_movies(self): movie_sync = movies.TraktSyncDatabase() insert_list = [] if not self.silent: self.progress_dialog.update(0, 'Fetching Collected Movies') local_collection = set(i['trakt_id'] for i in movie_sync.get_collected_movies()) update_time = str(datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S')) trakt_collecton = Trakt.TraktAPI().json_response( 'sync/collection/movies?extended=full') for item in trakt_collecton: if item['movie']['ids']['trakt'] not in local_collection: insert_list.append(item) if not self.silent: self.progress_dialog.update(0, 'Inserting Collected Movies') sql_statement = "INSERT OR IGNORE INTO movies (trakt_id, kodi_meta, collected, watched, last_updated, " \ "air_date) VALUES (?, '{}', ?, ?, ?, ?) " self._execute_batch_sql(sql_statement, ((i['movie']['ids']['trakt'], 1, 0, self.base_date, i['movie'].get('released')) for i in insert_list), len(insert_list)) sql_statement = "UPDATE movies SET collected=1 WHERE trakt_id=?" self._execute_batch_sql(sql_statement, [(i['movie']['ids']['trakt'], ) for i in trakt_collecton], len(trakt_collecton)) self._update_activity_record('movies_collected', update_time)
def get_item_information(actionArgs): actionArgs = unquote(actionArgs) try: actionArgs = json.loads(actionArgs) except: log('Unable to load dict') return None if actionArgs['item_type'] == 'show': from resources.lib.modules.trakt_sync import shows item_information = shows.TraktSyncDatabase().get_single_show( actionArgs['trakt_id']) return item_information if actionArgs['item_type'] == 'season': from resources.lib.modules.trakt_sync import shows item_information = shows.TraktSyncDatabase().get_single_season( actionArgs['trakt_id'], actionArgs['season']) return item_information if actionArgs['item_type'] == 'episode': from resources.lib.modules.trakt_sync import shows item_information = shows.TraktSyncDatabase().get_single_episode( actionArgs['trakt_id'], actionArgs['season'], actionArgs['episode']) return item_information if actionArgs['item_type'] == 'movie': from resources.lib.modules.trakt_sync import movies item_information = movies.TraktSyncDatabase().get_movie( actionArgs['trakt_id']) return item_information
def _sync_uncollected(self): show_sync = shows.TraktSyncDatabase() movie_sync = movies.TraktSyncDatabase() trakt_collected_movies = Trakt.TraktAPI().json_response( 'sync/collection/movies') if trakt_collected_movies is not None: trakt_collected_movies = set( int(i['movie']['ids']['trakt']) for i in trakt_collected_movies) else: trakt_collected_movies = set() local_collected_movies = movie_sync.get_collected_movies() local_collected_movies = set( int(i['trakt_id']) for i in local_collected_movies) trakt_collected_episodes = Trakt.TraktAPI().json_response( 'sync/collection/shows') if trakt_collected_episodes is not None: trakt_collected_episodes = set( '%s-%s-%s' % (show['show']['ids']['trakt'], season['number'], episode['number']) for show in trakt_collected_episodes for season in show['seasons'] for episode in season['episodes']) else: trakt_collected_episodes = set() local_collected_episodes = show_sync.get_collected_episodes() local_collected_episodes = set('%s-%s-%s' % (i['show_id'], i['season'], i['number']) for i in local_collected_episodes) workload = local_collected_movies - trakt_collected_movies sql_statement = "UPDATE movies SET collected=0 WHERE trakt_id=?" self._execute_batch_sql(sql_statement, ((movie, ) for movie in workload), len(workload)) workload = local_collected_episodes - trakt_collected_episodes sql_statement = "UPDATE episodes SET collected=0 WHERE show_id=? AND season=? AND number=?" self._execute_batch_sql(sql_statement, ((tuple(episode.split('-'))) for episode in workload), len(workload)) if not self.silent: self.progress_dialog.update(100, 'Syncing Uncollected items')
def _sync_watched_movies(self): self.threads = [] if tools.getSetting('trakt.auth') == '': return insert_list = [] if not self.silent: self.progress_dialog.update(-1, 'Fetching Watched Movies') update_time = str(datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S')) trakt_watched = Trakt.TraktAPI().json_response('/sync/watched/movies') trakt_watched = [i['movie']['ids']['trakt'] for i in trakt_watched] local_watched = movies.TraktSyncDatabase().get_watched_movies() local_watched = [i['trakt_id'] for i in local_watched] for movie in trakt_watched: if movie not in local_watched: insert_list.append((movie_sync.get_movie, (movie, False, False))) movie_tasks = len(insert_list) if movie_tasks == 0: self._update_activity_record('movies_watched', update_time) return inserted_tasks = 0 if not self.silent: self.progress_dialog.update(0, 'Syncing Watched Movies') self._start_queue_workers() for i in insert_list: inserted_tasks += 1 progress_perc = (float(inserted_tasks) / float(movie_tasks)) * 100 if not self.silent: self.progress_dialog.update(int(progress_perc)) self.task_queue.put(i, block=True) self._finish_queue_workers() for item in insert_list: movie_sync.mark_movie_watched(item[1][0]) self._update_activity_record('movies_watched', update_time)
def _sync_watched_movies(self): self.threads = [] if tools.getSetting('trakt.auth') == '': return insert_list = [] if not self.silent: self.progress_dialog.update(-1, 'Fetching Watched Movies') update_time = str(datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S')) trakt_watched = Trakt.TraktAPI().json_response( '/sync/watched/movies?extended=full') local_watched = movies.TraktSyncDatabase().get_watched_movies() local_watched = {i['trakt_id']: i for i in local_watched} for movie in trakt_watched: if movie['movie']['ids']['trakt'] not in local_watched: insert_list.append(movie) movie_tasks = len(insert_list) if movie_tasks == 0: self._update_activity_record('movies_watched', update_time) return if not self.silent: self.progress_dialog.update(0, 'Inserting Watched Movies') sql_statement = "INSERT OR IGNORE INTO movies (trakt_id, kodi_meta, collected, watched, last_updated, air_date)" \ "VALUES " \ "(?, '{}', ?, ?, ?, ?)" self._execute_batch_sql(sql_statement, ((i['movie']['ids']['trakt'], 0, 1, self.base_date, i['movie'].get('released')) for i in insert_list), movie_tasks) self._update_activity_record('movies_watched', update_time)
from datetime import datetime, timedelta from resources.lib.modules import trakt_sync from resources.lib.modules.trakt_sync import shows from resources.lib.modules.trakt_sync import movies from resources.lib.modules.trakt_sync import hidden from resources.lib.common import tools from resources.lib.indexers import trakt as Trakt show_sync = shows.TraktSyncDatabase() movie_sync = movies.TraktSyncDatabase() class TraktSyncDatabase(trakt_sync.TraktSyncDatabase): progress_dialog = None silent = False def run_activities_service(self): try: import xbmc monitor = xbmc.Monitor() except: pass self.sync_activities() while not monitor.abortRequested(): try: if monitor.waitForAbort(60 * 30): break except: import traceback
def _sync_watched_movies(self): self.threads = [] if tools.getSetting('trakt.auth') == '': return insert_list = [] if not self.silent: self.progress_dialog.update(-1, 'Fetching Watched Movies') update_time = str(datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S')) trakt_watched = Trakt.TraktAPI().json_response('/sync/watched/movies') trakt_watched = [i['movie']['ids']['trakt'] for i in trakt_watched] local_watched = movies.TraktSyncDatabase().get_watched_movies() local_watched = [i['trakt_id'] for i in local_watched] for movie in trakt_watched: if movie not in local_watched: insert_list.append((movie, False, False)) movie_tasks = len(insert_list) if movie_tasks == 0: self._update_activity_record('movies_watched', update_time) return inserted_tasks = 0 if not self.silent: self.progress_dialog.update(0, 'Inserting Watched Movies') cursor = self._get_cursor() sql_statements = 0 for i in insert_list: inserted_tasks += 1 progress_perc = (float(inserted_tasks) / float(movie_tasks)) * 100 if not self.silent: self.progress_dialog.update(int(progress_perc)) # self.task_queue.put(i, block=True) cursor.execute( "INSERT OR IGNORE INTO movies (" "trakt_id, kodi_meta, collected, watched, last_updated)" "VALUES " "(?, ?, ?, ?, ?)", (i[0], str({}), 0, 0, self.base_date)) sql_statements += 1 if sql_statements > 999: cursor.connection.commit() sql_statements = 0 if not self.silent: self.progress_dialog.update(0, 'Marking Movies Watched') for item in insert_list: # movie_sync.mark_movie_watched(item[1][0]) cursor.execute('UPDATE movies SET watched=1 WHERE trakt_id=?', (item[0], )) cursor.connection.commit() cursor.close() self._update_activity_record('movies_watched', update_time)