From 243e9c486a7152f63abbbcab4bdd0b62092296fb Mon Sep 17 00:00:00 2001 From: Dicken Date: Thu, 11 Jun 2026 15:59:20 +0200 Subject: [PATCH] fix: Jahresfilter deaktiviert im Suchen-Tab (noYearFilter=year=0) --- backend/src/tools/media/routes.js | 10 +++++----- frontend/src/tools/media.jsx | 7 ++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/backend/src/tools/media/routes.js b/backend/src/tools/media/routes.js index 280428b..73f17a5 100644 --- a/backend/src/tools/media/routes.js +++ b/backend/src/tools/media/routes.js @@ -232,11 +232,11 @@ async function getXrelData(tmdbId, imdbId, title, originalTitle, movieYear) { const results = []; - // Jahresfilter: Release muss innerhalb von 2 Jahren vor/nach Filmjahr liegen - // Rembrandt 2003 → Release 2014 = 11 Jahre entfernt → geblockt - // MOTU 2026 → Release 2025 = 1 Jahr vorher → ok + // Jahresfilter: nur für Filme ab 2015 anwenden + // 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 const y = parseInt(releaseDate.slice(0,4)); return Math.abs(y - movieYear) <= 3; }; @@ -408,9 +408,9 @@ router.get('/movie/:id/xrel', authenticate, async (req, res) => { origTitle = detail.original_title || null; } - // Filmjahr aus Query-Param (vom Frontend mitgeschickt aus detail.release_date) + // Filmjahr aus Query-Param; year=0 oder fehlt → kein Jahresfilter let filmYear = null; - if (req.query.year) filmYear = parseInt(req.query.year); + if (req.query.year && req.query.year !== '0') filmYear = parseInt(req.query.year); const data = await getXrelData(req.params.id, imdbId, title, origTitle, filmYear); const releases = Array.isArray(data) ? data : (data.releases || []); const xrel_dates = Array.isArray(data) ? [] : (data.xrel_dates || []); diff --git a/frontend/src/tools/media.jsx b/frontend/src/tools/media.jsx index 43e05c7..e17648b 100644 --- a/frontend/src/tools/media.jsx +++ b/frontend/src/tools/media.jsx @@ -138,6 +138,7 @@ export default function Media({ toast, mobile }) { onClose={() => setModal(null)} mobile={mobile} onHasXrel={id => setXrelIds(prev => new Set([...prev, id]))} + noYearFilter={activeTool === 'suchen'} />, document.body )} @@ -552,7 +553,7 @@ function FavoritenKalender({ onOpenModal }) { } // ── Film-Detail-Modal (via Portal) ──────────────────────────────────────────── -function MovieModal({ tmdbId, onClose, mobile, onHasXrel }) { +function MovieModal({ tmdbId, onClose, mobile, onHasXrel, noYearFilter }) { const [detail, setDetail] = useState(null); const [xrel, setXrel] = useState(null); // null=nicht gesucht, []=gesucht const [xrelDates, setXrelDates] = useState([]); @@ -576,7 +577,7 @@ function MovieModal({ tmdbId, onClose, mobile, onHasXrel }) { title: d.title || '', orig: d.original_title || '', imdb_id: d.imdb_id || '', - year: d.release_date ? d.release_date.slice(0,4) : '', + year: noYearFilter ? '0' : (d.release_date ? d.release_date.slice(0,4) : ''), }); api(`/tools/media/movie/${tmdbId}/xrel?${params}`) .then(r => { @@ -600,7 +601,7 @@ function MovieModal({ tmdbId, onClose, mobile, onHasXrel }) { title: d.title || '', orig: d.original_title || '', imdb_id: d.imdb_id || '', - year: d.release_date ? d.release_date.slice(0,4) : '', + year: noYearFilter ? '0' : (d.release_date ? d.release_date.slice(0,4) : ''), }); if (forceRefresh) params.set('refresh', '1'); const r = await api(`/tools/media/movie/${tmdbId}/xrel?${params}`);