Skip to content

Commit 8e18f6e

Browse files
committed
Use roomContext.isRoomEncrypted
1 parent 2e30390 commit 8e18f6e

File tree

2 files changed

+12
-41
lines changed

2 files changed

+12
-41
lines changed

src/components/views/rooms/EventTile.tsx

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import React, { createRef, forwardRef, JSX, MouseEvent, ReactNode } from "react"
1111
import classNames from "classnames";
1212
import {
1313
EventStatus,
14-
EventTimeline,
1514
EventType,
1615
MatrixEvent,
1716
MatrixEventEvent,
@@ -22,7 +21,6 @@ import {
2221
Room,
2322
RoomEvent,
2423
RoomMember,
25-
RoomStateEvent,
2624
Thread,
2725
ThreadEvent,
2826
} from "matrix-js-sdk/src/matrix";
@@ -264,10 +262,6 @@ interface IState {
264262

265263
thread: Thread | null;
266264
threadNotification?: NotificationCountType;
267-
/**
268-
* Whether the event is encrypted.
269-
*/
270-
isRoomEncrypted: boolean;
271265
}
272266

273267
/**
@@ -324,7 +318,6 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
324318
hover: false,
325319

326320
thread,
327-
isRoomEncrypted: false,
328321
};
329322

330323
// don't do RR animations until we are mounted
@@ -420,12 +413,6 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
420413
room?.on(ThreadEvent.New, this.onNewThread);
421414

422415
this.verifyEvent();
423-
424-
room?.getLiveTimeline().getState(EventTimeline.FORWARDS)?.on(RoomStateEvent.Events, this.onRoomStateEvents);
425-
426-
const crypto = client.getCrypto();
427-
if (!room || !crypto) return;
428-
this.setState({ isRoomEncrypted: await crypto.isEncryptionEnabledInRoom(room.roomId) });
429416
}
430417

431418
private updateThread = (thread: Thread): void => {
@@ -447,10 +434,6 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
447434
client.removeListener(RoomEvent.Receipt, this.onRoomReceipt);
448435
const room = client.getRoom(this.props.mxEvent.getRoomId());
449436
room?.off(ThreadEvent.New, this.onNewThread);
450-
room
451-
?.getLiveTimeline()
452-
.getState(EventTimeline.FORWARDS)
453-
?.off(RoomStateEvent.Events, this.onRoomStateEvents);
454437
}
455438
this.isListeningForReceipts = false;
456439
this.props.mxEvent.removeListener(MatrixEventEvent.Decrypted, this.onDecrypted);
@@ -487,17 +470,6 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
487470
}
488471
};
489472

490-
private onRoomStateEvents = async (evt: MatrixEvent): Promise<void> => {
491-
const client = MatrixClientPeg.safeGet();
492-
const crypto = client.getCrypto();
493-
if (!crypto) return;
494-
495-
const room = client.getRoom(evt.getRoomId());
496-
if (room && evt.getType() === EventType.RoomEncryption) {
497-
this.setState({ isRoomEncrypted: await crypto.isEncryptionEnabledInRoom(room.roomId) });
498-
}
499-
};
500-
501473
private get thread(): Thread | null {
502474
let thread: Thread | undefined = this.props.mxEvent.getThread();
503475
/**
@@ -803,7 +775,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
803775
}
804776
}
805777

806-
if (this.state.isRoomEncrypted) {
778+
if (this.context.isRoomEncrypted) {
807779
// else if room is encrypted
808780
// and event is being encrypted or is not_sent (Unknown Devices/Network Error)
809781
if (ev.status === EventStatus.ENCRYPTING) {

test/unit-tests/components/views/rooms/EventTile-test.tsx

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@ import * as React from "react";
1010
import { act, fireEvent, render, screen, waitFor } from "jest-matrix-react";
1111
import { mocked } from "jest-mock";
1212
import {
13-
EventTimeline,
1413
EventType,
1514
IEventDecryptionResult,
1615
MatrixClient,
1716
MatrixEvent,
1817
NotificationCountType,
1918
PendingEventOrdering,
2019
Room,
21-
RoomStateEvent,
2220
TweakName,
2321
} from "matrix-js-sdk/src/matrix";
2422
import {
@@ -72,9 +70,11 @@ describe("EventTile", () => {
7270
function getComponent(
7371
overrides: Partial<EventTileProps> = {},
7472
renderingType: TimelineRenderingType = TimelineRenderingType.Room,
73+
roomContext: Partial<IRoomState> = {},
7574
) {
7675
const context = getRoomContext(room, {
7776
timelineRenderingType: renderingType,
77+
...roomContext,
7878
});
7979
return render(<WrappedEventTile roomContext={context} eventTilePropertyOverrides={overrides} />);
8080
}
@@ -439,8 +439,6 @@ describe("EventTile", () => {
439439
});
440440

441441
it("should update the warning when the event is replaced with an unencrypted one", async () => {
442-
jest.spyOn(client.getCrypto()!, "isEncryptionEnabledInRoom").mockResolvedValue(true);
443-
444442
// we start out with an event from the trusted device
445443
mxEvent = await mkEncryptedMatrixEvent({
446444
plainContent: { msgtype: "m.text", body: "msg1" },
@@ -454,7 +452,7 @@ describe("EventTile", () => {
454452
shieldReason: null,
455453
} as EventEncryptionInfo);
456454

457-
const roomContext = getRoomContext(room, {});
455+
const roomContext = getRoomContext(room, { isRoomEncrypted: true });
458456
const { container, rerender } = render(<WrappedEventTile roomContext={roomContext} />);
459457
await flushPromises();
460458

@@ -590,18 +588,19 @@ describe("EventTile", () => {
590588
shieldReason: null,
591589
});
592590

593-
getComponent();
591+
const { rerender } = getComponent();
594592
await flushPromises();
595593
// The room and the event are unencrypted, the tile should not show the not encrypted status
596594
expect(screen.queryByText("Not encrypted")).toBeNull();
597595

598596
// The room is now encrypted
599-
jest.spyOn(client.getCrypto()!, "isEncryptionEnabledInRoom").mockResolvedValue(true);
600-
// Emit a state event to trigger a re-render
601-
const roomState = room!.getLiveTimeline().getState(EventTimeline.FORWARDS)!;
602-
act(() => {
603-
roomState.emit(RoomStateEvent.Events, new MatrixEvent({ type: EventType.RoomEncryption }), roomState, null);
604-
});
597+
rerender(
598+
<WrappedEventTile
599+
roomContext={getRoomContext(room, {
600+
isRoomEncrypted: true,
601+
})}
602+
/>,
603+
);
605604

606605
// The event tile should now show the not encrypted status
607606
await waitFor(() => expect(screen.getByText("Not encrypted")).toBeInTheDocument());

0 commit comments

Comments
 (0)