예제 #1
0
def _build_lists_table():
    control.anilistSyncDB_lock.acquire()
    cursor = _get_connection_cursor(control.anilistSyncDB)
    cursor.execute('CREATE TABLE IF NOT EXISTS shows ('
                   'mal_id INTEGER,'
                   'name TEXT NOT NULL, '
                   'image TEXT NOT NULL,'
                   'slug TEXT NOT NULL,'
                   'PRIMARY KEY (mal_id)) ')
    cursor.execute(
        'CREATE UNIQUE INDEX IF NOT EXISTS ix_shows ON "shows" (mal_id ASC )')
    try:
        cursor.execute(
            "REPLACE INTO shows ("
            "mal_id, name, image, slug)"
            "VALUES "
            "(?, ?, ?, ?)", (1, 'ss', 'hhtp', 'dfd-sds'))
        cursor.connection.commit()
        cursor.close()
    except:
        cursor.close()

        import traceback
        traceback.print_exc()
        pass
    finally:
        control.try_release_lock(control.anilistSyncDB_lock)
예제 #2
0
def addSearchHistory(search_string, media_type):
    try:
        control.searchHistoryDB_lock.acquire()
        cursor = _get_connection_cursor(control.searchHistoryDB)
        cursor.execute('CREATE TABLE IF NOT EXISTS show (value TEXT)')
        cursor.execute('CREATE TABLE IF NOT EXISTS movie (value TEXT)')
        cursor.execute(
            "CREATE UNIQUE INDEX IF NOT EXISTS ix_history ON movie (value)")
        cursor.execute(
            "CREATE UNIQUE INDEX IF NOT EXISTS ix_history ON show (value)")

        cursor.execute("REPLACE INTO %s Values (?)" % media_type,
                       (search_string, ))

        cursor.connection.commit()
        cursor.close()
    except:
        try:
            cursor.close()
        except:
            pass
        import traceback
        traceback.print_exc()
        return []
    finally:
        control.try_release_lock(control.searchHistoryDB_lock)
예제 #3
0
def cache_insert(key, value):
    control.cacheFile_lock.acquire()
    try:
        cursor = _get_connection_cursor(control.cacheFile)
        now = int(time.time())
        cursor.execute(
            "CREATE TABLE IF NOT EXISTS %s (key TEXT, value TEXT, date INTEGER, UNIQUE(key))"
            % cache_table)
        cursor.execute("CREATE UNIQUE INDEX IF NOT EXISTS ix_%s ON %s (key)" %
                       (cache_table, cache_table))
        cursor.execute(
            "REPLACE INTO %s (key, value, date) VALUES (?, ?, ?)" %
            cache_table, (key, value, now))
        cursor.connection.commit()
        cursor.close()
    except:
        try:
            cursor.close()
        except:
            pass
        import traceback
        traceback.print_exc()
        pass
    finally:
        control.try_release_lock(control.cacheFile_lock)
예제 #4
0
def mark_episode_unwatched_by_id():
    control.anilistSyncDB_lock.acquire()
    cursor = _get_connection_cursor(control.anilistSyncDB)
    cursor.execute('UPDATE shows SET trakt_id=? WHERE anilist_id=?', (69, 2))
    cursor.connection.commit()
    cursor.close()
    control.try_release_lock(control.anilistSyncDB_lock)
예제 #5
0
def getTorrentList(anilist_id):
    control.torrentScrapeCacheFile_lock.acquire()
    try:
        cursor = _get_connection_cursor(control.torrentScrapeCacheFile)
        _try_create_torrent_cache(cursor)
        cursor.execute("SELECT * FROM %s WHERE anilist_id=?" % cache_table,
                       (anilist_id, ))
        torrent_list = cursor.fetchone()
        zfill_int = None
        cursor.close()

        if torrent_list:
            zfill_int = torrent_list['zfill']
            torrent_list = ast.literal_eval(torrent_list['sources'])

        return [torrent_list, zfill_int]

    except:
        try:
            cursor.close()
        except:
            pass
        import traceback
        traceback.print_exc()
        return []
    finally:
        control.try_release_lock(control.torrentScrapeCacheFile_lock)
예제 #6
0
def getSearchHistory(media_type='show'):
    try:
        control.searchHistoryDB_lock.acquire()
        cursor = _get_connection_cursor(control.searchHistoryDB)
        cursor.execute('CREATE TABLE IF NOT EXISTS show (value TEXT)')
        cursor.execute('CREATE TABLE IF NOT EXISTS movie (value TEXT)')
        cursor.execute(
            "CREATE UNIQUE INDEX IF NOT EXISTS ix_history ON movie (value)")
        cursor.execute(
            "CREATE UNIQUE INDEX IF NOT EXISTS ix_history ON show (value)")

        cursor.execute("SELECT * FROM %s" % media_type)
        history = cursor.fetchall()
        cursor.close()
        history.reverse()
        history = history[:50]
        filter = []
        for i in history:
            if i['value'] not in filter:
                filter.append(i['value'])

        return filter
    except:
        try:
            cursor.close()
        except:
            pass
        import traceback
        traceback.print_exc()
        return []
    finally:
        control.try_release_lock(control.searchHistoryDB_lock)
예제 #7
0
def addTorrentList(anilist_id, torrent_list, zfill_int):
    try:
        control.torrentScrapeCacheFile_lock.acquire()
        cursor = _get_connection_cursor(control.torrentScrapeCacheFile)
        _try_create_torrent_cache(cursor)

        try:
            cursor.execute(
                "REPLACE INTO %s (anilist_id, sources, zfill) "
                "VALUES (?, ?, ?)" % cache_table,
                (anilist_id, str(torrent_list), int(zfill_int)))
        except:
            import traceback
            traceback.print_exc()

        cursor.connection.commit()
        cursor.close()
    except:
        try:
            cursor.close()
        except:
            pass
        import traceback
        traceback.print_exc()
        return []
    finally:
        control.try_release_lock(control.torrentScrapeCacheFile_lock)
예제 #8
0
def torrent_cache_clear():
    confirmation = control.yesno_dialog(
        control.ADDON_NAME, "Are you sure you wish to clear the cache?")
    if not confirmation:
        return
    try:
        control.torrentScrapeCacheFile_lock.acquire()
        cursor = _get_connection_cursor(control.torrentScrapeCacheFile)
        for t in [cache_table, 'rel_list', 'rel_lib']:
            try:
                cursor.execute("DROP TABLE IF EXISTS %s" % t)
                cursor.execute("VACUUM")
                cursor.connection.commit()
            except:
                pass
    except:
        try:
            cursor.close()
        except:
            pass
        import traceback
        traceback.print_exc()
    finally:
        control.try_release_lock(control.torrentScrapeCacheFile_lock)

    control.showDialog.notification('{}: {}'.format(control.ADDON_NAME,
                                                    control.lang(30200)),
                                    control.lang(30202),
                                    time=5000)
예제 #9
0
def clearSearchHistory():
    try:
        control.searchHistoryDB_lock.acquire()
        confirmation = control.yesno_dialog(control.ADDON_NAME,
                                            "Clear search history?")
        if not confirmation:
            return
        cursor = _get_connection_cursor(control.searchHistoryDB)
        cursor.execute("DROP TABLE IF EXISTS movie")
        cursor.execute("DROP TABLE IF EXISTS show")
        try:
            cursor.execute("VACCUM")
        except:
            pass
        cursor.connection.commit()
        cursor.close()
        control.refresh()
        control.showDialog.notification(control.ADDON_NAME,
                                        "Search History has been cleared",
                                        time=5000)
    except:
        try:
            cursor.close()
        except:
            pass
        import traceback
        traceback.print_exc()
        return []
    finally:
        control.try_release_lock(control.searchHistoryDB_lock)
