diff --git a/src/contact.rs b/src/contact.rs index df4367cf1..310600c96 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -1026,9 +1026,7 @@ impl Contact { || row_authname.is_empty()); row_id = id; - let qr_with_fingerprint = !fingerprint.is_empty() - && origin == Origin::UnhandledSecurejoinQrScan; - if (origin >= row_origin || qr_with_fingerprint) && addr != row_addr { + if origin >= row_origin && addr != row_addr { update_addr = true; } if update_name || update_authname || update_addr || origin > row_origin { diff --git a/src/mimefactory.rs b/src/mimefactory.rs index 3be965e14..07a899e7a 100644 --- a/src/mimefactory.rs +++ b/src/mimefactory.rs @@ -271,7 +271,9 @@ impl MimeFactory { let public_key = SignedPublicKey::from_slice(&public_key_bytes)?; - recipients.extend(relay_addrs(&public_key, &addr)); + let relays = + addresses_from_public_key(&public_key).unwrap_or_else(|| vec![addr.clone()]); + recipients.extend(relays); to.push((authname, addr.clone())); encryption_pubkeys = Some(vec![(addr, public_key)]); @@ -351,7 +353,7 @@ impl MimeFactory { }; if add_timestamp >= remove_timestamp { let relays = if let Some(public_key) = public_key_opt { - let addrs = relay_addrs(&public_key, &addr); + let addrs = addresses_from_public_key(&public_key); keys.push((addr.clone(), public_key)); addrs } else if id != ContactId::SELF && !should_encrypt_symmetrically(&msg, &chat) { @@ -359,10 +361,10 @@ impl MimeFactory { if is_encrypted { warn!(context, "Missing key for {addr}"); } - vec![addr.clone()] + None } else { - vec![addr.clone()] - }; + None + }.unwrap_or_else(|| vec![addr.clone()]); if !recipients_contain_addr(&to, &addr) { if id != ContactId::SELF { @@ -391,7 +393,7 @@ impl MimeFactory { if let Some(email_to_remove) = email_to_remove && email_to_remove == addr { let relays = if let Some(public_key) = public_key_opt { - let addrs = relay_addrs(&public_key, &addr); + let addrs = addresses_from_public_key(&public_key); keys.push((addr.clone(), public_key)); addrs } else if id != ContactId::SELF && !should_encrypt_symmetrically(&msg, &chat) { @@ -399,10 +401,10 @@ impl MimeFactory { if is_encrypted { warn!(context, "Missing key for {addr}"); } - vec![addr.clone()] + None } else { - vec![addr.clone()] - }; + None + }.unwrap_or_else(|| vec![addr.clone()]); // This is a "member removed" message, // we need to notify removed member @@ -2201,14 +2203,6 @@ async fn build_avatar_file(context: &Context, path: &str) -> Result { Ok(encoded_body) } -fn relay_addrs(public_key: &SignedPublicKey, addr: &str) -> Vec { - let mut addrs = addresses_from_public_key(public_key).unwrap_or_default(); - if !addrs.iter().any(|r| r == addr) { - addrs.push(addr.to_string()); - } - addrs -} - fn recipients_contain_addr(recipients: &[(String, String)], addr: &str) -> bool { let addr_lc = addr.to_lowercase(); recipients