fix: Neuerscheinungen-Fenster auf 21 Tage verkürzt, schließt Top10-Titel explizit aus
This commit is contained in:
@@ -549,9 +549,11 @@ router.get('/streaming/:providerId/new', authenticate, async (req, res) => {
|
|||||||
const cached = cacheGet(cacheKey);
|
const cached = cacheGet(cacheKey);
|
||||||
if (cached !== undefined) return res.json(cached);
|
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 since = (() => {
|
||||||
const d = new Date();
|
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')}`;
|
return `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;
|
||||||
})();
|
})();
|
||||||
const today = (() => {
|
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')}`;
|
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
|
// Datum) – sonst landen wenig beachtete Tagesveröffentlichungen vor
|
||||||
// tatsächlich angesagten Titeln. "Neuerscheinungen" heißt: neu UND beachtet.
|
// tatsächlich angesagten Titeln. "Neuerscheinungen" heißt: neu UND beachtet.
|
||||||
function baseParams(mediaKind) {
|
function baseParams(mediaKind) {
|
||||||
@@ -614,10 +616,17 @@ router.get('/streaming/:providerId/new', authenticate, async (req, res) => {
|
|||||||
const tvRaw = [...(tvP1.results||[]), ...(tvP2.results||[])]
|
const tvRaw = [...(tvP1.results||[]), ...(tvP2.results||[])]
|
||||||
.filter(m => !BLOCKED_LANGS.has(m.original_language));
|
.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' }));
|
.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) => ({
|
.map((m, i) => ({
|
||||||
id: m.id, media_type: 'tv', rank: i + 1,
|
id: m.id, media_type: 'tv', rank: i + 1,
|
||||||
title: m.name || m.original_name,
|
title: m.name || m.original_name,
|
||||||
|
|||||||
Reference in New Issue
Block a user