[fractal] API, room: use endpoint in set_room_name



commit d69e7b409a9d014aec9d6257bb9e7fd6ede740dc
Author: Alejandro Domínguez <adomu net-c com>
Date:   Mon Mar 9 12:22:05 2020 +0100

    API, room: use endpoint in set_room_name

 fractal-matrix-api/src/backend/mod.rs              |  7 ++--
 fractal-matrix-api/src/backend/room.rs             | 42 ++++++++--------------
 fractal-matrix-api/src/r0/state.rs                 |  1 +
 .../src/r0/state/create_state_events_for_key.rs    | 31 ++++++++++++++++
 4 files changed, 51 insertions(+), 30 deletions(-)
---
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index d2ab6090..45d1e091 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -306,8 +306,11 @@ impl Backend {
                 });
             }
             Ok(BKCommand::SetRoomName(server, access_token, room_id, name)) => {
-                let r = room::set_room_name(self, server, access_token, room_id, name);
-                bkerror2!(r, tx, BKResponse::SetRoomName);
+                thread::spawn(move || {
+                    let query = room::set_room_name(server, access_token, room_id, name);
+                    tx.send(BKResponse::SetRoomName(query))
+                        .expect_log("Connection closed");
+                });
             }
             Ok(BKCommand::SetRoomTopic(server, access_token, room_id, topic)) => {
                 let r = room::set_room_topic(self, server, access_token, room_id, topic);
diff --git a/fractal-matrix-api/src/backend/room.rs b/fractal-matrix-api/src/backend/room.rs
index 498cc869..3e2e2a58 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -56,6 +56,8 @@ 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::create_state_events_for_key::request as create_state_events_for_key;
+use crate::r0::state::create_state_events_for_key::Parameters as CreateStateEventsForKeyParameters;
 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;
@@ -397,12 +399,10 @@ pub fn join_room(bk: &Backend, base: Url, access_token: AccessToken, room_id: Ro
         let query = join_room_req(base, &room_id_or_alias_id, &params)
             .map_err(Into::into)
             .and_then(|request| {
-                HTTP_CLIENT
-                    .get_client()?
-                    .execute(request)
-                    .map_err(Into::into)
-            })
-            .and(Ok(()));
+                let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+
+                Ok(())
+            });
 
         if let Ok(_) = query {
             data.lock().unwrap().join_to_room = Some(room_id);
@@ -448,38 +448,24 @@ pub fn mark_as_read(
 }
 
 pub fn set_room_name(
-    bk: &Backend,
     base: Url,
     access_token: AccessToken,
     room_id: RoomId,
     name: String,
 ) -> Result<(), Error> {
-    let url = bk.url(
-        base,
-        &access_token,
-        &format!("rooms/{}/state/m.room.name", room_id),
-        vec![],
-    )?;
+    let params = CreateStateEventsForKeyParameters { access_token };
 
-    let attrs = json!({
+    let body = json!({
         "name": name,
     });
 
-    let tx = bk.tx.clone();
-    put!(
-        url,
-        &attrs,
-        |_| {
-            tx.send(BKResponse::SetRoomName(Ok(())))
-                .expect_log("Connection closed");
-        },
-        |err| {
-            tx.send(BKResponse::SetRoomName(Err(err)))
-                .expect_log("Connection closed");
-        }
-    );
+    create_state_events_for_key(base, &params, &body, &room_id, "m.room.name")
+        .map_err(Into::into)
+        .and_then(|request| {
+            let _ = HTTP_CLIENT.get_client()?.execute(request)?;
 
-    Ok(())
+            Ok(())
+        })
 }
 
 pub fn set_room_topic(
diff --git a/fractal-matrix-api/src/r0/state.rs b/fractal-matrix-api/src/r0/state.rs
index f46cf908..6904b95f 100644
--- a/fractal-matrix-api/src/r0/state.rs
+++ b/fractal-matrix-api/src/r0/state.rs
@@ -1 +1,2 @@
+pub mod create_state_events_for_key;
 pub mod get_state_events_for_key;
diff --git a/fractal-matrix-api/src/r0/state/create_state_events_for_key.rs 
b/fractal-matrix-api/src/r0/state/create_state_events_for_key.rs
new file mode 100644
index 00000000..37586882
--- /dev/null
+++ b/fractal-matrix-api/src/r0/state/create_state_events_for_key.rs
@@ -0,0 +1,31 @@
+use crate::r0::AccessToken;
+use reqwest::blocking::Client;
+use reqwest::blocking::Request;
+use reqwest::Error;
+use ruma_identifiers::RoomId;
+use serde::Serialize;
+use serde_json::Value as JsonValue;
+use url::Url;
+
+#[derive(Clone, Debug, Serialize)]
+pub struct Parameters {
+    pub access_token: AccessToken,
+}
+
+pub fn request(
+    base: Url,
+    params: &Parameters,
+    body: &JsonValue,
+    room_id: &RoomId,
+    // event_type: &EventType,  TODO: Use this parameter
+    state_keys: &str,
+) -> Result<Request, Error> {
+    let url = base
+        .join(&format!(
+            "/_matrix/client/r0/rooms/{}/state/{}/",
+            room_id, state_keys,
+        ))
+        .expect("Malformed URL in get_state_events_for_key");
+
+    Client::new().put(url).query(params).json(body).build()
+}


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