예제 #10
0
    def re_build_database(self, silent=False):
        if not silent:
            confirm = control.yesno_dialog(control.ADDON_NAME, control.lang(30203))
            if confirm == 0:
                return

        control.anilistSyncDB_lock.acquire()
        cursor = self._get_cursor()
        cursor.execute('DROP TABLE IF EXISTS shows')
        cursor.execute('DROP TABLE IF EXISTS seasons')
        cursor.execute('DROP TABLE IF EXISTS episodes')
        cursor.execute('DROP TABLE IF EXISTS activities')
        try:
            cursor.execute("VACCUM")
        except:
            pass
        cursor.connection.commit()
        cursor.close()

        control.try_release_lock(control.anilistSyncDB_lock)

        self._build_show_table()
        self._build_episode_table()
        self._build_sync_activities()
        self._build_season_table()

        self._set_base_activites()
        self._refresh_activites()
예제 #11
0
def updateSlugs(anilist_id, sources):
    try:
        control.torrentScrapeCacheFile_lock.acquire()
        cursor = _get_connection_cursor(control.torrentScrapeCacheFile)
        _try_create_torrent_cache(cursor)

        try:
            cursor.execute('UPDATE cache SET sources=? WHERE anilist_id=?',
                           (sources, anilist_id))
        except:
            import traceback
            traceback.print_exc()

        cursor.connection.commit()
        cursor.close()
    except:
        try:
            cursor.close()
        except:
            pass
        import traceback
        traceback.print_exc()
        return []
    finally:
        control.try_release_lock(control.torrentScrapeCacheFile_lock)
예제 #12
0
def add_meta_ids(anilist_id, meta_ids):
    control.anilistSyncDB_lock.acquire()
    cursor = _get_cursor()
    cursor.execute('UPDATE shows SET meta_ids=? WHERE anilist_id=?',
                   (meta_ids, anilist_id))
    cursor.connection.commit()
    cursor.close()
    control.try_release_lock(control.anilistSyncDB_lock)
예제 #13
0
def update_kodi_meta(anilist_id, kodi_meta):
    control.anilistSyncDB_lock.acquire()
    cursor = _get_cursor()
    cursor.execute('UPDATE shows SET kodi_meta=? WHERE anilist_id=?',
                   (str(kodi_meta), anilist_id))
    cursor.connection.commit()
    cursor.close()
    control.try_release_lock(control.anilistSyncDB_lock)
예제 #14
0
def get_episode_list(show_id):
    control.anilistSyncDB_lock.acquire()
    cursor = _get_cursor()
    cursor.execute('SELECT* FROM episodes WHERE anilist_id = ?', (show_id, ))
    episodes = cursor.fetchall()
    cursor.close()
    control.try_release_lock(control.anilistSyncDB_lock)
    return episodes
예제 #15
0
def get_season_list(show_id):
    control.anilistSyncDB_lock.acquire()
    cursor = _get_cursor()
    cursor.execute('SELECT* FROM seasons WHERE anilist_id = ?', (show_id, ))
    seasons = cursor.fetchone()
    cursor.close()
    control.try_release_lock(control.anilistSyncDB_lock)
    return seasons
예제 #16
0
def _get_show_list():
    control.anilistSyncDB_lock.acquire()
    cursor = _get_connection_cursor(control.anilistSyncDB)
    cursor.execute('SELECT * FROM shows')
    shows = cursor.fetchall()
    cursor.close()
    control.try_release_lock(control.anilistSyncDB_lock)
    return shows
예제 #17
0
def add_mapping_id(anilist_id, column, value):
    control.anilistSyncDB_lock.acquire()
    cursor = _get_cursor()
    cursor.execute('UPDATE shows SET %s=? WHERE anilist_id=?' % column,
                   (value, anilist_id))
    cursor.connection.commit()
    cursor.close()
    control.try_release_lock(control.anilistSyncDB_lock)
예제 #18
0
def get_show_mal(mal_id):
    control.anilistSyncDB_lock.acquire()
    cursor = _get_connection_cursor(control.anilistSyncDB)
    db_query = 'SELECT * FROM shows WHERE mal_id IN (%s)' % mal_id
    cursor.execute(db_query)
    shows = cursor.fetchone()
    cursor.close()
    control.try_release_lock(control.anilistSyncDB_lock)
    return shows
