Example #1
0
    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)
Example #2
0
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
Example #3
0
    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')
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
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
Example #7
0
    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)