Skip to content

Commit 572dddb

Browse files
BillCarsonFrDileep Bandla
authored andcommitted
Widgets: Use the new ClientEvent.ReceivedToDeviceMessage instead of ToDeviceEvent (element-hq#30239)
1 parent 8e3ee3e commit 572dddb

2 files changed

Lines changed: 41 additions & 14 deletions

File tree

src/stores/widgets/StopGapWidget.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
type MatrixClient,
1414
ClientEvent,
1515
RoomStateEvent,
16+
type ReceivedToDeviceMessage,
1617
} from "matrix-js-sdk/src/matrix";
1718
import { KnownMembership } from "matrix-js-sdk/src/types";
1819
import {
@@ -360,7 +361,7 @@ export class StopGapWidget extends EventEmitter {
360361
this.client.on(ClientEvent.Event, this.onEvent);
361362
this.client.on(MatrixEventEvent.Decrypted, this.onEventDecrypted);
362363
this.client.on(RoomStateEvent.Events, this.onStateUpdate);
363-
this.client.on(ClientEvent.ToDeviceEvent, this.onToDeviceEvent);
364+
this.client.on(ClientEvent.ReceivedToDeviceMessage, this.onToDeviceMessage);
364365

365366
this.messaging.on(
366367
`action:${WidgetApiFromWidgetAction.UpdateAlwaysOnScreen}`,
@@ -493,7 +494,7 @@ export class StopGapWidget extends EventEmitter {
493494
this.client.off(ClientEvent.Event, this.onEvent);
494495
this.client.off(MatrixEventEvent.Decrypted, this.onEventDecrypted);
495496
this.client.off(RoomStateEvent.Events, this.onStateUpdate);
496-
this.client.off(ClientEvent.ToDeviceEvent, this.onToDeviceEvent);
497+
this.client.off(ClientEvent.ReceivedToDeviceMessage, this.onToDeviceMessage);
497498
}
498499

499500
private onEvent = (ev: MatrixEvent): void => {
@@ -513,10 +514,10 @@ export class StopGapWidget extends EventEmitter {
513514
});
514515
};
515516

516-
private onToDeviceEvent = async (ev: MatrixEvent): Promise<void> => {
517-
await this.client.decryptEventIfNeeded(ev);
518-
if (ev.isDecryptionFailure()) return;
519-
await this.messaging?.feedToDevice(ev.getEffectiveEvent() as IRoomEvent, ev.isEncrypted());
517+
private onToDeviceMessage = async (payload: ReceivedToDeviceMessage): Promise<void> => {
518+
const { message, encryptionInfo } = payload;
519+
// TODO: Update the widget API to use a proper IToDeviceMessage instead of a IRoomEvent
520+
await this.messaging?.feedToDevice(message as IRoomEvent, encryptionInfo != null);
520521
};
521522

522523
/**

test/unit-tests/stores/widgets/StopGapWidget-test.ts

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,16 +83,42 @@ describe("StopGapWidget", () => {
8383
});
8484

8585
it("feeds incoming to-device messages to the widget", async () => {
86-
const event = mkEvent({
87-
event: true,
88-
type: "org.example.foo",
89-
user: "@alice:example.org",
90-
content: { hello: "world" },
91-
});
86+
const receivedToDevice = {
87+
message: {
88+
type: "org.example.foo",
89+
sender: "@alice:example.org",
90+
content: {
91+
hello: "world",
92+
},
93+
},
94+
encryptionInfo: null,
95+
};
96+
97+
client.emit(ClientEvent.ReceivedToDeviceMessage, receivedToDevice);
98+
await Promise.resolve(); // flush promises
99+
expect(messaging.feedToDevice).toHaveBeenCalledWith(receivedToDevice.message, false);
100+
});
101+
102+
it("feeds incoming encrypted to-device messages to the widget", async () => {
103+
const receivedToDevice = {
104+
message: {
105+
type: "org.example.foo",
106+
sender: "@alice:example.org",
107+
content: {
108+
hello: "world",
109+
},
110+
},
111+
encryptionInfo: {
112+
senderVerified: false,
113+
sender: "@alice:example.org",
114+
senderCurve25519KeyBase64: "",
115+
senderDevice: "ABCDEFGHI",
116+
},
117+
};
92118

93-
client.emit(ClientEvent.ToDeviceEvent, event);
119+
client.emit(ClientEvent.ReceivedToDeviceMessage, receivedToDevice);
94120
await Promise.resolve(); // flush promises
95-
expect(messaging.feedToDevice).toHaveBeenCalledWith(event.getEffectiveEvent(), false);
121+
expect(messaging.feedToDevice).toHaveBeenCalledWith(receivedToDevice.message, true);
96122
});
97123

98124
it("feeds incoming state updates to the widget", () => {

0 commit comments

Comments
 (0)