From acd8ecbd22af2acc8c8355edc6de64fe8edff5c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= <76261501+zecakeh@users.noreply.github.com> Date: Mon, 4 Apr 2022 12:15:12 +0200 Subject: [PATCH] feat(sdk): Retrieve account data from room::Common --- crates/matrix-sdk/src/room/common.rs | 38 +++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/crates/matrix-sdk/src/room/common.rs b/crates/matrix-sdk/src/room/common.rs index 95d807d82..65b54aa39 100644 --- a/crates/matrix-sdk/src/room/common.rs +++ b/crates/matrix-sdk/src/room/common.rs @@ -18,7 +18,8 @@ use ruma::{ events::{ room::{history_visibility::HistoryVisibility, MediaSource}, tag::{TagInfo, TagName}, - AnyStateEvent, AnySyncStateEvent, EventContent, StateEventType, StaticEventContent, + AnyRoomAccountDataEvent, AnyStateEvent, AnySyncStateEvent, EventContent, + RoomAccountDataEvent, RoomAccountDataEventType, StateEventType, StaticEventContent, SyncStateEvent, }, serde::Raw, @@ -706,6 +707,41 @@ impl Common { Ok(self.get_state_event(C::TYPE.into(), state_key).await?.map(Raw::cast)) } + /// Get account data in this room. + pub async fn account_data( + &self, + data_type: RoomAccountDataEventType, + ) -> Result>> { + self.client + .store() + .get_room_account_data_event(self.room_id(), data_type) + .await + .map_err(Into::into) + } + + /// Get account data of statically-known type in this room. + /// + /// # Example + /// + /// ```no_run + /// # async { + /// # let room: matrix_sdk::room::Common = todo!(); + /// use matrix_sdk::ruma::events::fully_read::FullyReadEventContent; + /// + /// match room.account_data_static::().await? { + /// Some(fully_read) => println!("Found read marker: {:?}", fully_read.deserialize()?), + /// None => println!("No read marker for this room"), + /// } + /// # anyhow::Ok(()) + /// # }; + /// ``` + pub async fn account_data_static(&self) -> Result>>> + where + C: StaticEventContent + EventContent, + { + Ok(self.account_data(C::TYPE.into()).await?.map(Raw::cast)) + } + /// Check if all members of this room are verified and all their devices are /// verified. ///