fix(api): Job-Meta (poster_path) an die Jobliste durchreichen
Ampel / ampel (push) Successful in 32s

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 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-25 00:03:20 +02:00
parent 0832ef777c
commit f74f4e54f6
+9
View File
@@ -250,6 +250,7 @@ class Job(BaseModel):
title: Optional[str] = None title: Optional[str] = None
error: Optional[str] = None error: Optional[str] = None
can_retry: bool = False # Rohdaten vorhanden → „Neu komprimieren" sinnvoll 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): class Device(BaseModel):
id: str id: str
@@ -265,6 +266,13 @@ class Device(BaseModel):
def _job_row_to_model(zeile: dict) -> Job: def _job_row_to_model(zeile: dict) -> Job:
"""DB-Zeile → UI-Form (Worker-Status 'running' heißt im UI 'processing').""" """DB-Zeile → UI-Form (Worker-Status 'running' heißt im UI 'processing')."""
status_map = {"running": "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( return Job(
id=zeile["id"], id=zeile["id"],
type=zeile.get("disc_type") or "unknown", 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, progress=zeile.get("progress") or 0,
title=zeile.get("title"), title=zeile.get("title"),
error=zeile.get("error"), error=zeile.get("error"),
meta=meta,
) )
@app.get("/health") @app.get("/health")