Use new method to wait until a room is ready fopr group calls
We were waiting for the group call event handler to process the room, but only if we couldn't get the room from the client - if getRoom returned a room, we just wouldn't wait. This just uses promises rather than an event to wait for the room to be ready. Requires https://github.com/matrix-org/matrix-js-sdk/pull/2641
This commit is contained in:
parent
34d5e88def
commit
ee1dd2293e
1 changed files with 8 additions and 31 deletions
|
@ -45,39 +45,15 @@ export const useLoadGroupCall = (
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setState({ loading: true });
|
setState({ loading: true });
|
||||||
|
|
||||||
const waitForRoom = async (roomId: string): Promise<Room> => {
|
|
||||||
const room = client.getRoom(roomId);
|
|
||||||
if (room) return room;
|
|
||||||
console.log(`Room ${roomId} hasn't arrived yet: waiting`);
|
|
||||||
|
|
||||||
const waitPromise = new Promise<Room>((resolve) => {
|
|
||||||
const onRoomEvent = async (room: Room) => {
|
|
||||||
if (room.roomId === roomId) {
|
|
||||||
client.removeListener(GroupCallEventHandlerEvent.Room, onRoomEvent);
|
|
||||||
resolve(room);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
client.on(GroupCallEventHandlerEvent.Room, onRoomEvent);
|
|
||||||
});
|
|
||||||
|
|
||||||
// race the promise with a timeout so we don't
|
|
||||||
// wait forever for the room
|
|
||||||
const timeoutPromise = new Promise<Room>((_, reject) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
reject(new Error("Timed out trying to join room"));
|
|
||||||
}, 30000);
|
|
||||||
});
|
|
||||||
|
|
||||||
return Promise.race([waitPromise, timeoutPromise]);
|
|
||||||
};
|
|
||||||
|
|
||||||
const fetchOrCreateRoom = async (): Promise<Room> => {
|
const fetchOrCreateRoom = async (): Promise<Room> => {
|
||||||
try {
|
try {
|
||||||
const room = await client.joinRoom(roomIdOrAlias, { viaServers });
|
const room = await client.joinRoom(roomIdOrAlias, { viaServers });
|
||||||
logger.info(`Joined ${roomIdOrAlias}, waiting for Room event`);
|
logger.info(
|
||||||
// wait for the room to come down the sync stream, otherwise
|
`Joined ${roomIdOrAlias}, waiting room to be ready for group calls`
|
||||||
// client.getRoom() won't return the room.
|
);
|
||||||
return waitForRoom(room.roomId);
|
await client.waitUntilRoomReadyForGroupCalls(room.roomId);
|
||||||
|
logger.info(`${roomIdOrAlias}, is ready for group calls`);
|
||||||
|
return room;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (
|
if (
|
||||||
isLocalRoomId(roomIdOrAlias) &&
|
isLocalRoomId(roomIdOrAlias) &&
|
||||||
|
@ -92,7 +68,8 @@ export const useLoadGroupCall = (
|
||||||
createPtt
|
createPtt
|
||||||
);
|
);
|
||||||
// likewise, wait for the room
|
// likewise, wait for the room
|
||||||
return await waitForRoom(roomId);
|
await client.waitUntilRoomReadyForGroupCalls(roomId);
|
||||||
|
return client.getRoom(roomId);
|
||||||
} else {
|
} else {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue