From c251f16292891dbc5d8d624ce561cb07e7a598a4 Mon Sep 17 00:00:00 2001 From: Doug Date: Thu, 29 Feb 2024 12:16:58 +0000 Subject: [PATCH 1/2] ffi: Update the power levels of multiple users as once. --- bindings/matrix-sdk-ffi/src/room.rs | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/bindings/matrix-sdk-ffi/src/room.rs b/bindings/matrix-sdk-ffi/src/room.rs index e700f99c99c..bbad67fa811 100644 --- a/bindings/matrix-sdk-ffi/src/room.rs +++ b/bindings/matrix-sdk-ffi/src/room.rs @@ -581,15 +581,21 @@ impl Room { Ok(()) } - pub async fn update_power_level_for_user( + pub async fn update_power_levels_for_users( &self, - user_id: String, - power_level: i64, + updates: Vec, ) -> Result<(), ClientError> { - let user_id = UserId::parse(&user_id)?; - let power_level = Int::new(power_level).context("Invalid power level")?; + let parse_result: Result> = updates + .iter() + .map(|upl| -> Result<(&UserId, Int)> { + let user_id: &UserId = <&UserId>::try_from(upl.user_id.as_str())?; + let pl = Int::new(upl.power_level).context("Invalid power level")?; + Ok((user_id, pl)) + }) + .collect(); + self.inner - .update_power_levels(vec![(&user_id, power_level)]) + .update_power_levels(parse_result?) .await .map_err(|e| ClientError::Generic { msg: e.to_string() })?; Ok(()) @@ -638,6 +644,15 @@ impl RoomMembersIterator { } } +/// An update for a particular user's power level within the room. +#[derive(uniffi::Record)] +pub struct UserPowerLevelUpdate { + /// The user ID of the user to update. + user_id: String, + /// The power level to assign to the user. + power_level: i64, +} + impl TryFrom for RumaAvatarImageInfo { type Error = MediaInfoError; From 370f4735f7b98d05e69a42411aa2956232825bba Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Thu, 29 Feb 2024 14:56:16 +0100 Subject: [PATCH 2/2] ffi: simplify the declaration type --- bindings/matrix-sdk-ffi/src/room.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bindings/matrix-sdk-ffi/src/room.rs b/bindings/matrix-sdk-ffi/src/room.rs index bbad67fa811..74600e75709 100644 --- a/bindings/matrix-sdk-ffi/src/room.rs +++ b/bindings/matrix-sdk-ffi/src/room.rs @@ -585,17 +585,17 @@ impl Room { &self, updates: Vec, ) -> Result<(), ClientError> { - let parse_result: Result> = updates + let updates = updates .iter() - .map(|upl| -> Result<(&UserId, Int)> { - let user_id: &UserId = <&UserId>::try_from(upl.user_id.as_str())?; - let pl = Int::new(upl.power_level).context("Invalid power level")?; - Ok((user_id, pl)) + .map(|update| { + let user_id: &UserId = update.user_id.as_str().try_into()?; + let power_level = Int::new(update.power_level).context("Invalid power level")?; + Ok((user_id, power_level)) }) - .collect(); + .collect::>>()?; self.inner - .update_power_levels(parse_result?) + .update_power_levels(updates) .await .map_err(|e| ClientError::Generic { msg: e.to_string() })?; Ok(())