From 6aab4f6a12a84abfe974bbafe8278edbe531f418 Mon Sep 17 00:00:00 2001 From: Ethan Mateja Date: Thu, 11 Apr 2024 19:24:12 -0700 Subject: [PATCH] get_group_member helper on FfiXmtpClient Set FfiGroupMember on FfiGroup Clean up formatting --- bindings_ffi/src/mls.rs | 109 ++++++++++++++++++++++++++-------------- 1 file changed, 71 insertions(+), 38 deletions(-) diff --git a/bindings_ffi/src/mls.rs b/bindings_ffi/src/mls.rs index 6522b617d..d097d71d6 100644 --- a/bindings_ffi/src/mls.rs +++ b/bindings_ffi/src/mls.rs @@ -217,12 +217,12 @@ impl FfiConversations { convo.add_members(account_addresses).await?; } - let out = Arc::new(FfiGroup { - inner_client: self.inner_client.clone(), - group_id: convo.group_id, - created_at_ns: convo.created_at_ns, - added_by_address: Some(self.inner_client.account_address()), - }); + let out = Arc::new(create_ffi_group( + self.inner_client.clone(), + convo.group_id, + convo.created_at_ns, + Some(self.inner_client.account_address()), + )); Ok(out) } @@ -233,14 +233,12 @@ impl FfiConversations { ) -> Result, GenericError> { let inner = self.inner_client.as_ref(); let group = inner.process_streamed_welcome_message(envelope_bytes)?; - - let out = Arc::new(FfiGroup { - inner_client: self.inner_client.clone(), - group_id: group.group_id, - created_at_ns: group.created_at_ns, - added_by_address: group.added_by_address, - }); - + let out = Arc::new(create_ffi_group( + self.inner_client.clone(), + group.group_id, + group.created_at_ns, + group.added_by_address, + )); Ok(out) } @@ -264,12 +262,12 @@ impl FfiConversations { )? .into_iter() .map(|group| { - Arc::new(FfiGroup { - inner_client: self.inner_client.clone(), - group_id: group.group_id, - created_at_ns: group.created_at_ns, - added_by_address: group.added_by_address, - }) + Arc::new(create_ffi_group( + self.inner_client.clone(), + group.group_id, + group.created_at_ns, + group.added_by_address, + )) }) .collect(); @@ -284,12 +282,12 @@ impl FfiConversations { let stream_closer = RustXmtpClient::stream_conversations_with_callback( client.clone(), move |convo| { - callback.on_conversation(Arc::new(FfiGroup { - inner_client: client.clone(), - group_id: convo.group_id, - created_at_ns: convo.created_at_ns, - added_by_address: convo.added_by_address, - })) + callback.on_conversation(Arc::new(create_ffi_group( + client.clone(), + convo.group_id, + convo.created_at_ns, + convo.added_by_address, + ))) }, || {}, // on_close_callback )?; @@ -319,10 +317,42 @@ impl FfiConversations { #[derive(uniffi::Object)] pub struct FfiGroup { + inner_client: Arc, + group_id: Vec, + created_at_ns: i64, + added_by: Option, +} + +pub fn create_ffi_group( inner_client: Arc, group_id: Vec, created_at_ns: i64, added_by_address: Option, +) -> FfiGroup { + let group = MlsGroup::new( + inner_client.as_ref(), + group_id.clone(), + created_at_ns, + added_by_address.clone(), + ); + + let added_by: Option = match group.members() { + Ok(members) => members + .into_iter() + .map(|member| FfiGroupMember { + account_address: member.account_address, + installation_ids: member.installation_ids, + }) + .find(|member| Some(&member.account_address) == added_by_address.as_ref()), + Err(_) => None, + }; + + FfiGroup { + inner_client, + group_id, + created_at_ns, + added_by, + } } #[derive(uniffi::Record)] @@ -345,7 +375,7 @@ impl FfiGroup { self.inner_client.as_ref(), self.group_id.clone(), self.created_at_ns, - self.added_by_address.clone(), + self.added_by_address(), ); group.send_message(content_bytes.as_slice()).await?; @@ -358,7 +388,7 @@ impl FfiGroup { self.inner_client.as_ref(), self.group_id.clone(), self.created_at_ns, - self.added_by_address.clone(), + self.added_by_address(), ); group.sync().await?; @@ -366,8 +396,11 @@ impl FfiGroup { Ok(()) } - pub fn who_added_me(&self) -> Option { - self.added_by_address.clone() + pub fn added_by_address(&self) -> Option { + match &self.added_by { + Some(member) => Some(member.account_address.clone()), + None => None, + } } pub fn find_messages( @@ -378,7 +411,7 @@ impl FfiGroup { self.inner_client.as_ref(), self.group_id.clone(), self.created_at_ns, - self.added_by_address.clone(), + self.added_by_address(), ); let messages: Vec = group @@ -404,7 +437,7 @@ impl FfiGroup { self.inner_client.as_ref(), self.group_id.clone(), self.created_at_ns, - self.added_by_address.clone(), + self.added_by_address(), ); let message = group.process_streamed_group_message(envelope_bytes).await?; let ffi_message = message.into(); @@ -417,7 +450,7 @@ impl FfiGroup { self.inner_client.as_ref(), self.group_id.clone(), self.created_at_ns, - self.added_by_address.clone(), + self.added_by_address(), ); let members: Vec = group @@ -439,7 +472,7 @@ impl FfiGroup { self.inner_client.as_ref(), self.group_id.clone(), self.created_at_ns, - self.added_by_address.clone(), + self.added_by_address(), ); group.add_members(account_addresses).await?; @@ -452,7 +485,7 @@ impl FfiGroup { self.inner_client.as_ref(), self.group_id.clone(), self.created_at_ns, - self.added_by_address.clone(), + self.added_by_address(), ); group.remove_members(account_addresses).await?; @@ -488,7 +521,7 @@ impl FfiGroup { self.inner_client.as_ref(), self.group_id.clone(), self.created_at_ns, - self.added_by_address.clone(), + self.added_by_address(), ); Ok(group.is_active()?) @@ -499,7 +532,7 @@ impl FfiGroup { self.inner_client.as_ref(), self.group_id.clone(), self.created_at_ns, - self.added_by_address.clone(), + self.added_by_address(), ); let metadata = group.metadata()?; @@ -1158,7 +1191,7 @@ mod tests { let bola_group = bola_groups.first().unwrap(); // Check Bola's group for the added_by_address of the inviter - let added_by_address = bola_group.added_by_address.clone().unwrap(); + let added_by_address = bola_group.added_by_address().unwrap(); // // Verify the welcome host_credential is equal to Amal's assert_eq!(