From 9b7f47d49f5b4513ad6d5d2687cc5f398635bde6 Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 5 Mar 2020 17:46:33 +1100 Subject: [PATCH] Play / pause audio --- .../session/conversation/SessionRecording.tsx | 82 ++++++++++++++----- 1 file changed, 60 insertions(+), 22 deletions(-) diff --git a/ts/components/session/conversation/SessionRecording.tsx b/ts/components/session/conversation/SessionRecording.tsx index 10adbc8ef..fac377c8f 100644 --- a/ts/components/session/conversation/SessionRecording.tsx +++ b/ts/components/session/conversation/SessionRecording.tsx @@ -47,7 +47,8 @@ export class SessionRecording extends React.Component { this.handleHoverActions = this.handleHoverActions.bind(this); this.handleUnhoverActions = this.handleUnhoverActions.bind(this); - this.playRecording = this.playRecording.bind(this); + this.playAudio = this.playAudio.bind(this); + this.pauseAudio = this.pauseAudio.bind(this); this.stopRecording = this.stopRecording.bind(this); this.onSendVoiceMessage = this.onSendVoiceMessage.bind(this); @@ -92,16 +93,40 @@ export class SessionRecording extends React.Component { clearInterval(this.state.updateTimerInterval); } + public componentDidUpdate() { + const { audioElement, isPlaying } = this.state; + + if (audioElement){ + if (isPlaying) { + audioElement.play(); + } else { + audioElement.pause(); + } + } + } + render() { - const actionPause = (this.state.actionHover && this.state.isRecording); - const actionPlay = (!this.state.isRecording || this.state.isPaused); - const actionDefault = !actionPause && !actionPlay; - const { isRecording, startTimestamp, nowTimestamp } = this.state; + const { + actionHover, + isPlaying, + isPaused, + isRecording, + startTimestamp, + nowTimestamp, + } = this.state; + + const actionStopRecording = actionHover && isRecording; + const actionPlayAudio = !isRecording && !isPlaying; + const actionPauseAudio = !isRecording && !isPaused && isPlaying; + const actionDefault = !actionStopRecording && !actionPlayAudio && !actionPauseAudio; const elapsedTimeMs = 1000 * (nowTimestamp - startTimestamp); const displayTimeString = moment.utc(elapsedTimeMs).format('m:ss'); + const actionPauseFn = isPlaying ? this.pauseAudio : this.stopStream; + + return (
{ onMouseEnter={this.handleHoverActions} onMouseLeave={this.handleUnhoverActions} > - {actionPause && ( + {actionStopRecording && ( + )} + {actionPauseAudio && ( + )} - {actionPlay && ( + {actionPlayAudio && ( )} @@ -161,8 +195,6 @@ export class SessionRecording extends React.Component {
)} - -
{ isRecording ? ( { }); } - private playRecording() { + private playAudio() { const { mediaBlob, streamParams } = this.state; if (!mediaBlob){ @@ -232,22 +264,28 @@ export class SessionRecording extends React.Component { return; } - this.setState({ - isRecording: false, - isPaused: false, - isPlaying: true, - }); - // Start playing recording const audioURL = window.URL.createObjectURL(mediaBlob.data); const audioElement = new Audio(audioURL); - this.setState({audioElement}); - audioElement.play(); - - console.log(`[vince][stream] Audio: `, audioURL); + console.log(`[vince][stream] Audio Element: `, audioElement); console.log(`[vince][stream] AudioURL: `, audioURL); + this.setState({ + audioElement, + isRecording: false, + isPaused: false, + isPlaying: true, + }); + + } + + private pauseAudio() { + this.state.audioElement?.pause(); + this.setState({ + isPlaying: false, + isPaused: true, + }); } private initSendVoiceRecording(){