diff --git a/backend/src/tools/media/routes.js b/backend/src/tools/media/routes.js index 632c58b..355fb5e 100644 --- a/backend/src/tools/media/routes.js +++ b/backend/src/tools/media/routes.js @@ -160,7 +160,7 @@ async function xrelFetch(path, params = {}) { // Einzige Funktion für xREL: benutzt immer die ext_info_id und gibt max 5 deutsche ≤1080p Releases // Cache-Key: tmdb_id (immer eindeutig, konsistent zwischen Badge und Modal) async function getXrelData(tmdbId, imdbId, title, originalTitle, movieYear, mediaType='movie') { - const cacheKey = `xrel:tmdb:${tmdbId}`; + const cacheKey = `xrel:${mediaType}:${tmdbId}`; const cached = cacheGet(cacheKey); if (cached !== undefined) return cached; @@ -236,7 +236,8 @@ async function getXrelData(tmdbId, imdbId, title, originalTitle, movieYear, medi // Alte Filme (< 2015) haben oft Releases die Jahre später erschienen → nicht filtern const releaseYearOk = (releaseDate) => { if (!movieYear || !releaseDate) return true; - if (movieYear < 2015) return true; // alte Filme: alles erlaubt + if (movieYear < 2015) return true; + if (mediaType === 'tv') return true; // TV-Serien: kein Jahresfilter (Staffeln erscheinen über Jahre) const y = parseInt(releaseDate.slice(0,4)); return Math.abs(y - movieYear) <= 3; }; @@ -364,9 +365,10 @@ router.get('/search', authenticate, async (req, res) => { // TV-Serie Detail router.get('/tv/:id', authenticate, async (req, res) => { try { - const [detail, genreMap] = await Promise.all([ + const [detail, genreMap, extIds] = await Promise.all([ tmdb(`/tv/${req.params.id}`, { append_to_response: 'credits,content_ratings' }), getGenreMap(), + tmdb(`/tv/${req.params.id}/external_ids`).catch(()=>({})), ]); // FSK aus content_ratings (DE) let fsk = ''; @@ -387,6 +389,7 @@ router.get('/tv/:id', authenticate, async (req, res) => { genres: (detail.genres||[]).map(g=>g.name), fsk, cast: (detail.credits?.cast||[]).slice(0,8).map(c => c.name), + imdb_id: extIds.imdb_id || '', number_of_seasons: detail.number_of_seasons, number_of_episodes: detail.number_of_episodes, status: detail.status,