优化episode_progress渲染时机

This commit is contained in:
mtvpls
2026-05-20 16:45:42 +08:00
parent 2cddd0a8c0
commit 2186f8de02
+23 -42
View File
@@ -202,56 +202,37 @@ const EpisodeSelector: React.FC<EpisodeSelectorProps> = ({
return; return;
} }
const readWatchedEpisodes = () => { const watched = new Set<number>();
const watched = new Set<number>();
try { try {
const records = getCachedPlayRecordsSnapshot(); const records = getCachedPlayRecordsSnapshot();
const record = records[generateStorageKey(currentSource, currentId)]; const record = records[generateStorageKey(currentSource, currentId)];
if (record && record.index > 0 && record.play_time > 1) { if (record && record.index > 0 && record.play_time > 1) {
watched.add(record.index); watched.add(record.index);
}
} catch (error) {
console.warn('[EpisodeSelector] Failed to read cached play records:', error);
} }
} catch (error) {
console.warn('[EpisodeSelector] Failed to read cached play records:', error);
}
try { try {
const episodeRecords = loadAllLocalEpisodeProgressRecords( const episodeRecords = loadAllLocalEpisodeProgressRecords(
episodeProgressContentKey episodeProgressContentKey
); );
for (const [episodeIndex, record] of Object.entries(episodeRecords)) { for (const [episodeIndex, record] of Object.entries(episodeRecords)) {
if (Number(record?.playTime) > 1) { if (Number(record?.playTime) > 1) {
const episodeNumber = Number(episodeIndex) + 1; const episodeNumber = Number(episodeIndex) + 1;
if (episodeNumber >= 1 && episodeNumber <= totalEpisodes) { if (episodeNumber >= 1 && episodeNumber <= totalEpisodes) {
watched.add(episodeNumber); 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); setWatchedEpisodes(watched);
}; }, [currentSource, currentId, episodeProgressContentKey, totalEpisodes, value]);
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]);
// 主要的 tab 状态:'danmaku' | 'episodes' | 'sources' // 主要的 tab 状态:'danmaku' | 'episodes' | 'sources'
// 默认显示选集选项卡,但如果是房员则显示弹幕 // 默认显示选集选项卡,但如果是房员则显示弹幕