Reduce video rooms log spam (#8913)

* Reduce video rooms log spam

If you forget to call preventDefault in widget action handlers,
matrix-widget-api logs a bunch of errors complaining that the action is
unsupported/unhandled, even if it isn't.

* Fix tests
t3chguy/dedup-icons-17oct
Robin 2022-06-29 10:09:41 -04:00 committed by GitHub
parent 2bbd542140
commit 3c14d93237
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 5 deletions

View File

@ -202,6 +202,7 @@ export default class VideoChannelStore extends AsyncStoreWithClient<null> {
messaging, messaging,
`action:${ElementWidgetActions.JoinCall}`, `action:${ElementWidgetActions.JoinCall}`,
(ev: CustomEvent<IWidgetApiRequest>) => { (ev: CustomEvent<IWidgetApiRequest>) => {
ev.preventDefault();
this.ack(ev); this.ack(ev);
return true; return true;
}, },
@ -290,42 +291,49 @@ export default class VideoChannelStore extends AsyncStoreWithClient<null> {
await removeOurDevice(room); await removeOurDevice(room);
}; };
private ack = (ev: CustomEvent<IWidgetApiRequest>) => { private ack = (ev: CustomEvent<IWidgetApiRequest>, messaging = this.activeChannel) => {
// Even if we don't have a reply to a given widget action, we still need // Even if we don't have a reply to a given widget action, we still need
// to give the widget API something to acknowledge receipt // to give the widget API something to acknowledge receipt
this.activeChannel.transport.reply(ev.detail, {}); messaging.transport.reply(ev.detail, {});
}; };
private onHangup = async (ev: CustomEvent<IWidgetApiRequest>) => { private onHangup = async (ev: CustomEvent<IWidgetApiRequest>) => {
this.ack(ev); ev.preventDefault();
const messaging = this.activeChannel;
// In case this hangup is caused by Jitsi Meet crashing at startup, // In case this hangup is caused by Jitsi Meet crashing at startup,
// wait for the connection event in order to avoid racing // wait for the connection event in order to avoid racing
if (!this.connected) await waitForEvent(this, VideoChannelEvent.Connect); if (!this.connected) await waitForEvent(this, VideoChannelEvent.Connect);
await this.setDisconnected(); await this.setDisconnected();
this.ack(ev, messaging);
}; };
private onParticipants = (ev: CustomEvent<IWidgetApiRequest>) => { private onParticipants = (ev: CustomEvent<IWidgetApiRequest>) => {
ev.preventDefault();
this.participants = ev.detail.data.participants as IJitsiParticipant[]; this.participants = ev.detail.data.participants as IJitsiParticipant[];
this.emit(VideoChannelEvent.Participants, this.roomId, ev.detail.data.participants); this.emit(VideoChannelEvent.Participants, this.roomId, ev.detail.data.participants);
this.ack(ev); this.ack(ev);
}; };
private onMuteAudio = (ev: CustomEvent<IWidgetApiRequest>) => { private onMuteAudio = (ev: CustomEvent<IWidgetApiRequest>) => {
ev.preventDefault();
this.audioMuted = true; this.audioMuted = true;
this.ack(ev); this.ack(ev);
}; };
private onUnmuteAudio = (ev: CustomEvent<IWidgetApiRequest>) => { private onUnmuteAudio = (ev: CustomEvent<IWidgetApiRequest>) => {
ev.preventDefault();
this.audioMuted = false; this.audioMuted = false;
this.ack(ev); this.ack(ev);
}; };
private onMuteVideo = (ev: CustomEvent<IWidgetApiRequest>) => { private onMuteVideo = (ev: CustomEvent<IWidgetApiRequest>) => {
ev.preventDefault();
this.videoMuted = true; this.videoMuted = true;
this.ack(ev); this.ack(ev);
}; };
private onUnmuteVideo = (ev: CustomEvent<IWidgetApiRequest>) => { private onUnmuteVideo = (ev: CustomEvent<IWidgetApiRequest>) => {
ev.preventDefault();
this.videoMuted = false; this.videoMuted = false;
this.ack(ev); this.ack(ev);
}; };

View File

@ -374,6 +374,7 @@ export class StopGapWidget extends EventEmitter {
if (WidgetType.JITSI.matches(this.mockWidget.type)) { if (WidgetType.JITSI.matches(this.mockWidget.type)) {
this.messaging.on(`action:${ElementWidgetActions.HangupCall}`, this.messaging.on(`action:${ElementWidgetActions.HangupCall}`,
(ev: CustomEvent<IHangupCallApiRequest>) => { (ev: CustomEvent<IHangupCallApiRequest>) => {
ev.preventDefault();
if (ev.detail.data?.errorMessage) { if (ev.detail.data?.errorMessage) {
Modal.createDialog(ErrorDialog, { Modal.createDialog(ErrorDialog, {
title: _t("Connection lost"), title: _t("Connection lost"),
@ -382,6 +383,7 @@ export class StopGapWidget extends EventEmitter {
}), }),
}); });
} }
this.messaging.transport.reply(ev.detail, <IWidgetApiRequestEmptyData>{});
}, },
); );
} }

View File

@ -106,7 +106,7 @@ describe("VideoChannelStore", () => {
const waitForConnect = new Promise<void>(resolve => const waitForConnect = new Promise<void>(resolve =>
store.once(VideoChannelEvent.Connect, resolve), store.once(VideoChannelEvent.Connect, resolve),
); );
join({ detail: {} } as unknown as CustomEvent<IWidgetApiRequest>); join(new CustomEvent("widgetapirequest", { detail: {} }) as CustomEvent<IWidgetApiRequest>);
await waitForConnect; await waitForConnect;
}; };
@ -119,7 +119,7 @@ describe("VideoChannelStore", () => {
const waitForHangup = new Promise<void>(resolve => const waitForHangup = new Promise<void>(resolve =>
store.once(VideoChannelEvent.Disconnect, resolve), store.once(VideoChannelEvent.Disconnect, resolve),
); );
hangup({ detail: {} } as unknown as CustomEvent<IWidgetApiRequest>); hangup(new CustomEvent("widgetapirequest", { detail: {} }) as CustomEvent<IWidgetApiRequest>);
await waitForHangup; await waitForHangup;
}; };