[fractal] API, room: use endpoint in redact_msg



commit 760d75d7f78e036f88d35e629a778dcfcc21536d
Author: Alejandro Domínguez <adomu net-c com>
Date:   Fri Mar 6 01:04:52 2020 +0100

    API, room: use endpoint in redact_msg

 fractal-matrix-api/src/backend/mod.rs              |  7 ++-
 fractal-matrix-api/src/backend/room.rs             | 55 +++++++++-------------
 fractal-matrix-api/src/r0.rs                       |  1 +
 .../src/r0/message/create_message_event.rs         |  4 +-
 .../src/r0/message/get_message_events.rs           |  2 +-
 fractal-matrix-api/src/r0/redact.rs                |  1 +
 fractal-matrix-api/src/r0/redact/redact_event.rs   | 41 ++++++++++++++++
 7 files changed, 74 insertions(+), 37 deletions(-)
---
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index 77c431c7..d4428940 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -263,8 +263,11 @@ impl Backend {
                 });
             }
             Ok(BKCommand::SendMsgRedaction(server, access_token, msg)) => {
-                let r = room::redact_msg(self, server, access_token, &msg);
-                bkerror2!(r, tx, BKResponse::SentMsgRedaction);
+                thread::spawn(move || {
+                    let query = room::redact_msg(server, access_token, msg);
+                    tx.send(BKResponse::SentMsgRedaction(query))
+                        .expect_log("Connection closed");
+                });
             }
             Ok(BKCommand::SendTyping(server, access_token, uid, room_id)) => {
                 thread::spawn(move || {
diff --git a/fractal-matrix-api/src/backend/room.rs b/fractal-matrix-api/src/backend/room.rs
index 23713b64..23eec315 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -49,6 +49,10 @@ use crate::r0::message::get_message_events::request as get_messages_events;
 use crate::r0::message::get_message_events::Direction as GetMessagesEventsDirection;
 use crate::r0::message::get_message_events::Parameters as GetMessagesEventsParams;
 use crate::r0::message::get_message_events::Response as GetMessagesEventsResponse;
+use crate::r0::redact::redact_event::request as redact_event;
+use crate::r0::redact::redact_event::Body as RedactEventBody;
+use crate::r0::redact::redact_event::Parameters as RedactEventParameters;
+use crate::r0::redact::redact_event::Response as RedactEventResponse;
 use crate::r0::state::get_state_events_for_key::request as get_state_events_for_key;
 use crate::r0::state::get_state_events_for_key::Parameters as GetStateEventsForKeyParameters;
 use crate::r0::sync::get_joined_members::request as get_joined_members;
@@ -348,44 +352,31 @@ pub fn send_typing(
 }
 
 pub fn redact_msg(
-    bk: &Backend,
     base: Url,
     access_token: AccessToken,
-    msg: &Message,
-) -> Result<(), Error> {
-    let room_id: RoomId = msg.room.clone();
-    let txnid = msg.id.clone();
+    msg: Message,
+) -> Result<(String, String), Error> {
+    let room_id = msg.room.clone();
+    let txn_id = msg.id.clone();
 
-    let url = bk.url(
-        base,
-        &access_token,
-        &format!("rooms/{}/redact/{}/{}", room_id, msg.id, txnid),
-        vec![],
-    )?;
+    let params = RedactEventParameters { access_token };
 
-    let attrs = json!({
-        "reason": "Deletion requested by the sender"
-    });
+    let body = RedactEventBody {
+        reason: "Deletion requested by the sender".into(),
+    };
 
-    let msgid = msg.id.clone();
-    let tx = bk.tx.clone();
-    put!(
-        url,
-        &attrs,
-        move |js: JsonValue| {
-            let evid = js["event_id"].as_str().unwrap_or_default();
-            tx.send(BKResponse::SentMsgRedaction(Ok((msgid, evid.to_string()))))
-                .expect_log("Connection closed");
-        },
-        |_| {
-            tx.send(BKResponse::SentMsgRedaction(Err(
-                Error::SendMsgRedactionError(msgid),
-            )))
-            .expect_log("Connection closed");
-        }
-    );
+    redact_event(base, &params, &body, &room_id, &msg.id, &txn_id)
+        .map_err::<Error, _>(Into::into)
+        .and_then(|request| {
+            let response = HTTP_CLIENT
+                .get_client()?
+                .execute(request)?
+                .json::<RedactEventResponse>()?;
 
-    Ok(())
+            let evid = response.event_id.unwrap_or_default();
+            Ok((msg.id.clone(), evid))
+        })
+        .or(Err(Error::SendMsgRedactionError(msg.id)))
 }
 
 pub fn join_room(bk: &Backend, base: Url, access_token: AccessToken, room_id: RoomId) {
diff --git a/fractal-matrix-api/src/r0.rs b/fractal-matrix-api/src/r0.rs
index 8f6bc0fd..fe9ca986 100644
--- a/fractal-matrix-api/src/r0.rs
+++ b/fractal-matrix-api/src/r0.rs
@@ -7,6 +7,7 @@ pub mod media;
 pub mod membership;
 pub mod message;
 pub mod profile;
+pub mod redact;
 pub mod search;
 pub mod server;
 pub mod state;
diff --git a/fractal-matrix-api/src/r0/message/create_message_event.rs 
b/fractal-matrix-api/src/r0/message/create_message_event.rs
index 46d5fe86..b1c37f6c 100644
--- a/fractal-matrix-api/src/r0/message/create_message_event.rs
+++ b/fractal-matrix-api/src/r0/message/create_message_event.rs
@@ -22,7 +22,7 @@ pub fn request(
     params: &Parameters,
     body: &JsonValue,
     room_id: &RoomId,
-    event_type: &str,
+    event_type: &str, // TODO: Use EventType
     txn_id: &str,
 ) -> Result<Request, Error> {
     let url = base
@@ -30,7 +30,7 @@ pub fn request(
             "/_matrix/client/r0/rooms/{}/send/{}/{}",
             room_id, event_type, txn_id,
         ))
-        .expect("Malformed URL in user_directory");
+        .expect("Malformed URL in create_message_event");
 
     Client::new().put(url).query(params).json(body).build()
 }
diff --git a/fractal-matrix-api/src/r0/message/get_message_events.rs 
b/fractal-matrix-api/src/r0/message/get_message_events.rs
index 7eb194da..6cd7994f 100644
--- a/fractal-matrix-api/src/r0/message/get_message_events.rs
+++ b/fractal-matrix-api/src/r0/message/get_message_events.rs
@@ -45,7 +45,7 @@ pub struct Response {
 pub fn request(base: Url, params: &Parameters, room_id: &RoomId) -> Result<Request, Error> {
     let url = base
         .join(&format!("/_matrix/client/r0/rooms/{}/messages", room_id))
-        .expect("Malformed URL in user_directory");
+        .expect("Malformed URL in get_message_events");
 
     Client::new().get(url).query(params).build()
 }
diff --git a/fractal-matrix-api/src/r0/redact.rs b/fractal-matrix-api/src/r0/redact.rs
new file mode 100644
index 00000000..af32a635
--- /dev/null
+++ b/fractal-matrix-api/src/r0/redact.rs
@@ -0,0 +1 @@
+pub mod redact_event;
diff --git a/fractal-matrix-api/src/r0/redact/redact_event.rs 
b/fractal-matrix-api/src/r0/redact/redact_event.rs
new file mode 100644
index 00000000..d193ce5f
--- /dev/null
+++ b/fractal-matrix-api/src/r0/redact/redact_event.rs
@@ -0,0 +1,41 @@
+use crate::r0::AccessToken;
+use reqwest::blocking::Client;
+use reqwest::blocking::Request;
+use reqwest::Error;
+use ruma_identifiers::RoomId;
+use serde::{Deserialize, Serialize};
+use url::Url;
+
+#[derive(Clone, Debug, Serialize)]
+pub struct Parameters {
+    pub access_token: AccessToken,
+}
+
+#[derive(Clone, Debug, Serialize)]
+pub struct Body {
+    #[serde(skip_serializing_if = "String::is_empty")]
+    pub reason: String,
+}
+
+#[derive(Clone, Debug, Deserialize)]
+pub struct Response {
+    pub event_id: Option<String>,
+}
+
+pub fn request(
+    base: Url,
+    params: &Parameters,
+    body: &Body,
+    room_id: &RoomId,
+    event_type: &str, // TODO: Use EventType
+    txn_id: &str,
+) -> Result<Request, Error> {
+    let url = base
+        .join(&format!(
+            "/_matrix/client/r0/rooms/{}/redact/{}/{}",
+            room_id, event_type, txn_id,
+        ))
+        .expect("Malformed URL in redact_event");
+
+    Client::new().put(url).query(params).json(body).build()
+}


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