@@ -27,7 +27,8 @@ use ruma::{
27
27
power_levels:: RoomPowerLevels ,
28
28
} ,
29
29
sticker:: StickerEventContent ,
30
- AnyMessageLikeEventContent , AnySyncStateEvent , AnySyncTimelineEvent , SyncStateEvent ,
30
+ AnyMessageLikeEventContent , AnySyncMessageLikeEvent , AnySyncStateEvent ,
31
+ AnySyncTimelineEvent , SyncStateEvent ,
31
32
} ,
32
33
EventId , OwnedEventId , OwnedRoomId , OwnedTransactionId , RoomId , TransactionId , UserId ,
33
34
} ;
@@ -517,7 +518,10 @@ pub enum LatestEventKind {
517
518
518
519
/// A `m.room.member` event, more precisely a knock membership change that
519
520
/// can be handled by the current user.
520
- KnockedStateEvent ( Option < RoomMemberEventContent > ) ,
521
+ KnockedStateEvent ( RoomMemberEventContent ) ,
522
+
523
+ /// A redacted event.
524
+ Redacted ( AnySyncMessageLikeEvent ) ,
521
525
}
522
526
523
527
fn find_and_map_timeline_event (
@@ -540,13 +544,13 @@ fn find_and_map_timeline_event(
540
544
}
541
545
542
546
// The event has been redacted.
543
- None => todo ! ( "what to do with a redacted message-like event?" ) ,
547
+ None => Some ( LatestEventKind :: Redacted ( message_like_event ) ) ,
544
548
}
545
549
}
546
550
547
551
// We don't currently support most state events…
548
552
AnySyncTimelineEvent :: State ( state) => {
549
- // … but we make an exception for knocked state events *if* the current user
553
+ // … but we make an exception for knocked state events _if_ the current user
550
554
// can either accept or decline them.
551
555
if let AnySyncStateEvent :: RoomMember ( member) = state {
552
556
if matches ! ( member. membership( ) , MembershipState :: Knock ) {
@@ -562,8 +566,12 @@ fn find_and_map_timeline_event(
562
566
// displayed
563
567
if can_accept_or_decline_knocks {
564
568
return Some ( LatestEventKind :: KnockedStateEvent ( match member {
565
- SyncStateEvent :: Original ( member) => Some ( member. content ) ,
566
- SyncStateEvent :: Redacted ( _) => None ,
569
+ SyncStateEvent :: Original ( member) => member. content ,
570
+ SyncStateEvent :: Redacted ( _) => {
571
+ // Cannot decide if the user can accept or decline knocks because
572
+ // the event has been redacted.
573
+ return None ;
574
+ }
567
575
} ) ) ;
568
576
}
569
577
}
@@ -650,8 +658,7 @@ mod tests_latest_event_kind {
650
658
}
651
659
652
660
#[ test]
653
- #[ ignore]
654
- fn test_room_message_redacted ( ) {
661
+ fn test_redacted ( ) {
655
662
assert_latest_event_kind ! (
656
663
with |event_factory| {
657
664
event_factory
@@ -661,7 +668,7 @@ mod tests_latest_event_kind {
661
668
)
662
669
. into_event( )
663
670
}
664
- it produces Some ( LatestEventKind :: RoomMessage ( _) )
671
+ it produces Some ( LatestEventKind :: Redacted ( _) )
665
672
) ;
666
673
}
667
674
0 commit comments