// Poster/Fanart neben den Film legen (KONZEPT § 6.10) — Regeln aus // medien.py: relative TMDb-Pfade bekommen das w500-Präfix; ein fehlendes // Poster darf einen gelungenen Rip NIE kippen (best effort, aber die // Meldung sagt was passiert ist). import { writeFileSync } from 'node:fs' export function posterUrl(posterPfad: string): string { if (posterPfad.length === 0) return '' if (posterPfad.startsWith('http')) return posterPfad return `https://image.tmdb.org/t/p/w500${posterPfad}` } export async function posterSpeichern( posterPfad: string, zielDatei: string, holen: typeof fetch = fetch, ): Promise { const url = posterUrl(posterPfad) if (url.length === 0) return '' try { const antwort = await holen(url, { signal: AbortSignal.timeout(15_000) }) if (antwort.status !== 200) return `Poster: HTTP ${antwort.status}` const daten = Buffer.from(await antwort.arrayBuffer()) if (daten.length === 0) return 'Poster: leere Antwort' writeFileSync(zielDatei, daten) return 'poster.jpg gespeichert' } catch (fehler) { return `Poster fehlgeschlagen: ${String(fehler)}` } }