From 1c0f425c9ac13dc5204bd0736cb8039c8b9ff76a Mon Sep 17 00:00:00 2001 From: Haoyu Xu Date: Fri, 3 Mar 2023 16:57:59 -0500 Subject: [PATCH] feat(directory): handle voice on and off correctly --- directory/Version | 2 +- directory/src/libs/voice.jsx | 4 ++++ directory/src/routes/path/home.jsx | 11 +++++++++-- directory/src/routes/path/operator.jsx | 4 ++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/directory/Version b/directory/Version index aa0ea79..5767123 100644 --- a/directory/Version +++ b/directory/Version @@ -1 +1 @@ -0.5.29 \ No newline at end of file +0.5.30 \ No newline at end of file diff --git a/directory/src/libs/voice.jsx b/directory/src/libs/voice.jsx index dbe0152..e6cbf42 100644 --- a/directory/src/libs/voice.jsx +++ b/directory/src/libs/voice.jsx @@ -51,11 +51,15 @@ export default function useAudio() { }, []) const getSrc = useCallback(() => audioEl.src, []) + const resetSrc = useCallback(() => { + audioEl.src = '' + }, []) return { play, stop, getSrc, + resetSrc, isPlaying, isPlayingRef, } diff --git a/directory/src/routes/path/home.jsx b/directory/src/routes/path/home.jsx index 42f2a67..9d210be 100644 --- a/directory/src/routes/path/home.jsx +++ b/directory/src/routes/path/home.jsx @@ -88,13 +88,20 @@ export default function Home() { function OperatorElement({ item, hidden }) { const { textDefaultLang, language, alternateLang } = useLanguage() - const { play } = useAudio() + const { play, stop, resetSrc } = useAudio() const [voiceOn] = useAtom(voiceOnAtom) const playVoice = useCallback(() => { if (!voiceOn) return play(`/${item.link}/assets/${JSON.parse(import.meta.env.VITE_VOICE_FOLDERS).main}/${import.meta.env.VITE_APP_VOICE_URL}`) - }, [play, item.link, voiceOn]) + }, [voiceOn, play, item.link]) + + useEffect(() => { + if (!voiceOn) { + stop() + resetSrc() + } + }, [voiceOn, stop, resetSrc]) return useMemo(() => { return ( diff --git a/directory/src/routes/path/operator.jsx b/directory/src/routes/path/operator.jsx index 4edb68b..a33f879 100644 --- a/directory/src/routes/path/operator.jsx +++ b/directory/src/routes/path/operator.jsx @@ -91,6 +91,10 @@ export default function Operator() { stop() }, [setExtraArea, stop]) + useEffect(() => { + if (!voiceLang) stop() + }, [stop, voiceLang]) + useEffect(() => { if (backgrounds) setCurrentBackground(backgrounds[0]) }, [backgrounds])