From b1aeaffc59b42b22690555269638183b4d4ffc28 Mon Sep 17 00:00:00 2001 From: James Ketrenos Date: Wed, 16 Mar 2022 02:10:26 -0700 Subject: [PATCH] Track state at global peers for mute/videoOn Signed-off-by: James Ketrenos --- client/src/MediaControl.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/client/src/MediaControl.js b/client/src/MediaControl.js index 8dfaa5f..cfbf0d1 100644 --- a/client/src/MediaControl.js +++ b/client/src/MediaControl.js @@ -95,6 +95,8 @@ const MediaAgent = ({setPeers}) => { peers[peer_id] = { name: peer_id, + muted: false, + videoOn: true, connection, initialized: false, attributes: {} @@ -312,6 +314,8 @@ const MediaAgent = ({setPeers}) => { peers[name] = { name: name, local: true, + muted: true, + videoOn: false, initialized: false, attributes: { local: true, @@ -407,30 +411,30 @@ const MediaControl = ({isSelf, peer}) => { const [muted, setMuted] = useState(undefined); const [videoOn, setVideoOn] = useState(undefined); + /* local state is used to trigger re-renders, and the global + * state is kept up to date in the peers object so re-assignment + * of sessions doesn't kill the peer or change the mute/video states */ useEffect(() => { if (!peer) { setMedia(undefined); return; } - if (peer.local) { - setMuted(true); - setVideoOn(false); - } else { - setMuted(false); - setVideoOn(true); - } + setMuted(peer.muted); + setVideoOn(peer.videoOn); setMedia(peer); }, [peer, setMedia, setMuted, setVideoOn]); const toggleMute = (event) => { if (debug) console.log(`MediaControl - toggleMute - ${peer.name}`, !muted); - setMuted(!muted); + peer.muted = !muted; + setMuted(peer.muted); event.stopPropagation(); } const toggleVideo = (event) => { if (debug) console.log(`MediaControl - toggleVideo - ${peer.name}`, !videoOn); - setVideoOn(!videoOn); + peer.videoOn = !videoOn; + setVideoOn(peer.videoOn); event.stopPropagation(); }