[fractal] Set room topic through matrix-sdk



commit c571b5dc1ce1d20f591deeb91d4c9648fa05edcd
Author: Alejandro Domínguez <adomu net-c com>
Date:   Mon Sep 7 03:07:38 2020 +0200

    Set room topic through matrix-sdk

 fractal-gtk/src/backend/room.rs                    | 26 +++++++-----------
 fractal-gtk/src/widgets/room_settings.rs           | 20 ++++++--------
 fractal-matrix-api/src/meson.build                 |  1 -
 fractal-matrix-api/src/r0/state.rs                 |  1 -
 .../src/r0/state/create_state_events_for_key.rs    | 31 ----------------------
 5 files changed, 18 insertions(+), 61 deletions(-)
---
diff --git a/fractal-gtk/src/backend/room.rs b/fractal-gtk/src/backend/room.rs
index d10b03f4..37ba7494 100644
--- a/fractal-gtk/src/backend/room.rs
+++ b/fractal-gtk/src/backend/room.rs
@@ -48,6 +48,7 @@ use fractal_api::events::room::history_visibility::HistoryVisibility;
 use fractal_api::events::room::history_visibility::HistoryVisibilityEventContent;
 use fractal_api::events::room::message::MessageEventContent;
 use fractal_api::events::room::name::NameEventContent;
+use fractal_api::events::room::topic::TopicEventContent;
 use fractal_api::events::tag::TagInfo;
 use fractal_api::events::AnyBasicEventContent;
 use fractal_api::events::AnyInitialStateEvent;
@@ -63,8 +64,6 @@ use fractal_api::r0::pushrules::get_room_rules::request as get_room_rules;
 use fractal_api::r0::pushrules::get_room_rules::Parameters as GetRoomRulesParams;
 use fractal_api::r0::pushrules::set_room_rules::request as set_room_rules;
 use fractal_api::r0::pushrules::set_room_rules::Parameters as SetRoomRulesParams;
-use fractal_api::r0::state::create_state_events_for_key::request as create_state_events_for_key;
-use fractal_api::r0::state::create_state_events_for_key::Parameters as CreateStateEventsForKeyParameters;
 use fractal_api::r0::state::get_state_events_for_key::request as get_state_events_for_key;
 use fractal_api::r0::state::get_state_events_for_key::Parameters as GetStateEventsForKeyParameters;
 use fractal_api::r0::sync::get_joined_members::request as get_joined_members;
@@ -506,30 +505,25 @@ pub async fn set_room_name(
 }
 
 #[derive(Debug)]
-pub struct SetRoomTopicError(ReqwestError);
+pub struct SetRoomTopicError(MatrixError);
 
-impl From<ReqwestError> for SetRoomTopicError {
-    fn from(err: ReqwestError) -> Self {
+impl From<MatrixError> for SetRoomTopicError {
+    fn from(err: MatrixError) -> Self {
         Self(err)
     }
 }
 
 impl HandleError for SetRoomTopicError {}
 
-pub fn set_room_topic(
-    base: Url,
-    access_token: AccessToken,
-    room_id: RoomId,
+pub async fn set_room_topic(
+    session_client: MatrixClient,
+    room_id: &RoomId,
     topic: String,
 ) -> Result<(), SetRoomTopicError> {
-    let params = CreateStateEventsForKeyParameters { access_token };
-
-    let body = json!({
-        "topic": topic,
-    });
+    let content = &AnyStateEventContent::RoomTopic(TopicEventContent { topic });
+    let request = SendStateEventForKeyRequest::new(room_id, "m.room.topic", content);
 
-    let request = create_state_events_for_key(base, &params, &body, &room_id, "m.room.topic")?;
-    HTTP_CLIENT.get_client().execute(request)?;
+    session_client.send(request).await?;
 
     Ok(())
 }
diff --git a/fractal-gtk/src/widgets/room_settings.rs b/fractal-gtk/src/widgets/room_settings.rs
index 55bcf1db..f0900aa9 100644
--- a/fractal-gtk/src/widgets/room_settings.rs
+++ b/fractal-gtk/src/widgets/room_settings.rs
@@ -144,7 +144,7 @@ impl RoomSettings {
             let _ = button.emit("clicked", &[]);
         });
 
-        name_btn.connect_clicked(clone!(@strong this => move |_| {
+        name_btn.connect_clicked(clone!(@strong this, @strong session_client => move |_| {
             this.borrow_mut().update_room_name(session_client.clone());
         }));
 
@@ -154,7 +154,7 @@ impl RoomSettings {
         });
 
         topic_btn.connect_clicked(clone!(@strong this => move |_| {
-            this.borrow_mut().update_room_topic();
+            this.borrow_mut().update_room_topic(session_client.clone());
         }));
 
         if let Some(action) = self.actions.lookup_action("change-avatar") {
@@ -545,7 +545,7 @@ impl RoomSettings {
         None
     }
 
-    pub fn update_room_topic(&mut self) -> Option<()> {
+    pub fn update_room_topic(&mut self, session_client: MatrixClient) -> Option<()> {
         let name = self
             .builder
             .get_object::<gtk::Entry>("room_settings_room_topic_entry")
@@ -556,27 +556,23 @@ impl RoomSettings {
             .expect("Can't find room_settings_topic_button in ui file.");
         let topic = name.get_text().to_string();
 
-        let room = &self.room;
-
         let spinner = gtk::Spinner::new();
         spinner.start();
         button.set_image(Some(&spinner));
         button.set_sensitive(false);
         name.set_editable(false);
 
-        let server = self.server_url.clone();
-        let access_token = self.access_token.clone();
-        let room_id = room.id.clone();
-        thread::spawn(
-            move || match room::set_room_topic(server, access_token, room_id, topic) {
+        let room_id = self.room.id.clone();
+        RUNTIME.spawn(async move {
+            match room::set_room_topic(session_client, &room_id, topic).await {
                 Ok(_) => {
                     APPOP!(show_new_room_topic);
                 }
                 Err(err) => {
                     err.handle_error();
                 }
-            },
-        );
+            }
+        });
 
         None
     }
diff --git a/fractal-matrix-api/src/meson.build b/fractal-matrix-api/src/meson.build
index 3d51bdd1..46e7bb71 100644
--- a/fractal-matrix-api/src/meson.build
+++ b/fractal-matrix-api/src/meson.build
@@ -17,7 +17,6 @@ api_sources = files(
   'r0/profile/set_avatar_url.rs',
   'r0/profile/set_display_name.rs',
   'r0/server/domain_info.rs',
-  'r0/state/create_state_events_for_key.rs',
   'r0/state/get_state_events_for_key.rs',
   'r0/sync/get_joined_members.rs',
   'r0/sync/sync_events.rs',
diff --git a/fractal-matrix-api/src/r0/state.rs b/fractal-matrix-api/src/r0/state.rs
index 6904b95f..f46cf908 100644
--- a/fractal-matrix-api/src/r0/state.rs
+++ b/fractal-matrix-api/src/r0/state.rs
@@ -1,2 +1 @@
-pub mod create_state_events_for_key;
 pub mod get_state_events_for_key;


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