From 26dad81e06f5318306c85d27f8b774a2bcf0f3d2 Mon Sep 17 00:00:00 2001 From: Robert Long <robert@robertlong.me> Date: Wed, 17 Nov 2021 15:22:27 -0800 Subject: [PATCH] Add support for the via query param --- src/ConferenceCallManagerHooks.js | 9 +++++++-- src/Room.jsx | 17 ++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/ConferenceCallManagerHooks.js b/src/ConferenceCallManagerHooks.js index 383bfb2..7c914c8 100644 --- a/src/ConferenceCallManagerHooks.js +++ b/src/ConferenceCallManagerHooks.js @@ -47,8 +47,13 @@ async function initClient(clientOptions, guest) { return client; } -export async function fetchGroupCall(client, roomIdOrAlias, timeout = 5000) { - const { roomId } = await client.joinRoom(roomIdOrAlias); +export async function fetchGroupCall( + client, + roomIdOrAlias, + viaServers = undefined, + timeout = 5000 +) { + const { roomId } = await client.joinRoom(roomIdOrAlias, { viaServers }); return new Promise((resolve, reject) => { let timeoutId; diff --git a/src/Room.jsx b/src/Room.jsx index 861d35b..a3adf55 100644 --- a/src/Room.jsx +++ b/src/Room.jsx @@ -48,7 +48,7 @@ const canScreenshare = "getDisplayMedia" in navigator.mediaDevices; // For now we can disable screensharing in Safari. const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); -function useLoadGroupCall(client, roomId) { +function useLoadGroupCall(client, roomId, viaServers) { const [state, setState] = useState({ loading: true, error: undefined, @@ -57,7 +57,7 @@ function useLoadGroupCall(client, roomId) { useEffect(() => { setState({ loading: true }); - fetchGroupCall(client, roomId, 30000) + fetchGroupCall(client, roomId, viaServers, 30000) .then((groupCall) => setState({ loading: false, groupCall })) .catch((error) => setState({ loading: false, error })); }, [roomId]); @@ -68,11 +68,15 @@ function useLoadGroupCall(client, roomId) { export function Room({ client }) { const { roomId: maybeRoomId } = useParams(); const { hash, search } = useLocation(); + const [simpleGrid, viaServers] = useMemo(() => { + const params = new URLSearchParams(search); + return [params.has("simple"), params.getAll("via")]; + }, [search]); const roomId = maybeRoomId || hash; - const { loading, error, groupCall } = useLoadGroupCall(client, roomId); - const simpleGrid = useMemo( - () => new URLSearchParams(search).has("simple"), - [search] + const { loading, error, groupCall } = useLoadGroupCall( + client, + roomId, + viaServers ); useEffect(() => { @@ -138,7 +142,6 @@ export function GroupCallView({ client, groupCall, simpleGrid }) { Sentry.captureException(error); } - if (groupCall) { groupCall.on("hangup", onHangup); groupCall.on("error", onError);