예제 #19
0
 def flush_activities(self, clear_meta=False):
     if clear_meta:
         self.clear_all_meta()
     control.anilistSyncDB_lock.acquire()
     cursor = self._get_cursor()
     cursor.execute('DROP TABLE activities')
     cursor.connection.commit()
     cursor.close()
     control.try_release_lock(control.anilistSyncDB_lock)
예제 #20
0
 def _build_sync_activities(self):
     control.anilistSyncDB_lock.acquire()
     cursor = self._get_cursor()
     cursor.execute('CREATE TABLE IF NOT EXISTS activities ('
                    'sync_id INTEGER PRIMARY KEY, '
                    'kaito_version TEXT NOT NULL) '
                    )
     cursor.connection.commit()
     cursor.close()
     control.try_release_lock(control.anilistSyncDB_lock)
예제 #21
0
def cache_get(key):
    try:
        control.cacheFile_lock.acquire()
        cursor = _get_connection_cursor(control.cacheFile)
        cursor.execute("SELECT * FROM %s WHERE key = ?" % cache_table, [key])
        results = cursor.fetchone()
        cursor.close()
        return results
    except OperationalError:
        return None
    finally:
        control.try_release_lock(control.cacheFile_lock)
예제 #22
0
 def _build_season_table(self):
     control.anilistSyncDB_lock.acquire()
     cursor = self._get_cursor()
     cursor.execute('CREATE TABLE IF NOT EXISTS seasons ('
                    'anilist_id INTEGER NOT NULL, '
                    'season INTEGER NOT NULL, '
                    'kodi_meta TEXT NOT NULL, '
                    'air_date TEXT, '
                    'FOREIGN KEY(anilist_id) REFERENCES shows(anilist_id) ON DELETE CASCADE)')
     cursor.execute('CREATE UNIQUE INDEX IF NOT EXISTS ix_season ON seasons (anilist_id ASC, season ASC)')
     cursor.connection.commit()
     cursor.close()
     control.try_release_lock(control.anilistSyncDB_lock)
예제 #23
0
    def clear_all_meta(self, notify=True):
##        if notify:
##            confirm = tools.showDialog.yesno(tools.addonName, tools.lang(40139))
##            if confirm == 0:
##                return
        control.anilistSyncDB_lock.acquire()
        cursor = self._get_cursor()
        cursor.execute("DELETE FROM shows")
        cursor.execute("DELETE FROM seasons")
        cursor.execute("DELETE FROM episodes")
        cursor.connection.commit()
        cursor.close()
        control.try_release_lock(control.anilistSyncDB_lock)
        control.showDialog.notification(control.ADDON_NAME + ': Trakt', 'sddsds', time=5000)
예제 #24
0
    def _check_database_version(self):
        # Migrate from an old version before database migrations
        if 'kaito_version' not in self.activites:
##            control.log('Upgrading Trakt Sync Database Version')
            self.clear_all_meta(False)
            control.anilistSyncDB_lock.acquire()
            cursor = self._get_cursor()
            cursor.execute('ALTER TABLE activities ADD COLUMN kaito_version TEXT')
            cursor.execute('UPDATE activities SET kaito_version = ?', (self.last_meta_update,))
            cursor.connection.commit()
            cursor.close()
            control.try_release_lock(control.anilistSyncDB_lock)

        if self.check_version_numbers(self.activites['kaito_version'], self.last_meta_update):
##            control.log('Rebuilding Trakt Sync Database Version')
            self.re_build_database(True)
            return
예제 #25
0
def remove_episodes(anilist_id):
    control.anilistSyncDB_lock.acquire()
    cursor = _get_cursor()
    try:
        cursor.execute("DELETE FROM episodes WHERE anilist_id = ?",
                       (anilist_id, ))
        cursor.connection.commit()
        cursor.close()
    except:
        try:
            cursor.close()
        except:
            pass
        import traceback
        traceback.print_exc()
    finally:
        control.try_release_lock(control.anilistSyncDB_lock)
