[fractal] API, room: use endpoint in redact_msg
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] API, room: use endpoint in redact_msg
- Date: Thu, 2 Apr 2020 10:38:55 +0000 (UTC)
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, ¶ms, &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]