@@ -60,8 +60,8 @@ use reply::Reply;
60
60
use ruma:: events:: room:: message:: GalleryItemType ;
61
61
#[ cfg( feature = "e2e-encryption" ) ]
62
62
use ruma:: events:: {
63
- room:: encrypted:: OriginalSyncRoomEncryptedEvent , AnySyncMessageLikeEvent , AnySyncTimelineEvent ,
64
- SyncMessageLikeEvent ,
63
+ room:: encrypted:: OriginalSyncRoomEncryptedEvent , AnySyncMessageLikeEvent , AnySyncStateEvent ,
64
+ AnySyncTimelineEvent , SyncMessageLikeEvent ,
65
65
} ;
66
66
use ruma:: {
67
67
api:: client:: {
@@ -637,11 +637,18 @@ impl Room {
637
637
event : Raw < AnyTimelineEvent > ,
638
638
push_ctx : Option < & PushContext > ,
639
639
) -> TimelineEvent {
640
+ // If we have either an encrypted message-like or state event, try to decrypt.
640
641
#[ cfg( feature = "e2e-encryption" ) ]
641
- if let Ok ( AnySyncTimelineEvent :: MessageLike ( AnySyncMessageLikeEvent :: RoomEncrypted (
642
- SyncMessageLikeEvent :: Original ( _) ,
643
- ) ) ) = event. deserialize_as :: < AnySyncTimelineEvent > ( )
644
- {
642
+ if matches ! (
643
+ event. deserialize_as:: <AnySyncTimelineEvent >( ) ,
644
+ Ok ( AnySyncTimelineEvent :: MessageLike ( AnySyncMessageLikeEvent :: RoomEncrypted (
645
+ SyncMessageLikeEvent :: Original ( _) ,
646
+ ) ) | AnySyncTimelineEvent :: State ( AnySyncStateEvent :: RoomEncrypted (
647
+ SyncStateEvent :: Original ( _)
648
+ ) ) )
649
+ ) {
650
+ // Cast safety: The state key is not used during decryption, and the types
651
+ // overlap sufficiently.
645
652
if let Ok ( event) = self . decrypt_event ( event. cast_ref_unchecked ( ) , push_ctx) . await {
646
653
return event;
647
654
}
0 commit comments