matrix-sdk-base: Add method to get all members from the store
parent
2d6502247b
commit
a4bac499e9
|
@ -261,6 +261,22 @@ impl Room {
|
||||||
self.store.get_joined_user_ids(self.room_id()).await
|
self.store.get_joined_user_ids(self.room_id()).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get the all `RoomMember`s of this room that are known to the store.
|
||||||
|
pub async fn members(&self) -> StoreResult<Vec<RoomMember>> {
|
||||||
|
let user_ids = self.store.get_user_ids(self.room_id()).await?;
|
||||||
|
let mut members = Vec::new();
|
||||||
|
|
||||||
|
for u in user_ids {
|
||||||
|
let m = self.get_member(&u).await?;
|
||||||
|
|
||||||
|
if let Some(member) = m {
|
||||||
|
members.push(member);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(members)
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the list of `RoomMember`s that are considered to be joined members
|
/// Get the list of `RoomMember`s that are considered to be joined members
|
||||||
/// of this room.
|
/// of this room.
|
||||||
pub async fn joined_members(&self) -> StoreResult<Vec<RoomMember>> {
|
pub async fn joined_members(&self) -> StoreResult<Vec<RoomMember>> {
|
||||||
|
|
|
@ -270,6 +270,14 @@ impl MemoryStore {
|
||||||
.and_then(|m| m.get(state_key).map(|m| m.clone())))
|
.and_then(|m| m.get(state_key).map(|m| m.clone())))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_user_ids(&self, room_id: &RoomId) -> Vec<UserId> {
|
||||||
|
#[allow(clippy::map_clone)]
|
||||||
|
self.members
|
||||||
|
.get(room_id)
|
||||||
|
.map(|u| u.iter().map(|u| u.key().clone()).collect())
|
||||||
|
.unwrap_or_default()
|
||||||
|
}
|
||||||
|
|
||||||
fn get_invited_user_ids(&self, room_id: &RoomId) -> Vec<UserId> {
|
fn get_invited_user_ids(&self, room_id: &RoomId) -> Vec<UserId> {
|
||||||
#[allow(clippy::map_clone)]
|
#[allow(clippy::map_clone)]
|
||||||
self.invited_user_ids
|
self.invited_user_ids
|
||||||
|
@ -345,6 +353,10 @@ impl StateStore for MemoryStore {
|
||||||
self.get_member_event(room_id, state_key).await
|
self.get_member_event(room_id, state_key).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>> {
|
||||||
|
Ok(self.get_user_ids(room_id))
|
||||||
|
}
|
||||||
|
|
||||||
async fn get_invited_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>> {
|
async fn get_invited_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>> {
|
||||||
Ok(self.get_invited_user_ids(room_id))
|
Ok(self.get_invited_user_ids(room_id))
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,6 +153,9 @@ pub trait StateStore: AsyncTraitDeps {
|
||||||
state_key: &UserId,
|
state_key: &UserId,
|
||||||
) -> Result<Option<MemberEvent>>;
|
) -> Result<Option<MemberEvent>>;
|
||||||
|
|
||||||
|
/// Get all the user ids of members for a given room.
|
||||||
|
async fn get_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>>;
|
||||||
|
|
||||||
/// Get all the user ids of members that are in the invited state for a
|
/// Get all the user ids of members that are in the invited state for a
|
||||||
/// given room.
|
/// given room.
|
||||||
async fn get_invited_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>>;
|
async fn get_invited_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>>;
|
||||||
|
|
|
@ -527,6 +527,13 @@ impl SledStore {
|
||||||
.transpose()?)
|
.transpose()?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn get_user_ids(&self, room_id: &RoomId) -> impl Stream<Item = Result<UserId>> {
|
||||||
|
stream::iter(self.members.scan_prefix(room_id.encode()).map(|u| {
|
||||||
|
UserId::try_from(String::from_utf8_lossy(&u?.1).to_string())
|
||||||
|
.map_err(StoreError::Identifier)
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn get_invited_user_ids(
|
pub async fn get_invited_user_ids(
|
||||||
&self,
|
&self,
|
||||||
room_id: &RoomId,
|
room_id: &RoomId,
|
||||||
|
@ -632,6 +639,10 @@ impl StateStore for SledStore {
|
||||||
self.get_member_event(room_id, state_key).await
|
self.get_member_event(room_id, state_key).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>> {
|
||||||
|
self.get_user_ids(room_id).await.try_collect().await
|
||||||
|
}
|
||||||
|
|
||||||
async fn get_invited_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>> {
|
async fn get_invited_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>> {
|
||||||
self.get_invited_user_ids(room_id).await.try_collect().await
|
self.get_invited_user_ids(room_id).await.try_collect().await
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue