[fractal] Send typing notifications



commit 0e55e01e404246e738079b88e0e5c1fa6f74eb7d
Author: Daniel GarcĂ­a Moreno <dani danigm net>
Date:   Wed Jun 26 20:27:45 2019 +0200

    Send typing notifications

 fractal-gtk/src/app/connect/send.rs     |  6 ++++++
 fractal-gtk/src/appop/room.rs           |  8 ++++++++
 fractal-matrix-api/src/backend/mod.rs   |  4 ++++
 fractal-matrix-api/src/backend/room.rs  | 17 +++++++++++++++++
 fractal-matrix-api/src/backend/types.rs |  2 ++
 5 files changed, 37 insertions(+)
---
diff --git a/fractal-gtk/src/app/connect/send.rs b/fractal-gtk/src/app/connect/send.rs
index 29ebc7db..c13fb5bf 100644
--- a/fractal-gtk/src/app/connect/send.rs
+++ b/fractal-gtk/src/app/connect/send.rs
@@ -55,6 +55,12 @@ impl App {
             _ => Inhibit(false),
         });
 
+        op = self.op.clone();
+        msg_entry.connect_key_release_event(move |_, _| {
+            op.lock().unwrap().send_typing();
+            Inhibit(false)
+        });
+
         op = self.op.clone();
         msg_entry.connect_paste_clipboard(move |_| {
             attach::paste(op.clone());
diff --git a/fractal-gtk/src/appop/room.rs b/fractal-gtk/src/appop/room.rs
index 3666ac7d..d0cd2ac1 100644
--- a/fractal-gtk/src/appop/room.rs
+++ b/fractal-gtk/src/appop/room.rs
@@ -594,4 +594,12 @@ impl AppOp {
             }
         }
     }
+
+    pub fn send_typing(&self) {
+        if let Some(ref active_room) = self.active_room {
+            self.backend
+                .send(BKCommand::SendTyping(active_room.clone()))
+                .unwrap();
+        }
+    }
 }
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index 0e1c7a4f..78137ae7 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -207,6 +207,10 @@ impl Backend {
                 let r = room::redact_msg(self, &msg);
                 bkerror!(r, tx, BKResponse::SendMsgRedactionError);
             }
+            Ok(BKCommand::SendTyping(room)) => {
+                let r = room::send_typing(self, room);
+                bkerror!(r, tx, BKResponse::SendTypingError);
+            }
             Ok(BKCommand::SetRoom(id)) => {
                 let r = room::set_room(self, id);
                 bkerror!(r, tx, BKResponse::SetRoomError);
diff --git a/fractal-matrix-api/src/backend/room.rs b/fractal-matrix-api/src/backend/room.rs
index 8724ddd2..8983dac6 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -280,6 +280,23 @@ pub fn send_msg(bk: &Backend, msg: Message) -> Result<(), Error> {
     Ok(())
 }
 
+pub fn send_typing(bk: &Backend, roomid: String) -> Result<(), Error> {
+    let userid = bk.data.lock().unwrap().user_id.clone();
+    let url = bk.url(&format!("rooms/{}/typing/{}", roomid, userid), vec![])?;
+
+    let attrs = json!({
+        "timeout": 1000,
+        "typing": true
+    });
+
+    let tx = bk.tx.clone();
+    query!("put", &url, &attrs, move |_| {}, |err| {
+        tx.send(BKResponse::SendTypingError(err)).unwrap();
+    });
+
+    Ok(())
+}
+
 pub fn redact_msg(bk: &Backend, msg: &Message) -> Result<(), Error> {
     let roomid = msg.room.clone();
     let txnid = msg.id.clone();
diff --git a/fractal-matrix-api/src/backend/types.rs b/fractal-matrix-api/src/backend/types.rs
index f9cda612..76855c36 100644
--- a/fractal-matrix-api/src/backend/types.rs
+++ b/fractal-matrix-api/src/backend/types.rs
@@ -61,6 +61,7 @@ pub enum BKCommand {
     GetUserNameAsync(String, Sender<String>),
     SendMsg(Message),
     SendMsgRedaction(Message),
+    SendTyping(String),
     SetRoom(String),
     ShutDown,
     DirectoryProtocols,
@@ -158,6 +159,7 @@ pub enum BKResponse {
     RoomMembersError(Error),
     SendMsgError(Error),
     SendMsgRedactionError(Error),
+    SendTypingError(Error),
     SetRoomError(Error),
     CommandError(Error),
     DirectoryError(Error),


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