Skip to content

Commit

Permalink
Show a lobby screen in video rooms (#21746)
Browse files Browse the repository at this point in the history
* No longer skip the prejoin screen in video rooms

* Enable joining with specific devices

* Start widget API listeners earlier

so that they're instantly ready for use, rather than being stuck behind
the config loading

* Revert "Start widget API listeners earlier"

This reverts commit 2c1bb08.

* Tell the client when the Jitsi wrapper is ready to receive events

* Fix video rooms getting stuck on Jitsi Meet's prejoin screen
  • Loading branch information
robintown authored Apr 20, 2022
1 parent ff89eef commit b41e215
Showing 1 changed file with 21 additions and 6 deletions.
27 changes: 21 additions & 6 deletions src/vector/jitsi/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ const ack = (ev: CustomEvent<IWidgetApiRequest>) => widgetApi.transport.reply(ev
const instanceConfig = new SnakedObject<IConfigOptions>((await configPromise) ?? <IConfigOptions>{});
const jitsiConfig = instanceConfig.get("jitsi_widget") ?? {};
skipOurWelcomeScreen = (new SnakedObject<IConfigOptions["jitsi_widget"]>(jitsiConfig))
.get("skip_built_in_welcome_screen") || isVideoChannel;
.get("skip_built_in_welcome_screen") ?? false;

// Either reveal the prejoin screen, or skip straight to Jitsi depending on the config.
// We don't set up the call yet though as this might lead to failure without the widget API.
Expand All @@ -145,7 +145,8 @@ const ack = (ev: CustomEvent<IWidgetApiRequest>) => widgetApi.transport.reply(ev

widgetApi.on(`action:${ElementWidgetActions.JoinCall}`,
(ev: CustomEvent<IWidgetApiRequest>) => {
joinConference();
const { audioDevice, videoDevice } = ev.detail.data;
joinConference(audioDevice as string, videoDevice as string);
ack(ev);
},
);
Expand Down Expand Up @@ -211,6 +212,13 @@ const ack = (ev: CustomEvent<IWidgetApiRequest>) => widgetApi.transport.reply(ev
}

enableJoinButton(); // always enable the button

// Inform the client that we're ready to receive events
try {
await widgetApi?.transport.send(ElementWidgetActions.WidgetReady, {});
} catch (e) {
logger.error(e);
}
} catch (e) {
logger.error("Error setting up Jitsi widget", e);
document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget";
Expand Down Expand Up @@ -293,7 +301,8 @@ async function notifyHangup() {
}
}

function joinConference() { // event handler bound in HTML
// event handler bound in HTML
function joinConference(audioDevice?: string, videoDevice?: string) {
let jwt;
if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) {
if (!openIdToken?.access_token) { // eslint-disable-line camelcase
Expand All @@ -318,6 +327,10 @@ function joinConference() { // event handler bound in HTML
height: "100%",
parentNode: document.querySelector("#jitsiContainer"),
roomName: conferenceId,
devices: {
audioInput: audioDevice,
videoInput: videoDevice,
},
interfaceConfigOverwrite: {
SHOW_JITSI_WATERMARK: false,
SHOW_WATERMARK_FOR_GUESTS: false,
Expand All @@ -326,15 +339,17 @@ function joinConference() { // event handler bound in HTML
},
configOverwrite: {
startAudioOnly,
startWithAudioMuted: !audioDevice,
startWithVideoMuted: !videoDevice,
} as any,
jwt: jwt,
};

// Video channel widgets need some more tailored config options
if (isVideoChannel) {
// Ensure that we start on Jitsi Meet's native prejoin screen, for
// deployments that skip straight to the conference by default
options.configOverwrite.prejoinConfig = { enabled: true };
// Ensure that we skip Jitsi Meet's native prejoin screen, for
// deployments that have it enabled
options.configOverwrite.prejoinConfig = { enabled: false };
// Use a simplified set of toolbar buttons
options.configOverwrite.toolbarButtons = [
"microphone", "camera", "desktop", "tileview", "hangup",
Expand Down

0 comments on commit b41e215

Please sign in to comment.