Skip to content

Commit

Permalink
get_group_member helper on FfiXmtpClient
Browse files Browse the repository at this point in the history
Set FfiGroupMember on FfiGroup

Clean up formatting
  • Loading branch information
zombieobject committed Apr 12, 2024
1 parent 4b613a3 commit 6aab4f6
Showing 1 changed file with 71 additions and 38 deletions.
109 changes: 71 additions & 38 deletions bindings_ffi/src/mls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand All @@ -233,14 +233,12 @@ impl FfiConversations {
) -> Result<Arc<FfiGroup>, 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)
}

Expand All @@ -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();

Expand All @@ -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
)?;
Expand Down Expand Up @@ -319,10 +317,42 @@ impl FfiConversations {

#[derive(uniffi::Object)]
pub struct FfiGroup {
inner_client: Arc<RustXmtpClient>,
group_id: Vec<u8>,
created_at_ns: i64,
added_by: Option<FfiGroupMember>,
}

pub fn create_ffi_group(
inner_client: Arc<RustXmtpClient>,
group_id: Vec<u8>,
created_at_ns: i64,
added_by_address: Option<String>,
) -> FfiGroup {
let group = MlsGroup::new(
inner_client.as_ref(),
group_id.clone(),
created_at_ns,
added_by_address.clone(),
);

let added_by: Option<FfiGroupMember> = 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)]
Expand All @@ -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?;
Expand All @@ -358,16 +388,19 @@ 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?;

Ok(())
}

pub fn who_added_me(&self) -> Option<String> {
self.added_by_address.clone()
pub fn added_by_address(&self) -> Option<String> {
match &self.added_by {
Some(member) => Some(member.account_address.clone()),
None => None,
}
}

pub fn find_messages(
Expand All @@ -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<FfiMessage> = group
Expand All @@ -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();
Expand All @@ -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<FfiGroupMember> = group
Expand All @@ -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?;
Expand All @@ -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?;
Expand Down Expand Up @@ -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()?)
Expand All @@ -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()?;
Expand Down Expand Up @@ -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!(
Expand Down

0 comments on commit 6aab4f6

Please sign in to comment.