[fractal/fractal-next] session: Use whole event for local echo



commit e0d235ef04c0433e52017d834e42e47a95661cb3
Author: Kévin Commaille <zecakeh tedomum fr>
Date:   Tue Mar 15 20:30:53 2022 +0100

    session: Use whole event for local echo
    
    Fixes #953

 src/session/content/room_history/mod.rs |  2 +-
 src/session/room/mod.rs                 | 53 ++++++++++++---------------------
 2 files changed, 20 insertions(+), 35 deletions(-)
---
diff --git a/src/session/content/room_history/mod.rs b/src/session/content/room_history/mod.rs
index ef71a9c0d..f738475ad 100644
--- a/src/session/content/room_history/mod.rs
+++ b/src/session/content/room_history/mod.rs
@@ -477,7 +477,7 @@ impl RoomHistory {
             })
         });
 
-        self.room().unwrap().send_message(content);
+        self.room().unwrap().send_room_message_event(content);
         buffer.set_text("");
     }
 
diff --git a/src/session/room/mod.rs b/src/session/room/mod.rs
index 82b57780a..5e65acbff 100644
--- a/src/session/room/mod.rs
+++ b/src/session/room/mod.rs
@@ -22,20 +22,18 @@ use matrix_sdk::{
     ruma::{
         api::client::sync::sync_events::v3::InvitedRoom,
         events::{
-            reaction::{Relation, SyncReactionEvent},
+            reaction::{ReactionEventContent, Relation},
             room::{
                 member::MembershipState,
-                message::RoomMessageEventContent,
                 name::RoomNameEventContent,
                 redaction::{RoomRedactionEventContent, SyncRoomRedactionEvent},
                 topic::RoomTopicEventContent,
             },
             tag::{TagInfo, TagName},
-            AnyRoomAccountDataEvent, AnyStateEventContent, AnyStrippedStateEvent,
-            AnySyncMessageEvent, AnySyncRoomEvent, AnySyncStateEvent, StateEventType,
-            SyncMessageEvent, Unsigned,
+            AnyRoomAccountDataEvent, AnyStateEventContent, AnyStrippedStateEvent, AnySyncRoomEvent,
+            AnySyncStateEvent, MessageEventContent, StateEventType, SyncMessageEvent, Unsigned,
         },
-        identifiers::{EventId, RoomId, TransactionId, UserId},
+        identifiers::{EventId, RoomId, UserId},
         serde::Raw,
         MilliSecondsSinceUnixEpoch,
     },
@@ -908,11 +906,19 @@ impl Room {
         );
     }
 
-    /// Send the given `event` in this room, with the temporary ID `txn_id`.
-    fn send_room_message_event(&self, event: AnySyncMessageEvent, txn_id: Box<TransactionId>) {
+    /// Send a message with the given `content` in this room.
+    pub fn send_room_message_event(&self, content: impl MessageEventContent + Send + 'static) {
         if let MatrixRoom::Joined(matrix_room) = self.matrix_room() {
-            let content = event.content();
-            let raw_event: Raw<AnySyncRoomEvent> = Raw::new(&content).unwrap().cast();
+            let (txn_id, event_id) = pending_event_ids();
+            let matrix_event = SyncMessageEvent {
+                content,
+                event_id,
+                sender: self.session().user().unwrap().user_id().as_ref().to_owned(),
+                origin_server_ts: MilliSecondsSinceUnixEpoch::now(),
+                unsigned: Unsigned::default(),
+            };
+
+            let raw_event: Raw<AnySyncRoomEvent> = Raw::new(&matrix_event).unwrap().cast();
             let event = Event::new(raw_event.into(), self);
             self.imp()
                 .timeline
@@ -920,6 +926,8 @@ impl Room {
                 .unwrap()
                 .append_pending(&txn_id, event);
 
+            let content = matrix_event.content;
+
             let handle =
                 spawn_tokio!(async move { matrix_room.send(content, Some(&txn_id)).await });
 
@@ -936,32 +944,9 @@ impl Room {
         }
     }
 
-    /// Send a message with the given `content` in this room.
-    pub fn send_message(&self, content: RoomMessageEventContent) {
-        let (txn_id, event_id) = pending_event_ids();
-        let event = AnySyncMessageEvent::RoomMessage(SyncMessageEvent {
-            content,
-            event_id,
-            sender: self.session().user().unwrap().user_id().as_ref().to_owned(),
-            origin_server_ts: MilliSecondsSinceUnixEpoch::now(),
-            unsigned: Unsigned::default(),
-        });
-
-        self.send_room_message_event(event, txn_id);
-    }
-
     /// Send a `key` reaction for the `relates_to` event ID in this room.
     pub fn send_reaction(&self, key: String, relates_to: Box<EventId>) {
-        let (txn_id, event_id) = pending_event_ids();
-        let event = AnySyncMessageEvent::Reaction(SyncReactionEvent {
-            content: Relation::new(relates_to, key).into(),
-            event_id,
-            sender: self.session().user().unwrap().user_id().as_ref().to_owned(),
-            origin_server_ts: MilliSecondsSinceUnixEpoch::now(),
-            unsigned: Unsigned::default(),
-        });
-
-        self.send_room_message_event(event, txn_id);
+        self.send_room_message_event(ReactionEventContent::new(Relation::new(relates_to, key)));
     }
 
     /// Redact `redacted_event_id` in this room because of `reason`.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]