From c8ead3634138ec9b254777c2108b333008bc2797 Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Sun, 6 Feb 2022 13:43:52 -0800 Subject: [PATCH] cleaning player and controls --- .../web/components/Audio/AudioHandler.tsx | 44 ++++++++++++++++--- .../Conversations/TimelineAudioClip.tsx | 2 +- .../KeyboardShortcutHandler.tsx | 4 +- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/packages/web/components/Audio/AudioHandler.tsx b/packages/web/components/Audio/AudioHandler.tsx index de0f1f5..611c4db 100644 --- a/packages/web/components/Audio/AudioHandler.tsx +++ b/packages/web/components/Audio/AudioHandler.tsx @@ -10,12 +10,14 @@ import { selectedConvoAtom, } from "../../recoil/main"; import MicRecorder from "mic-recorder-to-mp3"; +import AudioPlayer from "react-h5-audio-player"; import toast from "react-hot-toast"; import { v4 as uuidv4 } from "uuid"; import { conversationService } from "@nirvana/common/services"; import { useAuth } from "../../contexts/authContext"; import { useRouter } from "next/router"; import { AudioClip } from "@nirvana/common/models/conversation"; +import "react-h5-audio-player/lib/styles.css"; // New instance const recorder = new MicRecorder({ @@ -52,10 +54,25 @@ export default function AudioHandler() { } useEffect(() => { - if (audioQueue.length > 0) { - const audio = new Audio(audioQueue[0].audioDataUrl); - audio.onended = onEndedPlaying; - audio.play(); + if (audioQueue.length > 0 && audioQueue[0].audioDataUrl) { + console.log("Adding clip to Queue"); + + // edge case, if it's the same link again, then still play it somehow + if (playerSrc == audioQueue[0].audioDataUrl) { + // play empty one and then add the next audio file + setPlayerSrc(""); + + setTimeout(() => { + setPlayerSrc(audioQueue[0].audioDataUrl || null); + }, 1000); + } else { + setPlayerSrc(audioQueue[0].audioDataUrl); + } + } + + if (!audioQueue || audioQueue.length == 0) { + console.log("clearing player"); + setPlayerSrc(null); } }, [audioQueue]); @@ -112,6 +129,8 @@ export default function AudioHandler() { const [recordingToastId, setRecordingToastId] = useState(""); const [isRecording, setIsRecording] = useRecoilState(isRecordingAtom); + const [playerSrc, setPlayerSrc] = useState(null); + const startRecording = () => { // check if there is a person selected if (!selectedConvoId) { @@ -143,7 +162,7 @@ export default function AudioHandler() { toast.error("there was a problem in starting your recording") ); - const toastId = toast.loading("speaking to Patels"); + const toastId = toast.loading("recording"); setRecordingToastId(toastId); }; @@ -257,6 +276,19 @@ export default function AudioHandler() { }; return ( - + <> + {playerSrc && ( + console.log("onPlay")} + showSkipControls={true} + onEnded={onEndedPlaying} + className="w-screen flex flex-row" + /> + )} + + + ); } diff --git a/packages/web/components/Conversations/TimelineAudioClip.tsx b/packages/web/components/Conversations/TimelineAudioClip.tsx index 18fbcf4..c982ee1 100644 --- a/packages/web/components/Conversations/TimelineAudioClip.tsx +++ b/packages/web/components/Conversations/TimelineAudioClip.tsx @@ -42,7 +42,7 @@ export default function TimelineAudioClip(props: { const playAudioClip = () => { // current audioclip included in the array of audioclipstoplay setAudioQueue((prevQueue) => { - return [...prevQueue, ...props.audioClipsToPlay]; + return props.audioClipsToPlay; }); }; diff --git a/packages/web/components/MainTabsOrPages/KeyboardShortcutHandler.tsx b/packages/web/components/MainTabsOrPages/KeyboardShortcutHandler.tsx index 940a1af..693f433 100644 --- a/packages/web/components/MainTabsOrPages/KeyboardShortcutHandler.tsx +++ b/packages/web/components/MainTabsOrPages/KeyboardShortcutHandler.tsx @@ -1,7 +1,7 @@ import { QueryRoutes } from "@nirvana/common/helpers/routes"; import { useRouter } from "next/router"; import { GlobalHotKeys, KeyMap, configure } from "react-hotkeys"; -import { selectedConvoAtom } from "../../recoil/main"; +import { selectedConvoAtom, audioQueueAtom } from "../../recoil/main"; import { useSetRecoilState } from "recoil"; export default function KeyboardShortcutHandler() { @@ -12,12 +12,14 @@ export default function KeyboardShortcutHandler() { }); const setSelectedPriorityConvo = useSetRecoilState(selectedConvoAtom); + const setAudioQueue = useSetRecoilState(audioQueueAtom); const handleEscape = () => { console.log("woah"); router.push({ query: { page: QueryRoutes.convos } }); setSelectedPriorityConvo(null); + setAudioQueue([]); }; const keyMap: KeyMap = {