fix final problem, tests pass now

This commit is contained in:
holger krekel
2019-12-09 20:25:46 +01:00
parent c33797ff84
commit 4dc5e0378f

View File

@@ -143,7 +143,10 @@ pub fn dc_receive_imf(
&mut from_ids, &mut from_ids,
)?; )?;
if from_ids.len() > 1 { if from_ids.len() > 1 {
warn!(context, "mail has more than one address in From: {:?}", field_from); warn!(
context,
"mail has more than one address in From: {:?}", field_from
);
} }
if from_ids.contains(&DC_CONTACT_ID_SELF) { if from_ids.contains(&DC_CONTACT_ID_SELF) {
incoming = false; incoming = false;
@@ -161,7 +164,6 @@ pub fn dc_receive_imf(
} }
} }
// Add parts // Add parts
let rfc724_mid = match mime_parser.get_rfc724_mid() { let rfc724_mid = match mime_parser.get_rfc724_mid() {
@@ -450,7 +452,7 @@ fn add_parts(
chat::unblock(context, *chat_id); chat::unblock(context, *chat_id);
chat_id_blocked = Blocked::Not; chat_id_blocked = Blocked::Not;
} else if is_reply_to_known_message(context, mime_parser) { } else if is_reply_to_known_message(context, mime_parser) {
// we do not want any chat to be created implicitly. Because of the origin-scale-up, // we do not want any chat to be created implicitly. Because of the origin-scale-up,
// the contact requests will pop up and this should be just fine. // the contact requests will pop up and this should be just fine.
Contact::scaleup_origin_by_id(context, *from_id, Origin::IncomingReplyTo); Contact::scaleup_origin_by_id(context, *from_id, Origin::IncomingReplyTo);
info!( info!(
@@ -534,8 +536,8 @@ fn add_parts(
} }
} }
let self_sent = *from_id == DC_CONTACT_ID_SELF let self_sent = *from_id == DC_CONTACT_ID_SELF
&& to_ids.len() == 1 && to_ids.len() == 1
&& to_ids.contains(&DC_CONTACT_ID_SELF); && to_ids.contains(&DC_CONTACT_ID_SELF);
if *chat_id == 0 && self_sent { if *chat_id == 0 && self_sent {
// from_id==to_id==DC_CONTACT_ID_SELF - this is a self-sent messages, // from_id==to_id==DC_CONTACT_ID_SELF - this is a self-sent messages,
@@ -1405,13 +1407,20 @@ fn check_verified_properties(
} }
} }
// we do not need to check if we are verified with ourself
let mut to_ids = to_ids.clone();
to_ids.remove(&DC_CONTACT_ID_SELF);
if to_ids.is_empty() {
return Ok(());
}
let to_ids_str = join(to_ids.iter().map(|x| x.to_string()), ","); let to_ids_str = join(to_ids.iter().map(|x| x.to_string()), ",");
let rows = context.sql.query_map( let rows = context.sql.query_map(
format!( format!(
"SELECT c.addr, LENGTH(ps.verified_key_fingerprint) FROM contacts c \ "SELECT c.addr, LENGTH(ps.verified_key_fingerprint) FROM contacts c \
LEFT JOIN acpeerstates ps ON c.addr=ps.addr WHERE c.id IN({}) ", LEFT JOIN acpeerstates ps ON c.addr=ps.addr WHERE c.id IN({}) ",
to_ids_str, to_ids_str
), ),
params![], params![],
|row| Ok((row.get::<_, String>(0)?, row.get::<_, i32>(1).unwrap_or(0))), |row| Ok((row.get::<_, String>(0)?, row.get::<_, i32>(1).unwrap_or(0))),
@@ -1422,6 +1431,12 @@ fn check_verified_properties(
)?; )?;
for (to_addr, _is_verified) in rows.into_iter() { for (to_addr, _is_verified) in rows.into_iter() {
info!(
context,
"check_verified_properties: {:?} self={:?}",
to_addr,
context.is_self_addr(&to_addr)
);
let mut is_verified = _is_verified != 0; let mut is_verified = _is_verified != 0;
let mut peerstate = Peerstate::from_addr(context, &context.sql, &to_addr); let mut peerstate = Peerstate::from_addr(context, &context.sql, &to_addr);
@@ -1592,20 +1607,21 @@ fn dc_add_or_lookup_contacts_by_address_list(
for addr in addrs.iter() { for addr in addrs.iter() {
match addr { match addr {
mailparse::MailAddr::Single(info) => { mailparse::MailAddr::Single(info) => {
to_ids.insert( to_ids.insert(add_or_lookup_contact_by_addr(
add_or_lookup_contact_by_addr(context, &info.display_name, &info.addr, origin)? context,
); &info.display_name,
&info.addr,
origin,
)?);
} }
mailparse::MailAddr::Group(infos) => { mailparse::MailAddr::Group(infos) => {
for info in &infos.addrs { for info in &infos.addrs {
to_ids.insert( to_ids.insert(add_or_lookup_contact_by_addr(
add_or_lookup_contact_by_addr( context,
context, &info.display_name,
&info.display_name, &info.addr,
&info.addr, origin,
origin, )?);
)?
);
} }
} }
} }
@@ -1624,14 +1640,11 @@ fn add_or_lookup_contact_by_addr(
if context.is_self_addr(addr)? { if context.is_self_addr(addr)? {
return Ok(DC_CONTACT_ID_SELF); return Ok(DC_CONTACT_ID_SELF);
} }
// add addr_spec if missing, update otherwise
let display_name_normalized = display_name let display_name_normalized = display_name
.as_ref() .as_ref()
.map(normalize_name) .map(normalize_name)
.unwrap_or_default(); .unwrap_or_default();
// can be NULL
info!( info!(
context, context,
"looking up addr={:?} display_name={:?}", addr, display_name_normalized "looking up addr={:?} display_name={:?}", addr, display_name_normalized