feat(sdk): Retrieve account data from room::Common

This commit is contained in:
Kévin Commaille
2022-04-04 12:15:12 +02:00
committed by GitHub
parent eab68131e7
commit acd8ecbd22

View File

@@ -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<Option<Raw<AnyRoomAccountDataEvent>>> {
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::<FullyReadEventContent>().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<C>(&self) -> Result<Option<Raw<RoomAccountDataEvent<C>>>>
where
C: StaticEventContent + EventContent<EventType = RoomAccountDataEventType>,
{
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.
///