@@ -11,6 +11,7 @@ import React, { createRef, forwardRef, JSX, MouseEvent, ReactNode } from "react"
11
11
import classNames from "classnames" ;
12
12
import {
13
13
EventStatus ,
14
+ EventTimeline ,
14
15
EventType ,
15
16
MatrixEvent ,
16
17
MatrixEventEvent ,
@@ -21,6 +22,7 @@ import {
21
22
Room ,
22
23
RoomEvent ,
23
24
RoomMember ,
25
+ RoomStateEvent ,
24
26
Thread ,
25
27
ThreadEvent ,
26
28
} from "matrix-js-sdk/src/matrix" ;
@@ -262,6 +264,10 @@ interface IState {
262
264
263
265
thread : Thread | null ;
264
266
threadNotification ?: NotificationCountType ;
267
+ /**
268
+ * Whether the event is encrypted.
269
+ */
270
+ isRoomEncrypted : boolean ;
265
271
}
266
272
267
273
/**
@@ -318,6 +324,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
318
324
hover : false ,
319
325
320
326
thread,
327
+ isRoomEncrypted : false ,
321
328
} ;
322
329
323
330
// don't do RR animations until we are mounted
@@ -386,7 +393,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
386
393
return true ;
387
394
}
388
395
389
- public componentDidMount ( ) : void {
396
+ public async componentDidMount ( ) : Promise < void > {
390
397
this . unmounted = false ;
391
398
this . suppressReadReceiptAnimation = false ;
392
399
const client = MatrixClientPeg . safeGet ( ) ;
@@ -413,6 +420,12 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
413
420
room ?. on ( ThreadEvent . New , this . onNewThread ) ;
414
421
415
422
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 ) } ) ;
416
429
}
417
430
418
431
private updateThread = ( thread : Thread ) : void => {
@@ -434,6 +447,10 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
434
447
client . removeListener ( RoomEvent . Receipt , this . onRoomReceipt ) ;
435
448
const room = client . getRoom ( this . props . mxEvent . getRoomId ( ) ) ;
436
449
room ?. off ( ThreadEvent . New , this . onNewThread ) ;
450
+ room
451
+ ?. getLiveTimeline ( )
452
+ . getState ( EventTimeline . FORWARDS )
453
+ ?. off ( RoomStateEvent . Events , this . onRoomStateEvents ) ;
437
454
}
438
455
this . isListeningForReceipts = false ;
439
456
this . props . mxEvent . removeListener ( MatrixEventEvent . Decrypted , this . onDecrypted ) ;
@@ -470,6 +487,17 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
470
487
}
471
488
} ;
472
489
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
+
473
501
private get thread ( ) : Thread | null {
474
502
let thread : Thread | undefined = this . props . mxEvent . getThread ( ) ;
475
503
/**
@@ -767,7 +795,8 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
767
795
}
768
796
}
769
797
770
- if ( MatrixClientPeg . safeGet ( ) . isRoomEncrypted ( ev . getRoomId ( ) ! ) ) {
798
+ console . log ( "this.state.isRoomEncrypted" , this . state . isRoomEncrypted ) ;
799
+ if ( this . state . isRoomEncrypted ) {
771
800
// else if room is encrypted
772
801
// and event is being encrypted or is not_sent (Unknown Devices/Network Error)
773
802
if ( ev . status === EventStatus . ENCRYPTING ) {
@@ -783,6 +812,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
783
812
return null ; // we expect this to be unencrypted
784
813
}
785
814
if ( ! ev . isEncrypted ( ) ) {
815
+ console . log ( "pad lock unencrypted" ) ;
786
816
// if the event is not encrypted, but it's an e2e room, show a warning
787
817
return < E2ePadlockUnencrypted /> ;
788
818
}
0 commit comments