From 8b75a266ea38a226cd428896a26befb16d0a32fb Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 3 Jun 2025 17:22:20 -0400 Subject: [PATCH] Break loop in acquiring media on Safari --- src/room/LobbyView.tsx | 8 +++++--- src/room/MuteStates.ts | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index 72079783..f5b47cdd 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -53,6 +53,7 @@ import { useTrackProcessorSync, } from "../livekit/TrackProcessorContext"; import { usePageTitle } from "../usePageTitle"; +import { useLatest } from "../useLatest"; interface Props { client: MatrixClient; @@ -159,13 +160,14 @@ export const LobbyView: FC = ({ ], ); + const latestMuteStates = useLatest(muteStates); const onError = useCallback( (error: Error) => { logger.error("Error while creating preview Tracks:", error); - muteStates.audio.setEnabled?.(false); - muteStates.video.setEnabled?.(false); + latestMuteStates.current.audio.setEnabled?.(false); + latestMuteStates.current.video.setEnabled?.(false); }, - [muteStates.audio, muteStates.video], + [latestMuteStates], ); const tracks = usePreviewTracks(localTrackOptions, onError); diff --git a/src/room/MuteStates.ts b/src/room/MuteStates.ts index 6e24fb07..5e0f6f6d 100644 --- a/src/room/MuteStates.ts +++ b/src/room/MuteStates.ts @@ -60,7 +60,7 @@ function useMuteState( // Determine the default value once devices are actually connected (prev) => prev ?? (device.available.size > 0 ? enabledByDefault() : undefined), - [device], + [device.available.size], ); return useMemo( () => @@ -70,7 +70,7 @@ function useMuteState( enabled: enabled ?? false, setEnabled: setEnabled as Dispatch>, }, - [device, enabled, setEnabled], + [device.available.size, enabled, setEnabled], ); }