Skip to content

Datenbank DE

TheMRX13 edited this page Jul 3, 2026 · 2 revisions

Datenbank

🌐 English · Deutsch

SQLite-Datenbank unter ~/.mediaforge/mediaforge.db — WAL-Modus, 30 s Busy-Timeout, Verbindungen werden pro Flask-Request gecacht. Ein PID-Lock (~/.mediaforge/mediaforge.pid) warnt, wenn zwei Instanzen dieselbe DB verwenden.

Tabellen

Tabelle Inhalt
users Benutzer: Rolle (admin/user), Passwort-Hash (Werkzeug), SSO-Identität (sso_issuer+sso_subject, unique), UI-Sprache
app_settings Key-Value-Store aller Einstellungen (sensible Werte verschlüsselt, s. u.)
download_queue Download-Aufträge: Episoden-Liste (JSON), Sprache, Provider, Status (queued/running/completed/partial/failed/cancelled), Fortschritt, Fehler (JSON), Statistiken, Captcha-URL, Upscale-Flag
custom_paths Benannte zusätzliche Download-Ziele
autosync_jobs Sync-Jobs: Sprache, Provider, Custom Path, enabled, on_hold, path_unavailable_action, episode_filter (JSON: Staffel-/Episoden-Auswahl), movie_custom_path_id (eigener Pfad für Filme/Specials), filter_dirty (stille Baseline-Neuberechnung nach Filter-Änderung), group_name (optionale manuelle Gruppe), Zähler (episodes_found, local_episodes_found, last_new_count), Fehler/Retry-Stand
favourites Serien-Lesezeichen pro Benutzer
seerr_hidden Pro Benutzer ausgeblendete Seerr-Anfragen
library_cache Gecachter Bibliotheks-Scan pro Pfad (JSON) + Scan-Status
user_notification_prefs Benachrichtigungs-Einstellungen pro Benutzer (Chat-IDs, Event-Schalter)
push_subscriptions Web-Push-Abos (Endpoint + Schlüssel, benutzergebunden)
tmdb_cache TMDB-Lookups (24 h TTL, stündliche Bereinigung)
browse_cache Browse-Listen (neue/beliebte Titel)
upscale_queue Anime4K-Aufträge (auch Mehrdatei-Einträge via JSON-Spalte files)
mediascan_cache Plex/Jellyfin-Bestand (TMDB/IMDB/TVDB-IDs)
download_history Dauerhaftes Episoden-Protokoll: Titel, Staffel/Episode, Quelle, Benutzer, Zielpfad, Größe, Ø-Geschwindigkeit, Dauer, status (completed/failed/cancelled/skipped), error (Fehler- bzw. Skip-Grund), Start-/Endzeit (UTC)
calendar_media Cache des Kalender-Watchers — eine Zeile pro TMDB-Titel: tmdb_id (unique), zweisprachiger Titel (title/title_en), Poster, last_updated
calendar_episodes Cache des Kalender-Watchers — datierte Episoden/Releases pro Medium: Staffel/Episode (NULL bei Filmen), zweisprachiger Name (name/name_en), air_date, Still
watch_progress Abspielposition pro Datei für den Browser-Player

Schema-Migrationen laufen automatisch beim Start (ALTER TABLE-Nachrüstungen in den init_*-Funktionen) — Downgrades sind nicht vorgesehen.

Verschlüsselte Einstellungen

Sensible Keys werden mit Fernet verschlüsselt gespeichert (Präfix enc:); der Schlüssel wird aus dem Flask-Secret (~/.mediaforge/.flask_secret) abgeleitet. Betroffen sind u. a.:

external_api_key, seerr_api_key, oidc_client_secret, cineinfo_tmdb_api_key, mediaplayer_apikey, mediascan_jf_apikey, notif_telegram_bot_token, notif_pushover_app_token, notif_discord_webhook_url, notif_ntfy_auth_token, notif_ntfy_password, pushover_user_key.

Bestehende Klartext-Werte werden beim Start automatisch migriert.

Backup-Hinweis: mediaforge.db und .flask_secret immer zusammen sichern — ohne das Secret sind die verschlüsselten Settings nicht wiederherstellbar.

Zugriffsmuster

  • get_setting(key, default) / set_setting(key, value) / delete_setting(key) — zentrale Settings-API (ver-/entschlüsselt transparent).
  • Queue-Claiming (claim_next_queued) nutzt eine eigene Verbindung mit atomarem UPDATE … WHERE status='queued', damit nie zwei Worker denselben Auftrag greifen.
  • get_encoding_ffmpeg_opts() übersetzt die Encoding-Einstellungen in fertige FFmpeg-Argumente (inkl. Expert-Flag-Parser).

Clone this wiki locally