mirror of
https://github.com/SchildiChat/element-web.git
synced 2024-10-01 01:26:12 -04:00
Switch to using the Widget API SDK for Jitsi widgets
This commit is contained in:
parent
e5a4092adc
commit
69745bbd40
@ -18,7 +18,12 @@ limitations under the License.
|
|||||||
require("./index.scss");
|
require("./index.scss");
|
||||||
|
|
||||||
import * as qs from 'querystring';
|
import * as qs from 'querystring';
|
||||||
import { Capability, WidgetApi } from "matrix-react-sdk/src/widgets/WidgetApi";
|
import {
|
||||||
|
IWidgetApiRequest,
|
||||||
|
IWidgetApiRequestEmptyData,
|
||||||
|
VideoConferenceCapabilities,
|
||||||
|
WidgetApi
|
||||||
|
} from "matrix-widget-api";
|
||||||
|
|
||||||
// Dev note: we use raw JS without many dependencies to reduce bundle size.
|
// Dev note: we use raw JS without many dependencies to reduce bundle size.
|
||||||
// We do not need all of React to render a Jitsi conference.
|
// We do not need all of React to render a Jitsi conference.
|
||||||
@ -56,11 +61,19 @@ let widgetApi: WidgetApi;
|
|||||||
const widgetId = qsParam('widgetId', true);
|
const widgetId = qsParam('widgetId', true);
|
||||||
|
|
||||||
// Set this up as early as possible because Element will be hitting it almost immediately.
|
// Set this up as early as possible because Element will be hitting it almost immediately.
|
||||||
|
let readyPromise: Promise<[void, void]>;
|
||||||
if (parentUrl && widgetId) {
|
if (parentUrl && widgetId) {
|
||||||
widgetApi = new WidgetApi(qsParam('parentUrl'), qsParam('widgetId'), [
|
const parentOrigin = new URL(qsParam('parentUrl')).origin;
|
||||||
Capability.AlwaysOnScreen,
|
widgetApi = new WidgetApi(qsParam("widgetId"), parentOrigin);
|
||||||
|
widgetApi.requestCapabilities(VideoConferenceCapabilities);
|
||||||
|
readyPromise = Promise.all([
|
||||||
|
widgetApi.waitFor<CustomEvent<IWidgetApiRequest>>("im.vector.ready")
|
||||||
|
.then(ev => widgetApi.transport.reply(ev.detail, {})),
|
||||||
|
widgetApi.waitFor("ready"),
|
||||||
]);
|
]);
|
||||||
widgetApi.expectingExplicitReady = true;
|
widgetApi.start();
|
||||||
|
} else {
|
||||||
|
throw new Error("No parent URL or no widget ID");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate the Jitsi params now
|
// Populate the Jitsi params now
|
||||||
@ -70,10 +83,8 @@ let widgetApi: WidgetApi;
|
|||||||
avatarUrl = qsParam('avatarUrl', true); // http not mxc
|
avatarUrl = qsParam('avatarUrl', true); // http not mxc
|
||||||
userId = qsParam('userId');
|
userId = qsParam('userId');
|
||||||
|
|
||||||
if (widgetApi) {
|
await readyPromise;
|
||||||
await widgetApi.waitReady();
|
await widgetApi.setAlwaysOnScreen(false); // start off as detachable from the screen
|
||||||
await widgetApi.setAlwaysOnScreen(false); // start off as detachable from the screen
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: register widgetApi listeners for PTT controls (https://github.com/vector-im/riot-web/issues/12795)
|
// TODO: register widgetApi listeners for PTT controls (https://github.com/vector-im/riot-web/issues/12795)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user