From 5bc20669c253808567401e40bfd8effd0a1310f7 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Tue, 18 Apr 2023 12:07:31 +0200 Subject: [PATCH] sdk: Implement MSC3925 for the timeline https://github.com/matrix-org/matrix-spec-proposals/blob/main/proposals/3925-replace-aggregation-with-full-event.md Implemented in Synapse 1.79.0: https://github.com/matrix-org/synapse/releases/tag/v1.79.0 --- .../matrix-sdk/src/room/timeline/event_handler.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/crates/matrix-sdk/src/room/timeline/event_handler.rs b/crates/matrix-sdk/src/room/timeline/event_handler.rs index fe7d304fc..c09e23234 100644 --- a/crates/matrix-sdk/src/room/timeline/event_handler.rs +++ b/crates/matrix-sdk/src/room/timeline/event_handler.rs @@ -26,7 +26,7 @@ use ruma::{ room::{ encrypted::RoomEncryptedEventContent, member::{Change, RoomMemberEventContent}, - message::{self, MessageType, RoomMessageEventContent}, + message::{self, MessageType, RoomMessageEventContent, SyncRoomMessageEvent}, redaction::{ OriginalSyncRoomRedactionEvent, RoomRedactionEventContent, SyncRoomRedactionEvent, }, @@ -940,9 +940,18 @@ impl NewEventTimelineItem { c: RoomMessageEventContent, relations: BundledMessageLikeRelations, ) -> Self { - let edited = relations.replace.is_some(); + let edited = relations.has_replacement(); + let edit = relations.replace.and_then(|r| match *r { + AnySyncMessageLikeEvent::RoomMessage(SyncRoomMessageEvent::Original(ev)) => Some(ev), + AnySyncMessageLikeEvent::RoomMessage(SyncRoomMessageEvent::Redacted(_)) => None, + _ => { + error!("got m.room.message event with an edit of a different event type"); + None + } + }); + let content = TimelineItemContent::Message(Message { - msgtype: c.msgtype, + msgtype: edit.map_or(c.msgtype, |e| e.content.msgtype), in_reply_to: c.relates_to.and_then(InReplyToDetails::from_relation), edited, });