diff --git a/src/tinyweb/db.py b/src/tinyweb/db.py index ea79356..174bc7c 100644 --- a/src/tinyweb/db.py +++ b/src/tinyweb/db.py @@ -138,6 +138,13 @@ def return_db(db): db.close() +def _ensure_columns(db, table, columns): + existing = {r[1] for r in db.execute(f"PRAGMA table_info({table})").fetchall()} + for name, col_def in columns.items(): + if name not in existing: + db.execute(f"ALTER TABLE {table} ADD COLUMN {name} {col_def}") + + def init_db(): os.makedirs(DATA_DIR, exist_ok=True) db = sqlite3.connect(DATABASE) @@ -177,6 +184,7 @@ def init_db(): " id INTEGER PRIMARY KEY AUTOINCREMENT," " dest_hash TEXT UNIQUE NOT NULL," " name TEXT DEFAULT ''," + " nickname TEXT DEFAULT NULL," " auto_sync INTEGER DEFAULT 0," " last_sync TEXT DEFAULT ''" ")" @@ -270,6 +278,64 @@ def init_db(): db.execute("CREATE INDEX IF NOT EXISTS idx_page_tags_page ON page_tags(page_id)") db.execute("CREATE INDEX IF NOT EXISTS idx_page_tags_tag ON page_tags(tag_id)") + _ensure_columns(db, "pages", { + "id": "INTEGER PRIMARY KEY AUTOINCREMENT", + "url": "TEXT UNIQUE NOT NULL", + "title": "TEXT", + "body": "TEXT", + "note": "TEXT DEFAULT ''", + "last_modified": "TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%S','now'))", + "summary": "TEXT DEFAULT ''", + "reticulum_dest": "TEXT DEFAULT ''", + }) + _ensure_columns(db, "subscriptions", { + "id": "INTEGER PRIMARY KEY AUTOINCREMENT", + "dest_hash": "TEXT UNIQUE NOT NULL", + "name": "TEXT DEFAULT ''", + "nickname": "TEXT DEFAULT NULL", + "auto_sync": "INTEGER DEFAULT 0", + "last_sync": "TEXT DEFAULT ''", + }) + _ensure_columns(db, "links", { + "id": "INTEGER PRIMARY KEY AUTOINCREMENT", + "page_id": "INTEGER NOT NULL", + "url": "TEXT NOT NULL", + "label": "TEXT", + }) + _ensure_columns(db, "settings", { + "key": "TEXT PRIMARY KEY", + "value": "TEXT", + }) + _ensure_columns(db, "remote_pages", { + "id": "INTEGER PRIMARY KEY AUTOINCREMENT", + "subscription_id": "INTEGER NOT NULL", + "url": "TEXT NOT NULL", + "title": "TEXT", + "note": "TEXT DEFAULT ''", + "tags": "TEXT DEFAULT ''", + }) + _ensure_columns(db, "tags", { + "id": "INTEGER PRIMARY KEY AUTOINCREMENT", + "name": "TEXT UNIQUE NOT NULL", + }) + _ensure_columns(db, "page_tags", { + "page_id": "INTEGER NOT NULL", + "tag_id": "INTEGER NOT NULL", + }) + _ensure_columns(db, "mesh_sites", { + "hash": "TEXT PRIMARY KEY", + "name": "TEXT DEFAULT ''", + "added_at": "TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%S','now'))", + }) + _ensure_columns(db, "chunks", { + "id": "INTEGER PRIMARY KEY AUTOINCREMENT", + "page_id": "INTEGER", + "remote_page_id": "INTEGER", + "chunk_index": "INTEGER NOT NULL", + "chunk_text": "TEXT NOT NULL", + "embedding": "BLOB NOT NULL", + }) + db.execute("PRAGMA journal_mode=WAL") db.execute("PRAGMA synchronous=NORMAL") db.execute("PRAGMA cache_size=-64000") diff --git a/src/tinyweb/handlers/__init__.py b/src/tinyweb/handlers/__init__.py index 14a37fd..06afeb5 100644 --- a/src/tinyweb/handlers/__init__.py +++ b/src/tinyweb/handlers/__init__.py @@ -29,7 +29,7 @@ from .subscriptions import ( handle_subscriptions, handle_subscription_add, handle_subscription_browse, handle_subscription_pick, _sync_subscription, handle_subscription_sync, handle_subscription_autosync, - handle_subscription_delete, handle_subscription_syncall, + handle_subscription_delete, handle_subscription_nickname, handle_subscription_syncall, _sync_threads, ) from .customize import handle_style_form, handle_style_submit, handle_style_template_submit, handle_field_save, handle_about, _set_flash @@ -163,6 +163,9 @@ def _dispatch_inner(data): elif path.startswith("/subscriptions/delete/"): sid = extract_id("/subscriptions/delete/") return handle_subscription_delete(sid) if sid is not None else _error(400) + elif path.startswith("/subscriptions/nickname/"): + sid = extract_id("/subscriptions/nickname/") + return handle_subscription_nickname(body, sid) if sid is not None else _error(400) elif path == "/subscriptions/syncall": return handle_subscription_syncall() elif path == "/rns/delete": diff --git a/src/tinyweb/handlers/subscriptions.py b/src/tinyweb/handlers/subscriptions.py index a7ba389..9528837 100644 --- a/src/tinyweb/handlers/subscriptions.py +++ b/src/tinyweb/handlers/subscriptions.py @@ -181,8 +181,13 @@ def handle_subscriptions(msg=""): cards += ( f'