room: Override the method to get a specific room member
parent
5ed0c7a7b3
commit
5cf0fd2b85
|
@ -1,3 +1,4 @@
|
||||||
|
use matrix_sdk_base::{deserialized_responses::MembersResponse, identifiers::UserId};
|
||||||
use matrix_sdk_common::{
|
use matrix_sdk_common::{
|
||||||
api::r0::{
|
api::r0::{
|
||||||
media::{get_content, get_content_thumbnail},
|
media::{get_content, get_content_thumbnail},
|
||||||
|
@ -149,7 +150,7 @@ impl Common {
|
||||||
self.client.send(request, None).await
|
self.client.send(request, None).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn request_members(&self) -> Result<()> {
|
pub(crate) async fn request_members(&self) -> Result<Option<MembersResponse>> {
|
||||||
#[allow(clippy::map_clone)]
|
#[allow(clippy::map_clone)]
|
||||||
if let Some(mutex) = self
|
if let Some(mutex) = self
|
||||||
.client
|
.client
|
||||||
|
@ -158,6 +159,8 @@ impl Common {
|
||||||
.map(|m| m.clone())
|
.map(|m| m.clone())
|
||||||
{
|
{
|
||||||
mutex.lock().await;
|
mutex.lock().await;
|
||||||
|
|
||||||
|
Ok(None)
|
||||||
} else {
|
} else {
|
||||||
let mutex = Arc::new(Mutex::new(()));
|
let mutex = Arc::new(Mutex::new(()));
|
||||||
self.client
|
self.client
|
||||||
|
@ -169,7 +172,8 @@ impl Common {
|
||||||
let request = get_member_events::Request::new(self.inner.room_id());
|
let request = get_member_events::Request::new(self.inner.room_id());
|
||||||
let response = self.client.send(request, None).await?;
|
let response = self.client.send(request, None).await?;
|
||||||
|
|
||||||
self.client
|
let response = self
|
||||||
|
.client
|
||||||
.base_client
|
.base_client
|
||||||
.receive_members(self.inner.room_id(), &response)
|
.receive_members(self.inner.room_id(), &response)
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -177,9 +181,9 @@ impl Common {
|
||||||
self.client
|
self.client
|
||||||
.members_request_locks
|
.members_request_locks
|
||||||
.remove(self.inner.room_id());
|
.remove(self.inner.room_id());
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
Ok(Some(response))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn ensure_members(&self) -> Result<()> {
|
async fn ensure_members(&self) -> Result<()> {
|
||||||
|
@ -190,6 +194,14 @@ impl Common {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sync the member list with the server.
|
||||||
|
///
|
||||||
|
/// This method will deduplicate requests if it is called multiple times in
|
||||||
|
/// quick succession, in that case the return value will be `None`.
|
||||||
|
pub async fn sync_members(&self) -> Result<Option<MembersResponse>> {
|
||||||
|
self.request_members().await
|
||||||
|
}
|
||||||
|
|
||||||
/// Get active members for this room, includes invited, joined members.
|
/// Get active members for this room, includes invited, joined members.
|
||||||
///
|
///
|
||||||
/// *Note*: This method will fetch the members from the homeserver if the
|
/// *Note*: This method will fetch the members from the homeserver if the
|
||||||
|
@ -222,6 +234,25 @@ impl Common {
|
||||||
.collect())
|
.collect())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get a specific member of this room.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `user_id` - The ID of the user that should be fetched out of the
|
||||||
|
/// store.
|
||||||
|
///
|
||||||
|
/// *Note*: This method will fetch the members from the homeserver if the
|
||||||
|
/// member list isn't synchronized due to member lazy loading.
|
||||||
|
pub async fn get_member(&self, user_id: &UserId) -> Result<Option<RoomMember>> {
|
||||||
|
self.ensure_members().await?;
|
||||||
|
|
||||||
|
Ok(self
|
||||||
|
.inner
|
||||||
|
.get_member(user_id)
|
||||||
|
.await?
|
||||||
|
.map(|member| RoomMember::new(self.client.clone(), member)))
|
||||||
|
}
|
||||||
|
|
||||||
/// Get all members for this room, includes invited, joined and left members.
|
/// Get all members for this room, includes invited, joined and left members.
|
||||||
///
|
///
|
||||||
/// *Note*: This method will fetch the members from the homeserver if the
|
/// *Note*: This method will fetch the members from the homeserver if the
|
||||||
|
|
Loading…
Reference in New Issue