Skip to content

Commit 63ae70c

Browse files
committed
feat(sdk): Introduce LatestEventKind::Redacted.
This patch introduces `LatestEventKind::Redacted` to handle the case where an event is supposed to be a latest event but has been redacted.
1 parent 2d3d483 commit 63ae70c

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

crates/matrix-sdk/src/latest_events/latest_event.rs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ use ruma::{
2727
power_levels::RoomPowerLevels,
2828
},
2929
sticker::StickerEventContent,
30-
AnyMessageLikeEventContent, AnySyncStateEvent, AnySyncTimelineEvent, SyncStateEvent,
30+
AnyMessageLikeEventContent, AnySyncMessageLikeEvent, AnySyncStateEvent,
31+
AnySyncTimelineEvent, SyncStateEvent,
3132
},
3233
EventId, OwnedEventId, OwnedRoomId, OwnedTransactionId, RoomId, TransactionId, UserId,
3334
};
@@ -517,7 +518,10 @@ pub enum LatestEventKind {
517518

518519
/// A `m.room.member` event, more precisely a knock membership change that
519520
/// can be handled by the current user.
520-
KnockedStateEvent(Option<RoomMemberEventContent>),
521+
KnockedStateEvent(RoomMemberEventContent),
522+
523+
/// A redacted event.
524+
Redacted(AnySyncMessageLikeEvent),
521525
}
522526

523527
fn find_and_map_timeline_event(
@@ -540,13 +544,13 @@ fn find_and_map_timeline_event(
540544
}
541545

542546
// 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)),
544548
}
545549
}
546550

547551
// We don't currently support most state events…
548552
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
550554
// can either accept or decline them.
551555
if let AnySyncStateEvent::RoomMember(member) = state {
552556
if matches!(member.membership(), MembershipState::Knock) {
@@ -562,8 +566,12 @@ fn find_and_map_timeline_event(
562566
// displayed
563567
if can_accept_or_decline_knocks {
564568
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+
}
567575
}));
568576
}
569577
}
@@ -650,8 +658,7 @@ mod tests_latest_event_kind {
650658
}
651659

652660
#[test]
653-
#[ignore]
654-
fn test_room_message_redacted() {
661+
fn test_redacted() {
655662
assert_latest_event_kind!(
656663
with |event_factory| {
657664
event_factory
@@ -661,7 +668,7 @@ mod tests_latest_event_kind {
661668
)
662669
.into_event()
663670
}
664-
it produces Some(LatestEventKind::RoomMessage(_))
671+
it produces Some(LatestEventKind::Redacted(_))
665672
);
666673
}
667674

0 commit comments

Comments
 (0)