Decrypt thread last reply on EventTile mount and update (#7930)

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Germain 2022-03-02 09:02:14 +00:00 committed by GitHub
parent cc389120c7
commit d50dae5208
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -514,6 +514,11 @@ export default class EventTile extends React.Component<IProps, IState> {
const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId()); const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId());
room?.on(ThreadEvent.New, this.onNewThread); room?.on(ThreadEvent.New, this.onNewThread);
if (this.state.threadLastReply?.isEncrypted()) {
this.state.threadLastReply.once(MatrixEventEvent.Decrypted, this.onEventDecryption);
MatrixClientPeg.get().decryptEventIfNeeded(this.state.threadLastReply);
}
} }
private setupNotificationListener = (thread: Thread): void => { private setupNotificationListener = (thread: Thread): void => {
@ -596,6 +601,7 @@ export default class EventTile extends React.Component<IProps, IState> {
if (this.threadState) { if (this.threadState) {
this.threadState.off(NotificationStateEvents.Update, this.onThreadStateUpdate); this.threadState.off(NotificationStateEvents.Update, this.onThreadStateUpdate);
} }
this.state.threadLastReply?.removeListener(MatrixEventEvent.Decrypted, this.onEventDecryption);
} }
componentDidUpdate(prevProps: IProps, prevState: IState, snapshot) { componentDidUpdate(prevProps: IProps, prevState: IState, snapshot) {
@ -604,8 +610,20 @@ export default class EventTile extends React.Component<IProps, IState> {
MatrixClientPeg.get().on(RoomEvent.Receipt, this.onRoomReceipt); MatrixClientPeg.get().on(RoomEvent.Receipt, this.onRoomReceipt);
this.isListeningForReceipts = true; this.isListeningForReceipts = true;
} }
if (this.state.threadLastReply !== prevState.threadLastReply) {
if (this.state.threadLastReply.isEncrypted()) {
this.state.threadLastReply.once(MatrixEventEvent.Decrypted, this.onEventDecryption);
MatrixClientPeg.get().decryptEventIfNeeded(this.state.threadLastReply);
}
prevState.threadLastReply?.removeListener(MatrixEventEvent.Decrypted, this.onEventDecryption);
}
} }
private onEventDecryption = () => {
this.forceUpdate();
};
private onNewThread = (thread: Thread) => { private onNewThread = (thread: Thread) => {
if (thread.id === this.props.mxEvent.getId()) { if (thread.id === this.props.mxEvent.getId()) {
this.updateThread(thread); this.updateThread(thread);