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

This commit is contained in:
Florian Duros 2024-11-21 10:31:55 +01:00
parent b907ec380f
commit dc53178ea6
No known key found for this signature in database
GPG key ID: A5BBB4041B493F15
4 changed files with 60 additions and 4 deletions

View file

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