[fractal] Mark favourite rooms through matrix-sdk



commit 82a128dd556d1a9bab6db6d00dec62c1eaa7cac8
Author: Alejandro Domínguez <adomu net-c com>
Date:   Mon Sep 7 01:52:36 2020 +0200

    Mark favourite rooms through matrix-sdk

 fractal-gtk/src/appop/room.rs               |  7 ++---
 fractal-gtk/src/backend/room.rs             | 49 +++++++++++++++--------------
 fractal-matrix-api/src/meson.build          |  3 --
 fractal-matrix-api/src/r0.rs                |  1 -
 fractal-matrix-api/src/r0/tag.rs            |  2 --
 fractal-matrix-api/src/r0/tag/create_tag.rs | 37 ----------------------
 fractal-matrix-api/src/r0/tag/delete_tag.rs | 29 -----------------
 7 files changed, 29 insertions(+), 99 deletions(-)
---
diff --git a/fractal-gtk/src/appop/room.rs b/fractal-gtk/src/appop/room.rs
index a53ad1da..b05adda9 100644
--- a/fractal-gtk/src/appop/room.rs
+++ b/fractal-gtk/src/appop/room.rs
@@ -148,11 +148,10 @@ impl AppOp {
             container.add(self.roomlist.widget());
 
             self.roomlist.connect_fav(move |room, tofav| {
-                let server = login_data.session_client.homeserver().clone();
-                let access_token = login_data.access_token.clone();
+                let session_client = login_data.session_client.clone();
                 let uid = login_data.uid.clone();
-                thread::spawn(move || {
-                    match room::add_to_fav(server, access_token, uid, room.id, tofav) {
+                RUNTIME.spawn(async move {
+                    match room::add_to_fav(session_client, &uid, room.id, tofav).await {
                         Ok((r, tofav)) => {
                             APPOP!(added_to_fav, (r, tofav));
                         }
diff --git a/fractal-gtk/src/backend/room.rs b/fractal-gtk/src/backend/room.rs
index 229db6eb..ec41a1dd 100644
--- a/fractal-gtk/src/backend/room.rs
+++ b/fractal-gtk/src/backend/room.rs
@@ -39,12 +39,15 @@ use fractal_api::api::r0::room::create_room::Request as CreateRoomRequest;
 use fractal_api::api::r0::room::create_room::RoomPreset;
 use fractal_api::api::r0::room::Visibility;
 use fractal_api::api::r0::state::send_state_event_for_key::Request as SendStateEventForKeyRequest;
+use fractal_api::api::r0::tag::create_tag::Request as CreateTagRequest;
+use fractal_api::api::r0::tag::delete_tag::Request as DeleteTagRequest;
 use fractal_api::api::r0::typing::create_typing_event::Typing;
 use fractal_api::assign;
 use fractal_api::events::room::avatar::AvatarEventContent;
 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::tag::TagInfo;
 use fractal_api::events::AnyBasicEventContent;
 use fractal_api::events::AnyInitialStateEvent;
 use fractal_api::events::AnyMessageEventContent;
@@ -65,11 +68,6 @@ use fractal_api::r0::state::get_state_events_for_key::Parameters as GetStateEven
 use fractal_api::r0::sync::get_joined_members::request as get_joined_members;
 use fractal_api::r0::sync::get_joined_members::Parameters as JoinedMembersParameters;
 use fractal_api::r0::sync::get_joined_members::Response as JoinedMembersResponse;
-use fractal_api::r0::tag::create_tag::request as create_tag;
-use fractal_api::r0::tag::create_tag::Body as CreateTagBody;
-use fractal_api::r0::tag::create_tag::Parameters as CreateTagParameters;
-use fractal_api::r0::tag::delete_tag::request as delete_tag;
-use fractal_api::r0::tag::delete_tag::Parameters as DeleteTagParameters;
 use fractal_api::r0::AccessToken;
 
 use serde_json::value::to_raw_value;
@@ -777,35 +775,40 @@ pub async fn direct_chat(
 }
 
 #[derive(Debug)]
-pub struct AddedToFavError(ReqwestError);
+pub struct AddedToFavError(MatrixError);
 
-impl From<ReqwestError> for AddedToFavError {
-    fn from(err: ReqwestError) -> Self {
+impl From<MatrixError> for AddedToFavError {
+    fn from(err: MatrixError) -> Self {
         Self(err)
     }
 }
 
 impl HandleError for AddedToFavError {}
 
-pub fn add_to_fav(
-    base: Url,
-    access_token: AccessToken,
-    user_id: UserId,
-    room_id: RoomId,
+pub async fn add_to_fav(
+    session_client: MatrixClient,
+    user_id: &UserId,
+    rid: RoomId,
     tofav: bool,
 ) -> Result<(RoomId, bool), AddedToFavError> {
-    let request = if tofav {
-        let params = CreateTagParameters { access_token };
-        let body = CreateTagBody { order: Some(0.5) };
-        create_tag(base, &user_id, &room_id, "m.favourite", &params, &body)
+    let tag = "m.favourite";
+    let room_id = &rid;
+    if tofav {
+        let request = CreateTagRequest::new(
+            user_id,
+            room_id,
+            tag,
+            assign!(TagInfo::new(), {
+                order: Some(0.5),
+            }),
+        );
+        session_client.send(request).await?;
     } else {
-        let params = DeleteTagParameters { access_token };
-        delete_tag(base, &user_id, &room_id, "m.favourite", &params)
-    }?;
-
-    HTTP_CLIENT.get_client().execute(request)?;
+        let request = DeleteTagRequest::new(user_id, room_id, tag);
+        session_client.send(request).await?;
+    }
 
-    Ok((room_id, tofav))
+    Ok((rid, tofav))
 }
 
 #[derive(Debug)]
diff --git a/fractal-matrix-api/src/meson.build b/fractal-matrix-api/src/meson.build
index dff355d1..3d51bdd1 100644
--- a/fractal-matrix-api/src/meson.build
+++ b/fractal-matrix-api/src/meson.build
@@ -21,8 +21,6 @@ api_sources = files(
   'r0/state/get_state_events_for_key.rs',
   'r0/sync/get_joined_members.rs',
   'r0/sync/sync_events.rs',
-  'r0/tag/create_tag.rs',
-  'r0/tag/delete_tag.rs',
   'r0/thirdparty/get_supported_protocols.rs',
   'r0/account.rs',
   'r0/contact.rs',
@@ -32,7 +30,6 @@ api_sources = files(
   'r0/server.rs',
   'r0/state.rs',
   'r0/sync.rs',
-  'r0/tag.rs',
   'r0/thirdparty.rs',
   'identity.rs',
   'lib.rs',
diff --git a/fractal-matrix-api/src/r0.rs b/fractal-matrix-api/src/r0.rs
index ef6e3c07..1595dfbe 100644
--- a/fractal-matrix-api/src/r0.rs
+++ b/fractal-matrix-api/src/r0.rs
@@ -7,7 +7,6 @@ pub mod pushrules;
 pub mod server;
 pub mod state;
 pub mod sync;
-pub mod tag;
 pub mod thirdparty;
 
 use serde::{Deserialize, Serialize, Serializer};


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