feat: simplify e2ee decision logic

Removed remaining majority vote code.
This commit is contained in:
link2xt
2025-03-27 16:01:39 +00:00
parent a8f8d34c25
commit 568c044a90

View File

@@ -54,34 +54,25 @@ impl EncryptHelper {
peerstates: &[(Option<Peerstate>, String)],
) -> Result<bool> {
let is_chatmail = context.is_chatmail().await?;
let mut prefer_encrypt_count = 1;
for (peerstate, addr) in peerstates {
match peerstate {
Some(peerstate) => {
if match peerstate.prefer_encrypt {
EncryptPreference::Reset => is_chatmail,
EncryptPreference::NoPreference | EncryptPreference::Mutual => true,
} {
prefer_encrypt_count += 1;
}
}
None => {
let msg = format!("Peerstate for {addr:?} missing, cannot encrypt");
if e2ee_guaranteed {
return Err(format_err!("{msg}"));
} else {
info!(context, "{msg}.");
return Ok(false);
}
let missing_peerstate_addr = peerstates.iter().find_map(|(peerstate, addr)| {
if let Some(peerstate) = peerstate {
if is_chatmail
|| e2ee_guaranteed
|| peerstate.prefer_encrypt != EncryptPreference::Reset
{
return None;
}
}
Some(addr)
});
if let Some(addr) = missing_peerstate_addr {
if e2ee_guaranteed {
return Err(format_err!(
"Peerstate for {addr:?} missing, cannot encrypt"
));
}
}
// Count number of recipients, including self.
// This does not depend on whether we send a copy to self or not.
let recipients_count = peerstates.len() + 1;
Ok(e2ee_guaranteed || 2 * prefer_encrypt_count > recipients_count)
Ok(missing_peerstate_addr.is_none())
}
/// Tries to encrypt the passed in `mail`.