From 2186f8de02a7a94801d9b06c6951e023e1432d54 Mon Sep 17 00:00:00 2001 From: mtvpls Date: Wed, 20 May 2026 16:45:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96episode=5Fprogress=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E6=97=B6=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/EpisodeSelector.tsx | 65 +++++++++++------------------- 1 file changed, 23 insertions(+), 42 deletions(-) diff --git a/src/components/EpisodeSelector.tsx b/src/components/EpisodeSelector.tsx index a2d7a56..2c8edb1 100644 --- a/src/components/EpisodeSelector.tsx +++ b/src/components/EpisodeSelector.tsx @@ -202,56 +202,37 @@ const EpisodeSelector: React.FC = ({ return; } - const readWatchedEpisodes = () => { - const watched = new Set(); + const watched = new Set(); - try { - const records = getCachedPlayRecordsSnapshot(); - const record = records[generateStorageKey(currentSource, currentId)]; - if (record && record.index > 0 && record.play_time > 1) { - watched.add(record.index); - } - } catch (error) { - console.warn('[EpisodeSelector] Failed to read cached play records:', error); + try { + const records = getCachedPlayRecordsSnapshot(); + const record = records[generateStorageKey(currentSource, currentId)]; + if (record && record.index > 0 && record.play_time > 1) { + watched.add(record.index); } + } catch (error) { + console.warn('[EpisodeSelector] Failed to read cached play records:', error); + } - try { - const episodeRecords = loadAllLocalEpisodeProgressRecords( - episodeProgressContentKey - ); + try { + const episodeRecords = loadAllLocalEpisodeProgressRecords( + episodeProgressContentKey + ); - for (const [episodeIndex, record] of Object.entries(episodeRecords)) { - if (Number(record?.playTime) > 1) { - const episodeNumber = Number(episodeIndex) + 1; - if (episodeNumber >= 1 && episodeNumber <= totalEpisodes) { - watched.add(episodeNumber); - } + for (const [episodeIndex, record] of Object.entries(episodeRecords)) { + if (Number(record?.playTime) > 1) { + const episodeNumber = Number(episodeIndex) + 1; + if (episodeNumber >= 1 && episodeNumber <= totalEpisodes) { + watched.add(episodeNumber); } } - } catch (error) { - console.warn('[EpisodeSelector] Failed to read local episode progress:', error); } + } catch (error) { + console.warn('[EpisodeSelector] Failed to read local episode progress:', error); + } - setWatchedEpisodes(watched); - }; - - readWatchedEpisodes(); - - const handlePlayRecordsUpdated = () => { - readWatchedEpisodes(); - }; - - window.addEventListener('playRecordsUpdated', handlePlayRecordsUpdated as EventListener); - window.addEventListener('storage', handlePlayRecordsUpdated); - - return () => { - window.removeEventListener( - 'playRecordsUpdated', - handlePlayRecordsUpdated as EventListener - ); - window.removeEventListener('storage', handlePlayRecordsUpdated); - }; - }, [currentSource, currentId, episodeProgressContentKey, totalEpisodes]); + setWatchedEpisodes(watched); + }, [currentSource, currentId, episodeProgressContentKey, totalEpisodes, value]); // 主要的 tab 状态:'danmaku' | 'episodes' | 'sources' // 默认显示选集选项卡,但如果是房员则显示弹幕