예제 #26
0
 def _build_show_table(self):
     control.anilistSyncDB_lock.acquire()
     cursor = self._get_cursor()
     cursor.execute('CREATE TABLE IF NOT EXISTS shows '
                    '(anilist_id INTEGER PRIMARY KEY, '
                    'mal_id INTEGER,'
                    'simkl_id INTEGER,'
                    'kitsu_id INTEGER,'
                    'meta_ids TEXT,'
                    'kodi_meta TEXT NOT NULL, '
                    'last_updated TEXT NOT NULL, '
                    'air_date TEXT, '
                    'UNIQUE(anilist_id))')
     cursor.execute('CREATE UNIQUE INDEX IF NOT EXISTS ix_shows ON "shows" (anilist_id ASC )')
     cursor.connection.commit()
     cursor.close()
     control.try_release_lock(control.anilistSyncDB_lock)
예제 #27
0
def _update_season(show_id, season):
    control.anilistSyncDB_lock.acquire()
    cursor = _get_cursor()
    try:
        cursor.execute(
            "REPLACE INTO seasons ("
            "anilist_id, season, kodi_meta, air_date)"
            "VALUES "
            "(?, ?, ?, ?)", (int(show_id), str(season), '', ''))
        cursor.connection.commit()
        cursor.close()

    except:
        cursor.close()
        import traceback
        traceback.print_exc()
        pass
    finally:
        control.try_release_lock(control.anilistSyncDB_lock)
예제 #28
0
def _build_episode_table():
    control.anilistSyncDB_lock.acquire()
    cursor = _get_cursor()
    cursor.execute(
        'CREATE TABLE IF NOT EXISTS episodes ('
        'anilist_id INTEGER NOT NULL, '
        'season INTEGER NOT NULL, '
        'kodi_meta TEXT NOT NULL, '
        'last_updated TEXT NOT NULL, '
        'number INTEGER NOT NULL, '
        'number_abs INTEGER,'
        'air_date TEXT, '
        'FOREIGN KEY(anilist_id) REFERENCES shows(anilist_id) ON DELETE CASCADE)'
    )
    cursor.execute(
        'CREATE UNIQUE INDEX IF NOT EXISTS ix_episodes ON episodes (anilist_id ASC, season ASC, number ASC)'
    )
    cursor.connection.commit()
    cursor.close()
    control.try_release_lock(control.anilistSyncDB_lock)
예제 #29
0
def cache_clear():
    try:
        control.cacheFile_lock.acquire()
        cursor = _get_connection_cursor(control.cacheFile)

        for t in [cache_table, 'rel_list', 'rel_lib']:
            try:
                cursor.execute("DROP TABLE IF EXISTS %s" % t)
                cursor.execute("VACUUM")
                cursor.connection.commit()
            except:
                pass
        control.showDialog.notification('{}: {}'.format(
            control.ADDON_NAME, control.lang(30200)),
                                        control.lang(30201),
                                        time=5000)
    except:
        pass
    finally:
        control.try_release_lock(control.cacheFile_lock)
예제 #30
0
    def _build_lists_table(self):
        control.anilistSyncDB_lock.acquire()
        cursor = self._get_cursor()
        cursor.execute('CREATE TABLE IF NOT EXISTS lists ('
                       'trakt_id INTEGER NOT NULL, '
                       'media_type TEXT NOT NULL,'
                       'name TEXT NOT NULL, '
                       'username TEXT NOT NULL, '
                       'kodi_meta TEXT NOT NULL, '
                       'updated_at TEXT NOT NULL,'
                       'list_type TEXT NOT NULL,'
                       'item_count INT NOT NULL,'
                       'sort_by TEXT NOT NULL,'
                       'sort_how TEXT NOT NULL,'
                       'slug TEXT NOT NULL,'
                       'PRIMARY KEY (trakt_id, media_type)) '
                       )

        cursor.connection.commit()
        cursor.close()
        control.try_release_lock(control.anilistSyncDB_lock)