From f3d33efa0f9c7b7f80de2087d432643b420c19ce Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Wed, 6 Sep 2023 17:37:05 +0200 Subject: [PATCH] feat(ffi): Make `fetch_members`, `members` and `member` async. This patch makes the following methods on `Room` async: `fetch_members`, `members`, and `member`. --- bindings/matrix-sdk-ffi/src/room.rs | 38 +++++++++++++---------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/bindings/matrix-sdk-ffi/src/room.rs b/bindings/matrix-sdk-ffi/src/room.rs index 67e22b6fd..228d35fba 100644 --- a/bindings/matrix-sdk-ffi/src/room.rs +++ b/bindings/matrix-sdk-ffi/src/room.rs @@ -173,9 +173,11 @@ impl Room { }); } - pub fn fetch_members(&self) -> Result, ClientError> { - let timeline = RUNTIME - .block_on(self.timeline.read()) + pub async fn fetch_members(&self) -> Result, ClientError> { + let timeline = self + .timeline + .read() + .await .clone() .context("Timeline not set up, can't fetch members")?; @@ -197,26 +199,20 @@ impl Room { }) } - pub fn members(&self) -> Result>, ClientError> { - let room = self.inner.clone(); - RUNTIME.block_on(async move { - let members = room - .members(RoomMemberships::empty()) - .await? - .iter() - .map(|m| Arc::new(RoomMember::new(m.clone()))) - .collect(); - Ok(members) - }) + pub async fn members(&self) -> Result>, ClientError> { + Ok(self + .inner + .members(RoomMemberships::empty()) + .await? + .iter() + .map(|m| Arc::new(RoomMember::new(m.clone()))) + .collect()) } - pub fn member(&self, user_id: String) -> Result, ClientError> { - let room = self.inner.clone(); - RUNTIME.block_on(async move { - let user_id = UserId::parse(&*user_id).context("Invalid user id.")?; - let member = room.get_member(&user_id).await?.context("No user found")?; - Ok(Arc::new(RoomMember::new(member))) - }) + pub async fn member(&self, user_id: String) -> Result, ClientError> { + let user_id = UserId::parse(&*user_id).context("Invalid user id.")?; + let member = self.inner.get_member(&user_id).await?.context("No user found")?; + Ok(Arc::new(RoomMember::new(member))) } pub fn member_avatar_url(&self, user_id: String) -> Result, ClientError> {