fix: override cancelScheduledDelayedEvent/restart/send in CallWidgetDriver
CI / Build & Quality Checks (push) Successful in 10m34s
CI / Build & Quality Checks (push) Successful in 10m34s
The base WidgetDriver throws Failed to override function for these methods. ClientWidgetApi routes update_delayed_event widget actions to cancelScheduledDelayedEvent, restartScheduledDelayedEvent, or sendScheduledDelayedEvent. Without these overrides every delayed-event refresh from element-call fails, causing MembershipManager to drop the call after retries. Also make listenAction auto-call preventDefault so io.element.join and other custom widget actions return success. Add set_always_on_screen handler so element-call PiP requests are acknowledged.
This commit is contained in:
@@ -12,6 +12,7 @@ import {
|
||||
IRoomEvent,
|
||||
IWidget,
|
||||
Widget,
|
||||
WidgetApiFromWidgetAction,
|
||||
WidgetApiToWidgetAction,
|
||||
WidgetDriver,
|
||||
} from 'matrix-widget-api';
|
||||
@@ -248,6 +249,10 @@ export class CallEmbed {
|
||||
this.disposables.push(
|
||||
this.listenAction(ElementWidgetActions.JoinCall, this.onCallJoined.bind(this)),
|
||||
);
|
||||
// Acknowledge set_always_on_screen; we manage PiP ourselves so just return success
|
||||
this.disposables.push(
|
||||
this.listenAction(WidgetApiFromWidgetAction.UpdateAlwaysOnScreen, () => {}),
|
||||
);
|
||||
|
||||
// Populate the map of "read up to" events for this widget with the current event in every room.
|
||||
// This is a bit inefficient, but should be okay. We do this for all rooms in case the widget
|
||||
@@ -460,7 +465,11 @@ export class CallEmbed {
|
||||
}
|
||||
|
||||
public listenAction<T>(type: string, callback: (event: CustomEvent<T>) => void) {
|
||||
return this.listenEvent(`action:${type}`, callback);
|
||||
const wrapped = (ev: CustomEvent<T>) => {
|
||||
ev.preventDefault();
|
||||
callback(ev);
|
||||
};
|
||||
return this.listenEvent(`action:${type}`, wrapped);
|
||||
}
|
||||
|
||||
public listenEvent<T>(type: string, callback: (event: T) => void) {
|
||||
|
||||
@@ -148,6 +148,18 @@ export class CallWidgetDriver extends WidgetDriver {
|
||||
await client._unstable_updateDelayedEvent(delayId, action);
|
||||
}
|
||||
|
||||
public async cancelScheduledDelayedEvent(delayId: string): Promise<void> {
|
||||
await this.mx._unstable_cancelScheduledDelayedEvent(delayId);
|
||||
}
|
||||
|
||||
public async restartScheduledDelayedEvent(delayId: string): Promise<void> {
|
||||
await this.mx._unstable_restartScheduledDelayedEvent(delayId);
|
||||
}
|
||||
|
||||
public async sendScheduledDelayedEvent(delayId: string): Promise<void> {
|
||||
await this.mx._unstable_sendScheduledDelayedEvent(delayId);
|
||||
}
|
||||
|
||||
public async sendToDevice(
|
||||
eventType: string,
|
||||
encrypted: boolean,
|
||||
|
||||
Reference in New Issue
Block a user