diff --git a/web/src/components/DanmakuStage.tsx b/web/src/components/DanmakuStage.tsx
index 71d6048..23ec15a 100644
--- a/web/src/components/DanmakuStage.tsx
+++ b/web/src/components/DanmakuStage.tsx
@@ -28,6 +28,8 @@ type DanmakuStageProps = {
search?: string | null
/** Explicit danmaku library chosen by the user; null = auto-resolve. */
episodeId?: number | string | null
+ /** Counter or token changed to trigger refetch even when search stays identical. */
+ searchTrigger?: number
/** Called after each fetch attempt (success or error) finishes with metadata. */
onLoaded?: (info: DanmakuLoadedInfo | null) => void
/** Called when multiple anime matched and the user must pick one. */
@@ -50,6 +52,7 @@ export function DanmakuStage({
area = 1,
search = null,
episodeId = null,
+ searchTrigger = 0,
onLoaded,
onCandidates,
}: DanmakuStageProps) {
@@ -252,8 +255,8 @@ export function DanmakuStage({
manager.unmount()
managerRef.current = null
}
- // search / episodeId 变化时重新拉取弹幕(含媒体/开关切换)。
- }, [media, videoRef, enabled, search, episodeId, onLoaded, onCandidates])
+ // search / episodeId / searchTrigger 变化时重新拉取弹幕(含媒体/开关切换)。
+ }, [media, videoRef, enabled, search, episodeId, searchTrigger, onLoaded, onCandidates])
// Live renderer knobs: opacity / area / font size without recreating the
// engine. font size additionally rescales currently visible comments.
diff --git a/web/src/components/PlayerDanmakuPanel.tsx b/web/src/components/PlayerDanmakuPanel.tsx
index c4a00e0..0d6eec0 100644
--- a/web/src/components/PlayerDanmakuPanel.tsx
+++ b/web/src/components/PlayerDanmakuPanel.tsx
@@ -25,6 +25,8 @@ type PlayerDanmakuPanelProps = {
candidates: DanmakuAnime[]
/** Human-readable label of the currently selected library. */
selectedSource?: string
+ /** Title used by auto-matching (e.g. anime title, media title or filename). */
+ autoMatchTitle?: string
/** Loaded danmaku metadata (title, episode, count, match mode). */
danmakuInfo?: DanmakuLoadedInfo | null
onSelectEpisode: (episodeId: number, animeTitle: string, episodeTitle: string) => void
@@ -47,6 +49,7 @@ export function PlayerDanmakuPanel({
onFontSizeChange,
candidates,
selectedSource,
+ autoMatchTitle,
danmakuInfo,
onSelectEpisode,
onResetAuto,
@@ -203,7 +206,19 @@ export function PlayerDanmakuPanel({
{/* 搜索弹幕 */}
-
搜索弹幕(留空 = 按视频名自动匹配)
+
+ 搜索弹幕(留空 = 按视频名自动匹配)
+ {autoMatchTitle && (
+
+ )}
+
{
if (e.key === 'Enter') onSearch(draft.trim())
}}
- placeholder="输入番剧或电影名…"
- className="min-w-0 flex-1 rounded-lg border border-white/15 bg-white/5 px-2.5 py-1.5 text-xs outline-none placeholder:text-white/35 focus:border-rose-400/60"
+ placeholder={autoMatchTitle ? `自动匹配:${autoMatchTitle}` : '输入番剧或电影名…'}
+ className="min-w-0 flex-1 rounded-lg border border-white/15 bg-white/5 px-2.5 py-1.5 text-xs outline-none placeholder:text-white/40 focus:border-rose-400/60"
/>