From f74f4e54f6c86b8de4f142d12f742cc2f0380743 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Sat, 25 Jul 2026 00:03:20 +0200 Subject: [PATCH] fix(api): Job-Meta (poster_path) an die Jobliste durchreichen GET /jobs nutzt response_model=List[Job]; das Job-Model hatte kein meta-Feld, also schnitt FastAPI die Disc-Metadaten (poster_path) weg -> Dashboard.tsx bekam job.meta = undefined -> Filmstreifen-Platzhalter statt TMDB-Poster, sowohl in der Jobliste als auch im aktiven Rip-Header (beide aus /jobs). Additiv: meta: Optional[Dict] ins Job-Model + in _job_row_to_model parsen (json.loads wie im Detail-Endpunkt, defensiv gegen kaputtes JSON). Keine UI-Aenderung noetig -- posterUrl() rendert dann die vorhandenen Poster. Co-Authored-By: Claude Opus 4.8 --- docker/api/main.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docker/api/main.py b/docker/api/main.py index dca392c..654046c 100644 --- a/docker/api/main.py +++ b/docker/api/main.py @@ -250,6 +250,7 @@ class Job(BaseModel): title: Optional[str] = None error: Optional[str] = None can_retry: bool = False # Rohdaten vorhanden → „Neu komprimieren" sinnvoll + meta: Optional[Dict] = None # Disc-Metadaten (Poster/Jahr/Plot) — fürs Thumbnail in der Jobliste + aktivem Rip-Header class Device(BaseModel): id: str @@ -265,6 +266,13 @@ class Device(BaseModel): def _job_row_to_model(zeile: dict) -> Job: """DB-Zeile → UI-Form (Worker-Status 'running' heißt im UI 'processing').""" status_map = {"running": "processing"} + # meta (JSON-Text) enthält u. a. poster_path — die UI baut daraus das Thumbnail. + # Muss hier mit ins Job-Model, sonst schneidet FastAPIs response_model es weg + # (Befund 25.07.: meta kam nie in der Jobliste an → Filmstreifen-Platzhalter). + try: + meta = json.loads(zeile["meta"]) if zeile.get("meta") else None + except (ValueError, TypeError): + meta = None return Job( id=zeile["id"], type=zeile.get("disc_type") or "unknown", @@ -275,6 +283,7 @@ def _job_row_to_model(zeile: dict) -> Job: progress=zeile.get("progress") or 0, title=zeile.get("title"), error=zeile.get("error"), + meta=meta, ) @app.get("/health")