From b3325faeeb2a477a82a1cee0b3af06c6bcc94737 Mon Sep 17 00:00:00 2001 From: Robert Long <robert@robertlong.me> Date: Wed, 29 Sep 2021 16:23:18 -0700 Subject: [PATCH] Get new group calls working --- src/ConferenceCallManagerHooks.js | 22 +++++++++++----------- src/Home.jsx | 10 ++++++++++ src/Room.jsx | 27 +++------------------------ 3 files changed, 24 insertions(+), 35 deletions(-) diff --git a/src/ConferenceCallManagerHooks.js b/src/ConferenceCallManagerHooks.js index e9933d2..103ed47 100644 --- a/src/ConferenceCallManagerHooks.js +++ b/src/ConferenceCallManagerHooks.js @@ -47,32 +47,32 @@ async function initClient(clientOptions, guest) { return client; } -export async function fetchRoom(client, roomIdOrAlias, timeout = 5000) { +export async function fetchGroupCall(client, roomIdOrAlias, timeout = 5000) { const { roomId } = await client.joinRoom(roomIdOrAlias); return new Promise((resolve, reject) => { let timeoutId; - function onRoom(room) { - if (room && room.roomId === roomId) { + function onGroupCallIncoming(groupCall) { + if (groupCall && groupCall.room.roomId === roomId) { clearTimeout(timeoutId); - client.removeListener("Room", onRoom); - resolve(room); + client.removeListener("GroupCall.incoming", onGroupCallIncoming); + resolve(groupCall); } } - const room = client.getRoom(roomId); + const groupCall = client.getGroupCallForRoom(roomId); - if (room) { - resolve(room); + if (groupCall) { + resolve(groupCall); } - client.on("Room", onRoom); + client.on("GroupCall.incoming", onGroupCallIncoming); if (timeout) { timeoutId = setTimeout(() => { - client.removeListener("Room", onRoom); - reject(new Error("Fetching room timed out.")); + client.removeListener("GroupCall.incoming", onGroupCallIncoming); + reject(new Error("Fetching group call timed out.")); }, timeout); } }); diff --git a/src/Home.jsx b/src/Home.jsx index 4619b27..42faaa6 100644 --- a/src/Home.jsx +++ b/src/Home.jsx @@ -22,6 +22,10 @@ import ColorHash from "color-hash"; import styles from "./Home.module.css"; import { FieldRow, InputField, Button, ErrorMessage } from "./Input"; import { Center, Content, Modal } from "./Layout"; +import { + GroupCallIntent, + GroupCallType, +} from "matrix-js-sdk/src/browser-index"; const colorHash = new ColorHash({ lightness: 0.3 }); @@ -75,6 +79,12 @@ export function Home({ client, onLogout }) { }); } + await client.createGroupCall( + room_id, + GroupCallType.Video, + GroupCallIntent.Prompt + ); + history.push(`/room/${room_id}`); } diff --git a/src/Room.jsx b/src/Room.jsx index 9238b55..c79f212 100644 --- a/src/Room.jsx +++ b/src/Room.jsx @@ -25,11 +25,7 @@ import { } from "./RoomButton"; import { Header, LeftNav, RightNav, CenterNav } from "./Header"; import { Button, ErrorMessage } from "./Input"; -import { - GroupCallIntent, - GroupCallState, - GroupCallType, -} from "matrix-js-sdk/src/webrtc/groupCall"; +import { GroupCallState } from "matrix-js-sdk/src/webrtc/groupCall"; import VideoGrid, { useVideoGridLayout, } from "matrix-react-sdk/src/components/views/voip/GroupCallView/VideoGrid"; @@ -37,7 +33,7 @@ import "matrix-react-sdk/res/css/views/voip/GroupCallView/_VideoGrid.scss"; import { useGroupCall } from "matrix-react-sdk/src/hooks/useGroupCall"; import { useCallFeed } from "matrix-react-sdk/src/hooks/useCallFeed"; import { useMediaStream } from "matrix-react-sdk/src/hooks/useMediaStream"; -import { fetchRoom } from "./ConferenceCallManagerHooks"; +import { fetchGroupCall } from "./ConferenceCallManagerHooks"; function useLoadGroupCall(client, roomId) { const [state, setState] = useState({ @@ -47,25 +43,8 @@ function useLoadGroupCall(client, roomId) { }); useEffect(() => { - async function load() { - await fetchRoom(client, roomId); - - let groupCall = client.getGroupCallForRoom(roomId); - - if (!groupCall) { - groupCall = await client.createGroupCall( - roomId, - GroupCallType.Video, - GroupCallIntent.Prompt - ); - } - - return groupCall; - } - setState({ loading: true }); - - load() + fetchGroupCall(client, roomId, 30000) .then((groupCall) => setState({ loading: false, groupCall })) .catch((error) => setState({ loading: false, error })); }, [roomId]);