From 1b4f097b1cc69794af480530717b0ff0c9c51d28 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 1 Sep 2022 11:41:22 +0100 Subject: [PATCH 1/3] Fix bug where additional group calls could be created This (hopefully) fixes the remaining bug where extra group calls could be created when entering a room. We waited for the Room event to arrive, but didn't wait for the group call event handler to actually process the event, so it would have depended what order the event handlers were run in. If this doesn't fix it, it at least adds logging so we'll have more to go on next time. Fixes https://github.com/vector-im/element-call/issues/563 --- src/room/useLoadGroupCall.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/room/useLoadGroupCall.ts b/src/room/useLoadGroupCall.ts index a741b90..96edc5d 100644 --- a/src/room/useLoadGroupCall.ts +++ b/src/room/useLoadGroupCall.ts @@ -22,6 +22,7 @@ import { } from "matrix-js-sdk/src/webrtc/groupCall"; import { GroupCallEventHandlerEvent } from "matrix-js-sdk/src/webrtc/groupCallEventHandler"; import { ClientEvent } from "matrix-js-sdk/src/client"; +import { logger } from "matrix-js-sdk/src/logger"; import type { MatrixClient } from "matrix-js-sdk/src/client"; import type { Room } from "matrix-js-sdk/src/models/room"; @@ -53,7 +54,7 @@ export const useLoadGroupCall = ( const waitPromise = new Promise((resolve) => { const onRoomEvent = async (room: Room) => { if (room.roomId === roomId) { - client.removeListener(ClientEvent.Room, onRoomEvent); + client.removeListener(GroupCallEventHandlerEvent.Room, onRoomEvent); resolve(room); } }; @@ -74,6 +75,7 @@ export const useLoadGroupCall = ( const fetchOrCreateRoom = async (): Promise => { try { const room = await client.joinRoom(roomIdOrAlias, { viaServers }); + logger.info(`Joined ${roomIdOrAlias}, waiting for Room event`); // wait for the room to come down the sync stream, otherwise // client.getRoom() won't return the room. return waitForRoom(room.roomId); @@ -100,7 +102,9 @@ export const useLoadGroupCall = ( const fetchOrCreateGroupCall = async (): Promise => { const room = await fetchOrCreateRoom(); + logger.debug(`Fetched / joined room ${roomIdOrAlias}`); const groupCall = client.getGroupCallForRoom(room.roomId); + logger.debug("Got group call", groupCall); if (groupCall) return groupCall; @@ -111,7 +115,11 @@ export const useLoadGroupCall = ( ) ) { // The call doesn't exist, but we can create it - console.log(`Creating ${createPtt ? "PTT" : "video"} group call room`); + console.log( + `No call found in ${roomIdOrAlias}: creating ${ + createPtt ? "PTT" : "video" + } call` + ); return await client.createGroupCall( room.roomId, createPtt ? GroupCallType.Voice : GroupCallType.Video, From 48ad4d040d03629477be9704f30238035a22d5b2 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 1 Sep 2022 13:32:11 +0100 Subject: [PATCH 2/3] Actually wait for the right event & update js-sdk dependency --- package.json | 2 +- src/room/useLoadGroupCall.ts | 2 +- yarn.lock | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 4661761..9f42385 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "classnames": "^2.3.1", "color-hash": "^2.0.1", "events": "^3.3.0", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#965f4fb13b4b36b26a3f4d7214cc7630d9f579a5", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#da5bc358f40e1e9de39d28aea072a9c38e356bda", "matrix-widget-api": "^1.0.0", "mermaid": "^8.13.8", "normalize.css": "^8.0.1", diff --git a/src/room/useLoadGroupCall.ts b/src/room/useLoadGroupCall.ts index 96edc5d..54921fd 100644 --- a/src/room/useLoadGroupCall.ts +++ b/src/room/useLoadGroupCall.ts @@ -58,7 +58,7 @@ export const useLoadGroupCall = ( resolve(room); } }; - client.on(ClientEvent.Room, onRoomEvent); + client.on(GroupCallEventHandlerEvent.Room, onRoomEvent); }); // race the promise with a timeout so we don't diff --git a/yarn.lock b/yarn.lock index 0e3d523..7dda879 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8390,9 +8390,9 @@ matrix-events-sdk@^0.0.1-beta.7: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1-beta.7.tgz#5ffe45eba1f67cc8d7c2377736c728b322524934" integrity sha512-9jl4wtWanUFSy2sr2lCjErN/oC8KTAtaeaozJtrgot1JiQcEI4Rda9OLgQ7nLKaqb4Z/QUx/fR3XpDzm5Jy1JA== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#965f4fb13b4b36b26a3f4d7214cc7630d9f579a5": +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#da5bc358f40e1e9de39d28aea072a9c38e356bda": version "19.3.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/965f4fb13b4b36b26a3f4d7214cc7630d9f579a5" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/da5bc358f40e1e9de39d28aea072a9c38e356bda" dependencies: "@babel/runtime" "^7.12.5" "@types/sdp-transform" "^2.4.5" From 30c9dfce02e3af2ff8619d672a52c2143852d3a0 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 1 Sep 2022 13:36:02 +0100 Subject: [PATCH 3/3] Remove unused import --- src/room/useLoadGroupCall.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/room/useLoadGroupCall.ts b/src/room/useLoadGroupCall.ts index 54921fd..4c7af1d 100644 --- a/src/room/useLoadGroupCall.ts +++ b/src/room/useLoadGroupCall.ts @@ -21,7 +21,6 @@ import { GroupCallIntent, } from "matrix-js-sdk/src/webrtc/groupCall"; import { GroupCallEventHandlerEvent } from "matrix-js-sdk/src/webrtc/groupCallEventHandler"; -import { ClientEvent } from "matrix-js-sdk/src/client"; import { logger } from "matrix-js-sdk/src/logger"; import type { MatrixClient } from "matrix-js-sdk/src/client";