[fractal] Set room topic through matrix-sdk
- From: Alexandre Franke <afranke src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] Set room topic through matrix-sdk
- Date: Tue, 1 Dec 2020 20:22:00 +0000 (UTC)
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, ¶ms, &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]