[fractal] Send typing notifications
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] Send typing notifications
- Date: Tue, 2 Jul 2019 06:08:28 +0000 (UTC)
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]