From 545dbdc4afe8a9210809828c660242d80da41325 Mon Sep 17 00:00:00 2001 From: huangxd- <649924757@qq.com> Date: Wed, 7 Jan 2026 00:05:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=B0=E4=BD=8F=E4=B8=8A?= =?UTF-8?q?=E6=AC=A1=E9=80=89=E6=8B=A9=E5=89=A7=E9=9B=86=E6=9C=89=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- danmu_api/apis/dandan-api.js | 17 +++++++++++++---- danmu_api/configs/globals.js | 2 +- danmu_api/utils/cache-util.js | 3 ++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/danmu_api/apis/dandan-api.js b/danmu_api/apis/dandan-api.js index 645d89c..b86b482 100644 --- a/danmu_api/apis/dandan-api.js +++ b/danmu_api/apis/dandan-api.js @@ -421,8 +421,12 @@ async function matchAniAndEp(season, episode, year, searchData, title, req, plat // 判断剧集 const normalizedTitle = normalizeSpaces(title); for (const anime of searchData.animes) { - if (globals.rememberLastSelect && preferAnimeId && anime.bangumiId.toString() !== preferAnimeId.toString() && - anime.animeId.toString() !== preferAnimeId.toString()) continue; + const animeIsPrefer = + globals.rememberLastSelect && + preferAnimeId && + String(anime.bangumiId) !== String(preferAnimeId) && + String(anime.animeId) !== String(preferAnimeId); + if (animeIsPrefer) continue; if (normalizeSpaces(anime.animeTitle).includes(normalizedTitle)) { // 年份匹配优先于季匹配 if (!matchYear(anime, year)) { @@ -445,7 +449,7 @@ async function matchAniAndEp(season, episode, year, searchData, title, req, plat log("info", "过滤后的集标题", filteredEpisodes.map(episode => episode.episodeTitle)); // 年份匹配通过后,再判断season - if (matchSeason(anime, title, season)) { + if (matchSeason(anime, title, season) || !animeIsPrefer) { // 使用新的集数匹配策略 const matchedEpisode = findEpisodeByNumber(filteredEpisodes, episode, platform); if (matchedEpisode) { @@ -459,7 +463,12 @@ async function matchAniAndEp(season, episode, year, searchData, title, req, plat } else { // 判断电影 for (const anime of searchData.animes) { - if (globals.rememberLastSelect && preferAnimeId && anime.bangumiId.toString() !== preferAnimeId.toString()) continue; + const animeIsPrefer = + globals.rememberLastSelect && + preferAnimeId && + String(anime.bangumiId) !== String(preferAnimeId) && + String(anime.animeId) !== String(preferAnimeId); + if (animeIsPrefer) continue; const animeTitle = anime.animeTitle.split("(")[0].trim(); if (animeTitle === title) { // 年份匹配优先 diff --git a/danmu_api/configs/globals.js b/danmu_api/configs/globals.js index 9340328..3987f1f 100644 --- a/danmu_api/configs/globals.js +++ b/danmu_api/configs/globals.js @@ -13,7 +13,7 @@ export const Globals = { accessedEnvVars: {}, // 静态常量 - VERSION: '1.11.0', + VERSION: '1.11.1', MAX_LOGS: 500, // 日志存储,最多保存 500 行 MAX_ANIMES: 100, diff --git a/danmu_api/utils/cache-util.js b/danmu_api/utils/cache-util.js index 024d67f..88f2303 100644 --- a/danmu_api/utils/cache-util.js +++ b/danmu_api/utils/cache-util.js @@ -233,6 +233,7 @@ export function storeAnimeIdsToMap(curAnimes, key) { // 保存旧的prefer值 const oldValue = globals.lastSelectMap.get(key); const oldPrefer = oldValue?.prefer; + const oldSource = oldValue?.source; // 如果key已存在,先删除它(为了更新顺序,保证 FIFO) if (globals.lastSelectMap.has(key)) { @@ -242,7 +243,7 @@ export function storeAnimeIdsToMap(curAnimes, key) { // 添加新记录,保留prefer字段 globals.lastSelectMap.set(key, { animeIds: [...uniqueAnimeIds], - ...(oldPrefer !== undefined && { prefer: oldPrefer }) + ...(oldPrefer !== undefined && { prefer: oldPrefer, source: oldSource }) }); // 检查是否超过 MAX_LAST_SELECT_MAP,超过则删除最早的