diff --git a/src/UrlParams.test.ts b/src/UrlParams.test.ts index fbf0c095..56a3797d 100644 --- a/src/UrlParams.test.ts +++ b/src/UrlParams.test.ts @@ -228,7 +228,7 @@ describe("UrlParams", () => { const startNewCallDefaults = (platform: string): object => ({ confineToRoom: true, appPrompt: false, - preload: true, + preload: false, header: platform === "desktop" ? HeaderStyle.None : HeaderStyle.AppBar, showControls: true, hideScreensharing: false, @@ -242,7 +242,7 @@ describe("UrlParams", () => { const joinExistingCallDefaults = (platform: string): object => ({ confineToRoom: true, appPrompt: false, - preload: true, + preload: false, header: platform === "desktop" ? HeaderStyle.None : HeaderStyle.AppBar, showControls: true, hideScreensharing: false, diff --git a/src/UrlParams.ts b/src/UrlParams.ts index 5f43b17f..f5369765 100644 --- a/src/UrlParams.ts +++ b/src/UrlParams.ts @@ -347,7 +347,7 @@ export const getUrlParams = ( const inAppDefault = { confineToRoom: true, appPrompt: false, - preload: true, + preload: false, header: platform === "desktop" ? HeaderStyle.None : HeaderStyle.AppBar, showControls: true, hideScreensharing: false, diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 63fc942f..fe21ba62 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -50,7 +50,7 @@ import { useRoomAvatar } from "./useRoomAvatar"; import { useRoomName } from "./useRoomName"; import { useJoinRule } from "./useJoinRule"; import { InviteModal } from "./InviteModal"; -import { HeaderStyle, useUrlParams } from "../UrlParams"; +import { HeaderStyle, type UrlParams, useUrlParams } from "../UrlParams"; import { E2eeType } from "../e2ee/e2eeType"; import { useAudioContext } from "../useAudioContext"; import { callEventAudioSounds } from "./CallEventAudioRenderer"; @@ -83,8 +83,8 @@ interface Props { client: MatrixClient; isPasswordlessUser: boolean; confineToRoom: boolean; - preload: boolean; - skipLobby: boolean; + preload: UrlParams["preload"]; + skipLobby: UrlParams["skipLobby"]; header: HeaderStyle; rtcSession: MatrixRTCSession; isJoined: boolean; @@ -276,34 +276,28 @@ export const GroupCallView: FC = ({ }; if (skipLobby) { - if (widget) { - if (preload) { - // In preload mode without lobby we wait for a join action before entering - const onJoin = (ev: CustomEvent): void => { - (async (): Promise => { - await defaultDeviceSetup( - ev.detail.data as unknown as JoinCallData, - ); - await enterRTCSessionOrError(rtcSession); - widget.api.transport.reply(ev.detail, {}); - })().catch((e) => { - logger.error("Error joining RTC session", e); - }); - }; - widget.lazyActions.on(ElementWidgetActions.JoinCall, onJoin); - return (): void => { - widget.lazyActions.off(ElementWidgetActions.JoinCall, onJoin); - }; - } else { - // No lobby and no preload: we enter the rtc session right away + if (widget && preload) { + // In preload mode without lobby we wait for a join action before entering + const onJoin = (ev: CustomEvent): void => { (async (): Promise => { + await defaultDeviceSetup(ev.detail.data as unknown as JoinCallData); await enterRTCSessionOrError(rtcSession); + widget.api.transport.reply(ev.detail, {}); })().catch((e) => { - logger.error("Error joining RTC session", e); + logger.error("Error joining RTC session on preload", e); }); - } + }; + widget.lazyActions.on(ElementWidgetActions.JoinCall, onJoin); + return (): void => { + widget.lazyActions.off(ElementWidgetActions.JoinCall, onJoin); + }; } else { - void enterRTCSessionOrError(rtcSession); + // No lobby and no preload: we enter the rtc session right away + (async (): Promise => { + await enterRTCSessionOrError(rtcSession); + })().catch((e) => { + logger.error("Error joining RTC session immediately", e); + }); } } }, [ @@ -494,6 +488,7 @@ export const GroupCallView: FC = ({ // Left in widget mode: body = returnToLobby ? lobbyView : null; } else if (preload || skipLobby) { + // The RTC session is not joined to yet (`isJoined`), but enterRTCSessionOrError should have been called. body = null; } else { body = lobbyView;