Replace MatrixClient.isRoomEncrypted
by MatrixClient.CryptoApi.isEncryptionEnabledInRoom
in EventTile.tsx
This commit is contained in:
parent
b907ec380f
commit
dc53178ea6
4 changed files with 60 additions and 4 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue