[fractal] API, room: use endpoint in set_language



commit 0b11686572d5720109649cd9780b7685921649bc
Author: Alejandro Domínguez <adomu net-c com>
Date:   Tue Mar 10 04:16:51 2020 +0100

    API, room: use endpoint in set_language

 fractal-matrix-api/src/backend/mod.rs              |  7 +++-
 fractal-matrix-api/src/backend/room.rs             | 49 ++++++++++++----------
 fractal-matrix-api/src/r0/config.rs                |  1 +
 .../src/r0/config/set_room_account_data.rs         | 31 ++++++++++++++
 4 files changed, 65 insertions(+), 23 deletions(-)
---
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index 213127e0..b3f8bc4f 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -373,8 +373,11 @@ impl Backend {
                 });
             }
             Ok(BKCommand::ChangeLanguage(access_token, server, uid, room_id, lang)) => {
-                let r = room::set_language(self, access_token, server, uid, room_id, lang);
-                bkerror2!(r, tx, BKResponse::ChangeLanguage);
+                thread::spawn(move || {
+                    let query = room::set_language(access_token, server, uid, room_id, lang);
+                    tx.send(BKResponse::ChangeLanguage(query))
+                        .expect_log("Connection closed");
+                });
             }
 
             // Media module
diff --git a/fractal-matrix-api/src/backend/room.rs b/fractal-matrix-api/src/backend/room.rs
index a429dd60..22c025a6 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -17,7 +17,6 @@ use std::thread;
 use crate::util::cache_dir_path;
 use crate::util::dw_media;
 use crate::util::get_prev_batch_from;
-use crate::util::json_q;
 use crate::util::ContentType;
 use crate::util::ResultExpectLog;
 use crate::util::HTTP_CLIENT;
@@ -32,6 +31,8 @@ use crate::r0::config::get_global_account_data::request as get_global_account_da
 use crate::r0::config::get_global_account_data::Parameters as GetGlobalAccountDataParameters;
 use crate::r0::config::set_global_account_data::request as set_global_account_data;
 use crate::r0::config::set_global_account_data::Parameters as SetGlobalAccountDataParameters;
+use crate::r0::config::set_room_account_data::request as set_room_account_data;
+use crate::r0::config::set_room_account_data::Parameters as SetRoomAccountDataParameters;
 use crate::r0::context::get_context::request as get_context;
 use crate::r0::context::get_context::Parameters as GetContextParameters;
 use crate::r0::context::get_context::Response as GetContextResponse;
@@ -798,39 +799,45 @@ pub fn invite(
     invite_user(base, &room_id, &params, &body)
         .map_err(Into::into)
         .and_then(|request| {
-            HTTP_CLIENT
-                .get_client()?
-                .execute(request)
-                .map_err(Into::into)
+            let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+
+            Ok(())
         })
-        .and(Ok(()))
 }
 
 pub fn set_language(
-    bk: &Backend,
     access_token: AccessToken,
-    server: Url,
+    base: Url,
     user_id: UserId,
     room_id: RoomId,
     input_language: String,
 ) -> Result<(), Error> {
-    let url = bk.url(
-        server,
-        &access_token,
-        &format!(
-            "user/{}/rooms/{}/account_data/org.gnome.fractal.language",
-            user_id, room_id,
-        ),
-        vec![],
-    )?;
+    let params = SetRoomAccountDataParameters { access_token };
+
     let body = json!(Language { input_language });
 
+    let response = set_room_account_data(
+        base,
+        &params,
+        &body,
+        &user_id,
+        &room_id,
+        "org.gnome.fractal.language",
+    )
+    .map_err(Into::into)
+    .and_then(|request| {
+        let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+
+        Ok(())
+    });
+
     // FIXME: Manage errors in the AppOp loop
-    put!(url, &body, |_| {}, |err| {
+    if let Err(ref err) = response {
         error!(
             "Matrix failed to set room language with error code: {:?}",
             err
-        )
-    });
-    Ok(())
+        );
+    }
+
+    response
 }
diff --git a/fractal-matrix-api/src/r0/config.rs b/fractal-matrix-api/src/r0/config.rs
index c1728c65..62850769 100644
--- a/fractal-matrix-api/src/r0/config.rs
+++ b/fractal-matrix-api/src/r0/config.rs
@@ -1,2 +1,3 @@
 pub mod get_global_account_data;
 pub mod set_global_account_data;
+pub mod set_room_account_data;
diff --git a/fractal-matrix-api/src/r0/config/set_room_account_data.rs 
b/fractal-matrix-api/src/r0/config/set_room_account_data.rs
new file mode 100644
index 00000000..7ee74db1
--- /dev/null
+++ b/fractal-matrix-api/src/r0/config/set_room_account_data.rs
@@ -0,0 +1,31 @@
+use crate::r0::AccessToken;
+use reqwest::blocking::Client;
+use reqwest::blocking::Request;
+use reqwest::Error;
+use ruma_identifiers::{RoomId, UserId};
+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,
+    user_id: &UserId,
+    room_id: &RoomId,
+    event_type: &str, // TODO: Use EventType
+) -> Result<Request, Error> {
+    let url = base
+        .join(&format!(
+            "/_matrix/client/r0/user/{}/rooms/{}/account_data/{}",
+            user_id, room_id, event_type,
+        ))
+        .expect("Malformed URL in set_room_account_data");
+
+    Client::new().put(url).query(params).json(body).build()
+}


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