fix(api): Job-Meta (poster_path) an die Jobliste durchreichen
Ampel / ampel (push) Successful in 32s
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:
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user