Replace `MatrixClient.isRoomEncrypted` by `MatrixClient.CryptoApi.isEncryptionEnabledInRoom` in `EventTile.tsx`

Florian Duros 2024-11-21 10:31:55 +01:00
parent b907ec380f
commit ce07480332
No known key found for this signature in database
GPG Key ID: A5BBB4041B493F15
3 changed files with 30 additions and 4 deletions

View File

@ -11,6 +11,7 @@ import React, { createRef, forwardRef, JSX, MouseEvent, ReactNode } from "react"
import classNames from "classnames"; import classNames from "classnames";
import { import {
EventStatus, EventStatus,
EventTimeline,
EventType, EventType,
MatrixEvent, MatrixEvent,
MatrixEventEvent, MatrixEventEvent,
@ -21,6 +22,7 @@ import {
Room, Room,
RoomEvent, RoomEvent,
RoomMember, RoomMember,
RoomStateEvent,
Thread, Thread,
ThreadEvent, ThreadEvent,
} from "matrix-js-sdk/src/matrix"; } from "matrix-js-sdk/src/matrix";
@ -262,6 +264,10 @@ interface IState {
thread: Thread | null; thread: Thread | null;
threadNotification?: NotificationCountType; threadNotification?: NotificationCountType;
/**
* Whether the event is encrypted.
*/
isRoomEncrypted: boolean;
} }
/** /**
@ -318,6 +324,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
hover: false, hover: false,
thread, thread,
isRoomEncrypted: false,
}; };
// don't do RR animations until we are mounted // don't do RR animations until we are mounted
@ -386,7 +393,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
return true; return true;
} }
public componentDidMount(): void { public async componentDidMount(): Promise<void> {
this.unmounted = false; this.unmounted = false;
this.suppressReadReceiptAnimation = false; this.suppressReadReceiptAnimation = false;
const client = MatrixClientPeg.safeGet(); const client = MatrixClientPeg.safeGet();
@ -413,6 +420,12 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
room?.on(ThreadEvent.New, this.onNewThread); room?.on(ThreadEvent.New, this.onNewThread);
this.verifyEvent(); this.verifyEvent();
room?.getLiveTimeline().getState(EventTimeline.FORWARDS)?.on(RoomStateEvent.Events, this.onRoomStateEvents);
const crypto = client.getCrypto();
if (!room || !crypto) return;
this.setState({ isRoomEncrypted: await crypto.isEncryptionEnabledInRoom(room.roomId) });
} }
private updateThread = (thread: Thread): void => { private updateThread = (thread: Thread): void => {
@ -470,6 +483,17 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
} }
}; };
private onRoomStateEvents = async (evt: MatrixEvent): Promise<void> => {
const client = MatrixClientPeg.safeGet();
const crypto = client.getCrypto();
if (!crypto) return;
const room = client.getRoom(evt.getRoomId());
if (room && evt.getType() === EventType.RoomEncryption) {
this.setState({ isRoomEncrypted: await crypto.isEncryptionEnabledInRoom(room.roomId) });
}
};
private get thread(): Thread | null { private get thread(): Thread | null {
let thread: Thread | undefined = this.props.mxEvent.getThread(); let thread: Thread | undefined = this.props.mxEvent.getThread();
/** /**
@ -767,7 +791,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
} }
} }
if (MatrixClientPeg.safeGet().isRoomEncrypted(ev.getRoomId()!)) { if (this.state.isRoomEncrypted) {
// else if room is encrypted // else if room is encrypted
// and event is being encrypted or is not_sent (Unknown Devices/Network Error) // and event is being encrypted or is not_sent (Unknown Devices/Network Error)
if (ev.status === EventStatus.ENCRYPTING) { if (ev.status === EventStatus.ENCRYPTING) {

View File

@ -32,6 +32,7 @@ import {
mkEvent, mkEvent,
mkMessage, mkMessage,
mkStubRoom, mkStubRoom,
mockClientMethodsCrypto,
mockPlatformPeg, mockPlatformPeg,
} from "../../../../test-utils"; } from "../../../../test-utils";
import { TILE_SERVER_WK_KEY } from "../../../../../src/utils/WellKnownUtils"; import { TILE_SERVER_WK_KEY } from "../../../../../src/utils/WellKnownUtils";
@ -67,7 +68,6 @@ describe("ForwardDialog", () => {
getAccountData: jest.fn().mockReturnValue(accountDataEvent), getAccountData: jest.fn().mockReturnValue(accountDataEvent),
getPushActionsForEvent: jest.fn(), getPushActionsForEvent: jest.fn(),
mxcUrlToHttp: jest.fn().mockReturnValue(""), mxcUrlToHttp: jest.fn().mockReturnValue(""),
isRoomEncrypted: jest.fn().mockReturnValue(false),
getProfileInfo: jest.fn().mockResolvedValue({ getProfileInfo: jest.fn().mockResolvedValue({
displayname: "Alice", displayname: "Alice",
}), }),
@ -76,6 +76,7 @@ describe("ForwardDialog", () => {
getClientWellKnown: jest.fn().mockReturnValue({ getClientWellKnown: jest.fn().mockReturnValue({
[TILE_SERVER_WK_KEY.name]: { map_style_url: "maps.com" }, [TILE_SERVER_WK_KEY.name]: { map_style_url: "maps.com" },
}), }),
...mockClientMethodsCrypto(),
}); });
const defaultRooms = ["a", "A", "b"].map((name) => mkStubRoom(name, name, mockClient)); const defaultRooms = ["a", "A", "b"].map((name) => mkStubRoom(name, name, mockClient));

View File

@ -243,6 +243,7 @@ describe("EventTile", () => {
const mockCrypto = { const mockCrypto = {
// a mocked version of getEncryptionInfoForEvent which will pick its result from `eventToEncryptionInfoMap` // a mocked version of getEncryptionInfoForEvent which will pick its result from `eventToEncryptionInfoMap`
getEncryptionInfoForEvent: async (event: MatrixEvent) => eventToEncryptionInfoMap.get(event.getId()!)!, getEncryptionInfoForEvent: async (event: MatrixEvent) => eventToEncryptionInfoMap.get(event.getId()!)!,
isEncryptionEnabledInRoom: jest.fn().mockResolvedValue(false),
} as unknown as CryptoApi; } as unknown as CryptoApi;
client.getCrypto = () => mockCrypto; client.getCrypto = () => mockCrypto;
}); });
@ -434,7 +435,7 @@ describe("EventTile", () => {
}); });
it("should update the warning when the event is replaced with an unencrypted one", async () => { it("should update the warning when the event is replaced with an unencrypted one", async () => {
jest.spyOn(client, "isRoomEncrypted").mockReturnValue(true); jest.spyOn(client.getCrypto()!, "isEncryptionEnabledInRoom").mockResolvedValue(true);
// we start out with an event from the trusted device // we start out with an event from the trusted device
mxEvent = await mkEncryptedMatrixEvent({ mxEvent = await mkEncryptedMatrixEvent({