Skip to content

Added Watchlist Support :P #26

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 23 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bd4f231
Add watchlist functionality with database support
FundyJo Jun 7, 2025
e01284f
Add watchtime and watched episodes tracking functionality
FundyJo Jun 7, 2025
459623a
Enhance CSS styles for season filter and watchlist button
FundyJo Jun 7, 2025
32b2730
Add loop for graceful exit during process execution
FundyJo Jun 7, 2025
b7fe661
Refactor database initialization to use a single database for watchli…
FundyJo Jun 7, 2025
9c9cb9c
Refactor episode sorting and add watched status check in display logic
FundyJo Jun 7, 2025
459cd7a
Watchlist Quick Fix
FundyJo Jun 8, 2025
7ce664a
Watchlist Quick Fix
FundyJo Jun 8, 2025
ebf7405
Watchlist Quick Fix
FundyJo Jun 8, 2025
52fa685
Watchlist Quick Fix Final Fix
FundyJo Jun 8, 2025
aabcc57
Watchlist Quick Fix Final Fix
FundyJo Jun 8, 2025
b475a67
Watchlist Quick Fix Final Fix
FundyJo Jun 8, 2025
e541010
move db stuff to seperate file
Commandcracker Jun 8, 2025
778428a
Refactor watchtime handling and improve episode transition logic
FundyJo Jun 9, 2025
118a992
Merge remote-tracking branch 'origin/main'
FundyJo Jun 9, 2025
840cb30
Add popular anime and series fetching functionality
FundyJo Jun 9, 2025
0cf7c1f
Add popular anime and series fetching functionality
FundyJo Jun 9, 2025
a12abb2
Refactor search result handling for anime and series providers
FundyJo Jun 9, 2025
17e927b
Refactor search result handling for anime and series providers
FundyJo Jun 9, 2025
df4a8d9
Refactor search result handling for anime and series providers
FundyJo Jun 9, 2025
4079322
Refactor search result handling for anime and series providers
FundyJo Jun 9, 2025
0ee2f2e
Refactor search result handling for anime and series providers
FundyJo Jun 9, 2025
c1bbee0
Refactor search result handling for anime and series providers
FundyJo Jun 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions src/gucken/db.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
from sqlite3 import connect
from platformdirs import user_config_path
from .provider.common import SearchResult

GUCKEN_DB = user_config_path("gucken").joinpath("gucken.db")

def init_db():
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS watched_episodes
(series TEXT, season INTEGER, episode INTEGER, provider TEXT,
PRIMARY KEY (series, season, episode, provider))''')
c.execute('''CREATE TABLE IF NOT EXISTS watchtime
(series TEXT, season INTEGER, episode INTEGER, provider TEXT, time TEXT,
PRIMARY KEY (series, season, episode, provider))''')
c.execute('''CREATE TABLE IF NOT EXISTS watchlist
(name TEXT, provider TEXT, PRIMARY KEY (name, provider))''')
conn.commit()
conn.close()

def mark_episode_watched(series, season, episode, provider):
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute('''INSERT OR REPLACE INTO watched_episodes (series, season, episode, provider)
VALUES (?, ?, ?, ?)''', (series, season, episode, provider))
conn.commit()
conn.close()

def is_episode_watched(series, season, episode, provider):
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute('''SELECT 1 FROM watched_episodes WHERE series=? AND season=? AND episode=? AND provider=?''',
(series, season, episode, provider))
result = c.fetchone()
conn.close()
return result is not None

def save_watchtime(series, season, episode, provider, time_str):
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute('''INSERT OR REPLACE INTO watchtime (series, season, episode, provider, time)
VALUES (?, ?, ?, ?, ?)''', (series, season, episode, provider, time_str))
conn.commit()
conn.close()

def get_unfinished_watchtime():
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute('SELECT series, season, episode, provider, time FROM watchtime')
rows = c.fetchall()
conn.close()
return rows

def remove_watchtime(series, season, episode, provider):
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute('DELETE FROM watchtime WHERE series=? AND season=? AND episode=? AND provider=?',
(series, season, episode, provider))
conn.commit()
conn.close()

def add_to_watchlist(series: SearchResult):
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute("INSERT OR IGNORE INTO watchlist VALUES (?, ?)",
(series.name, series.provider_name))
conn.commit()
conn.close()

def remove_from_watchlist(series: SearchResult):
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute("DELETE FROM watchlist WHERE name=? AND provider=?", (series.name, series.provider_name))
conn.commit()
conn.close()

def is_in_watchlist(series: SearchResult) -> bool:
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute("SELECT 1 FROM watchlist WHERE name=? AND provider=?", (series.name, series.provider_name))
result = c.fetchone()
conn.close()
return result is not None

def get_watchlist() -> list:
conn = connect(GUCKEN_DB)
c = conn.cursor()
c.execute("SELECT name, provider FROM watchlist")
rows = c.fetchall()
conn.close()
return rows # [(name, provider_name), ...]
Loading