From 5805c6f8f2837ddeb1495887c25ae464d08201c0 Mon Sep 17 00:00:00 2001 From: mtvpls Date: Wed, 10 Dec 2025 20:43:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=A0=E5=BC=B9=E5=B9=95?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E5=AF=BC=E8=87=B4=E5=BC=B9=E5=B9=95=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=8A=9F=E8=83=BD=E5=A4=B1=E6=95=88=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG | 5 +++++ VERSION.txt | 2 +- src/app/play/page.tsx | 49 ++++++++++++++++++++++++++++++++++++++++--- src/lib/changelog.ts | 12 +++++++++++ src/lib/version.ts | 2 +- 5 files changed, 65 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 24e931f..5d70a02 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +## [201.0.1] - 2025-12-10 + +### Fixed +- 修复因弹幕缓存导致弹幕过滤功能失效的bug + ## [201.0.0] - 2025-12-10 ### Added diff --git a/VERSION.txt b/VERSION.txt index 80f52a3..d4b0c34 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -201.0.0 \ No newline at end of file +201.0.1 \ No newline at end of file diff --git a/src/app/play/page.tsx b/src/app/play/page.tsx index b8e20e5..2f2260a 100644 --- a/src/app/play/page.tsx +++ b/src/app/play/page.tsx @@ -1857,7 +1857,40 @@ function PlayPageClient() { } // 转换弹幕格式 - const danmakuData = convertDanmakuFormat(comments); + let danmakuData = convertDanmakuFormat(comments); + + // 手动应用过滤规则(因为缓存的弹幕不会经过播放器的 filter 函数) + const filterConfig = danmakuFilterConfigRef.current; + if (filterConfig && filterConfig.rules.length > 0) { + const originalCount = danmakuData.length; + danmakuData = danmakuData.filter((danmu) => { + for (const rule of filterConfig.rules) { + // 跳过未启用的规则 + if (!rule.enabled) continue; + + try { + if (rule.type === 'normal') { + // 普通模式:字符串包含匹配 + if (danmu.text.includes(rule.keyword)) { + return false; + } + } else if (rule.type === 'regex') { + // 正则模式:正则表达式匹配 + if (new RegExp(rule.keyword).test(danmu.text)) { + return false; + } + } + } catch (e) { + console.error('弹幕过滤规则错误:', e); + } + } + return true; + }); + const filteredCount = originalCount - danmakuData.length; + if (filteredCount > 0) { + console.log(`弹幕过滤: 原始 ${originalCount} 条,过滤 ${filteredCount} 条,剩余 ${danmakuData.length} 条`); + } + } // 加载弹幕到插件 danmakuPluginRef.current.config({ @@ -1865,8 +1898,8 @@ function PlayPageClient() { }); danmakuPluginRef.current.load(); - setDanmakuCount(comments.length); - console.log(`弹幕加载成功,共 ${comments.length} 条`); + setDanmakuCount(danmakuData.length); + console.log(`弹幕加载成功,共 ${danmakuData.length} 条`); // 延迟一下让用户看到弹幕数量 await new Promise((resolve) => setTimeout(resolve, 1500)); @@ -4075,6 +4108,16 @@ function PlayPageClient() { onConfigUpdate={(config) => { setDanmakuFilterConfig(config); danmakuFilterConfigRef.current = config; + + // 重新加载弹幕以应用新的过滤规则 + if (danmakuPluginRef.current) { + try { + danmakuPluginRef.current.load(); + console.log('弹幕过滤规则已更新,重新加载弹幕'); + } catch (error) { + console.error('重新加载弹幕失败:', error); + } + } }} onShowToast={(message, type) => { setToast({ diff --git a/src/lib/changelog.ts b/src/lib/changelog.ts index 65e9605..7e4adff 100644 --- a/src/lib/changelog.ts +++ b/src/lib/changelog.ts @@ -10,6 +10,18 @@ export interface ChangelogEntry { } export const changelog: ChangelogEntry[] = [ + { + version: '201.0.1', + date: '2025-12-10', + added: [ + ], + changed: [ + + ], + fixed: [ + '修复因弹幕缓存导致弹幕过滤功能失效的bug' + ] + }, { version: '201.0.0', date: '2025-12-10', diff --git a/src/lib/version.ts b/src/lib/version.ts index 799fb35..39e0af4 100644 --- a/src/lib/version.ts +++ b/src/lib/version.ts @@ -1,6 +1,6 @@ /* eslint-disable no-console */ -const CURRENT_VERSION = '201.0.0'; +const CURRENT_VERSION = '201.0.1'; // 导出当前版本号供其他地方使用 export { CURRENT_VERSION };