From efddf15eb7c08765cc6fc27d3d2687f833692a3a Mon Sep 17 00:00:00 2001 From: George Hu Date: Fri, 27 Dec 2024 23:19:22 +0800 Subject: [PATCH] fix restore last played time, add back auto-saving of played time --- .../control-bar/audio-player/index.tsx | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/app/components/control-bar/audio-player/index.tsx b/app/components/control-bar/audio-player/index.tsx index a1dc586..e250fd9 100644 --- a/app/components/control-bar/audio-player/index.tsx +++ b/app/components/control-bar/audio-player/index.tsx @@ -12,7 +12,7 @@ import CustomVideoElement from "youtube-video-element"; import { buildGuiItem } from "@/app/utils/gui"; function AudioPlayer() { - const setTime = (currentTime: number) => usePresetStore.setState({ currentTime }) + const setCurrentTime = (currentTime: number) => usePresetStore.setState({ currentTime }) const currentTime = usePresetStore(state => state.currentTime) const musicName = usePresetStore(state => state.musicName) @@ -31,7 +31,11 @@ function AudioPlayer() { }, }), { order: 2, collapsed: true }, [musicName]) - const ytPlayer = useRef() + const ytPlayer = useRef() const onPlay = (e: SyntheticEvent) => { if (autoHideGui) setGui({ hidden: true }); @@ -40,12 +44,27 @@ function AudioPlayer() { const onPause = (e: SyntheticEvent) => { setGui({ hidden: false }); - setTime(ytPlayer.current.currentTime); + setCurrentTime(ytPlayer.current.currentTime); useGlobalStore.setState({ enabledTransform: true }) } + const lastTimeRef = useRef(currentTime) + const onSeeked = (e: SyntheticEvent) => { + if(Math.abs(ytPlayer.current.currentTime - lastTimeRef.current) > 1.0) { + setCurrentTime(ytPlayer.current.currentTime); + } + lastTimeRef.current = ytPlayer.current.currentTime + } + const onLoadedMetadata = (e: SyntheticEvent) => { + ytPlayer.current.api.mute() ytPlayer.current.currentTime = currentTime + const fixPlayBt = setInterval(async () => { + if(ytPlayer.current.currentTime != currentTime && ytPlayer.current.paused) { + ytPlayer.current.api.unMute() + clearInterval(fixPlayBt) + } + }, 100) useGlobalStore.setState({ player: ytPlayer.current }) const musicName = ytPlayer.current.api.videoTitle usePresetStore.setState({ musicName }) @@ -98,6 +117,7 @@ function AudioPlayer() { src={gui.ytUrl} onPlay={onPlay} onPause={onPause} + onSeeked={onSeeked} onLoadedMetadata={onLoadedMetadata} >