| import aiosqlite |
| import os |
| DB_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data.db") |
| async def init_db(): |
| async with aiosqlite.connect(DB_PATH) as db: |
| await db.execute("CREATE TABLE IF NOT EXISTS sources (id TEXT PRIMARY KEY, name TEXT, type TEXT, url TEXT, api_key TEXT)") |
| await db.execute("CREATE TABLE IF NOT EXISTS recordings (id TEXT PRIMARY KEY, source_id TEXT, dataset_repo TEXT, original_name TEXT, md5_name TEXT, status TEXT, start_time REAL, end_time REAL, file_path TEXT, remote_url TEXT, remote_id TEXT)") |
| await db.execute("CREATE TABLE IF NOT EXISTS epg_cache (id TEXT PRIMARY KEY, source_id TEXT, data TEXT, cached_at REAL)") |
| await db.commit() |
| async def sync_sources(sources): |
| async with aiosqlite.connect(DB_PATH) as db: |
| await db.execute("DELETE FROM sources") |
| await db.executemany("INSERT OR IGNORE INTO sources VALUES (?,?,?,?,?)", [(s["id"], s["name"], s["type"], s["url"], s.get("api_key","")) for s in sources]) |
| await db.commit() |
| async def get_sources(): |
| async with aiosqlite.connect(DB_PATH) as db: |
| db.row_factory = aiosqlite.Row |
| async with db.execute("SELECT * FROM sources") as cursor: |
| return [dict(r) for r in await cursor.fetchall()] |
| async def upsert_recording(data): |
| async with aiosqlite.connect(DB_PATH) as db: |
| await db.execute("INSERT OR REPLACE INTO recordings VALUES (?,?,?,?,?,?,?,?,?,?,?)", (data["id"], data["source_id"], data.get("dataset_repo",""), data["original_name"], data["md5_name"], data["status"], data["start_time"], data.get("end_time",0), data.get("file_path",""), data.get("remote_url",""), data.get("remote_id",""))) |
| await db.commit() |
| async def get_recording(rec_id): |
| async with aiosqlite.connect(DB_PATH) as db: |
| db.row_factory = aiosqlite.Row |
| async with db.execute("SELECT * FROM recordings WHERE id=?", (rec_id,)) as cursor: |
| row = await cursor.fetchone() |
| return dict(row) if row else None |
| async def list_recordings(): |
| async with aiosqlite.connect(DB_PATH) as db: |
| db.row_factory = aiosqlite.Row |
| async with db.execute("SELECT * FROM recordings ORDER BY start_time DESC") as cursor: |
| return [dict(r) for r in await cursor.fetchall()] |
| async def cache_epg(source_id, data, timestamp): |
| async with aiosqlite.connect(DB_PATH) as db: |
| await db.execute("INSERT OR REPLACE INTO epg_cache VALUES (?,?,?,?)", (source_id, source_id, data, timestamp)) |
| await db.commit() |