fix: Neuerscheinungen-Fenster auf 21 Tage verkürzt, schließt Top10-Titel explizit aus

This commit is contained in:
2026-06-20 00:05:58 +02:00
parent ed45b2a957
commit 9098661d0f

View File

@@ -549,9 +549,11 @@ router.get('/streaming/:providerId/new', authenticate, async (req, res) => {
const cached = cacheGet(cacheKey);
if (cached !== undefined) return res.json(cached);
// Enges 21-Tage-Fenster, damit "Neuerscheinungen" sich spürbar von "Top 10"
// (letzte 2 Jahre) unterscheidet, statt fast identisch zu sein
const since = (() => {
const d = new Date();
d.setDate(d.getDate() - 60);
d.setDate(d.getDate() - 21);
return `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;
})();
const today = (() => {
@@ -559,7 +561,7 @@ router.get('/streaming/:providerId/new', authenticate, async (req, res) => {
return `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;
})();
// Innerhalb des 60-Tage-Fensters nach POPULARITÄT sortieren (nicht nach
// Innerhalb des 21-Tage-Fensters nach POPULARITÄT sortieren (nicht nach
// Datum) sonst landen wenig beachtete Tagesveröffentlichungen vor
// tatsächlich angesagten Titeln. "Neuerscheinungen" heißt: neu UND beachtet.
function baseParams(mediaKind) {
@@ -614,10 +616,17 @@ router.get('/streaming/:providerId/new', authenticate, async (req, res) => {
const tvRaw = [...(tvP1.results||[]), ...(tvP2.results||[])]
.filter(m => !BLOCKED_LANGS.has(m.original_language));
const movies = applyLanguageWeighting(movieRaw)
// Titel die bereits in der (gecachten) Top-10-Liste dieses Anbieters stehen
// aus den Neuerscheinungen ausschließen, damit beide Reiter sich nicht
// überschneiden, selbst wenn sich die Zeitfenster teilweise überlappen
const top10Cached = cacheGet(`streaming-top10:${provider.id}`);
const top10MovieIds = new Set((top10Cached?.movies || []).map(m => m.id));
const top10TvIds = new Set((top10Cached?.tvShows || []).map(m => m.id));
const movies = applyLanguageWeighting(movieRaw.filter(m => !top10MovieIds.has(m.id)))
.map((m, i) => ({ ...enrichMovie(m, genreMap, null, i + 1), media_type: 'movie' }));
const tvShows = applyLanguageWeighting(tvRaw)
const tvShows = applyLanguageWeighting(tvRaw.filter(m => !top10TvIds.has(m.id)))
.map((m, i) => ({
id: m.id, media_type: 'tv', rank: i + 1,
title: m.name || m.original_name,