@@ -1021,6 +1021,9 @@ pub struct EventTimelineItem {
10211021 is_own : bool ,
10221022 is_editable : bool ,
10231023 content : TimelineItemContent ,
1024+ /// The raw Matrix event type string (e.g. `"m.room.message"`), or `None`
1025+ /// when the original type is not available (e.g. redacted events).
1026+ event_type_raw : Option < String > ,
10241027 timestamp : Timestamp ,
10251028 local_send_state : Option < EventSendState > ,
10261029 local_created_at : Option < u64 > ,
@@ -1046,6 +1049,7 @@ impl From<matrix_sdk_ui::timeline::EventTimelineItem> for EventTimelineItem {
10461049 is_own : item. is_own ( ) ,
10471050 is_editable : item. is_editable ( ) ,
10481051 content : item. content ( ) . clone ( ) . into ( ) ,
1052+ event_type_raw : item. content ( ) . event_type_str ( ) ,
10491053 timestamp : item. timestamp ( ) . into ( ) ,
10501054 local_send_state : item. send_state ( ) . map ( |s| s. into ( ) ) ,
10511055 local_created_at : item. local_created_at ( ) . map ( |t| t. 0 . into ( ) ) ,
@@ -1323,6 +1327,16 @@ impl LazyTimelineItemProvider {
13231327 fn contains_only_emojis ( & self ) -> bool {
13241328 self . 0 . contains_only_emojis ( )
13251329 }
1330+
1331+ /// Returns the JSON string of the event's `content` field from the latest
1332+ /// version (including edits). Returns `None` for local echoes that haven't
1333+ /// been echoed back by the server yet.
1334+ fn latest_content_raw ( & self ) -> Option < String > {
1335+ let raw = self . 0 . latest_json ( ) ?;
1336+ let value: serde_json:: Value = serde_json:: from_str ( raw. json ( ) . get ( ) ) . ok ( ) ?;
1337+ let content = value. get ( "content" ) ?;
1338+ serde_json:: to_string ( content) . ok ( )
1339+ }
13261340}
13271341
13281342/// Mimic the [`UiLatestEventValue`] type.
0 commit comments