Return &str from extract_grpid

This commit is contained in:
Alexander Krotov
2020-01-11 15:59:04 +03:00
committed by holger krekel
parent c7b2bdfaac
commit ee4adc1363

View File

@@ -787,10 +787,10 @@ fn create_or_lookup_group(
} }
if grpid.is_empty() { if grpid.is_empty() {
if let Some(extracted_grpid) = extract_grpid(mime_parser, HeaderDef::InReplyTo) { if let Some(extracted_grpid) = extract_grpid(mime_parser, HeaderDef::InReplyTo) {
grpid = extracted_grpid; grpid = extracted_grpid.to_string();
} else if let Some(extracted_grpid) = extract_grpid(mime_parser, HeaderDef::References) } else if let Some(extracted_grpid) = extract_grpid(mime_parser, HeaderDef::References)
{ {
grpid = extracted_grpid; grpid = extracted_grpid.to_string();
} else { } else {
return create_or_lookup_adhoc_group( return create_or_lookup_adhoc_group(
context, context,
@@ -1058,17 +1058,13 @@ fn create_or_lookup_group(
} }
/// try extract a grpid from a message-id list header value /// try extract a grpid from a message-id list header value
fn extract_grpid(mime_parser: &MimeMessage, headerdef: HeaderDef) -> Option<String> { fn extract_grpid<'a>(mime_parser: &'a MimeMessage, headerdef: HeaderDef) -> Option<&'a str> {
if let Some(value) = mime_parser.get(headerdef) { let header = mime_parser.get(headerdef)?;
for part in value.split(',').map(str::trim) { let parts = header
if !part.is_empty() { .split(',')
if let Some(extracted_grpid) = dc_extract_grpid_from_rfc724_mid(part) { .map(str::trim)
return Some(extracted_grpid.to_string()); .filter(|part| !part.is_empty());
} parts.filter_map(dc_extract_grpid_from_rfc724_mid).next()
}
}
}
None
} }
/// Handle groups for received messages, return chat_id/Blocked status on success /// Handle groups for received messages, return chat_id/Blocked status on success
@@ -1624,7 +1620,7 @@ mod tests {
hello\x00"; hello\x00";
let mimeparser = MimeMessage::from_bytes(&context.ctx, &raw[..]).unwrap(); let mimeparser = MimeMessage::from_bytes(&context.ctx, &raw[..]).unwrap();
assert_eq!(extract_grpid(&mimeparser, HeaderDef::InReplyTo), None); assert_eq!(extract_grpid(&mimeparser, HeaderDef::InReplyTo), None);
let grpid = Some("HcxyMARjyJy".to_string()); let grpid = Some("HcxyMARjyJy");
assert_eq!(extract_grpid(&mimeparser, HeaderDef::References), grpid); assert_eq!(extract_grpid(&mimeparser, HeaderDef::References), grpid);
} }
@@ -1638,7 +1634,7 @@ mod tests {
\n\ \n\
hello\x00"; hello\x00";
let mimeparser = MimeMessage::from_bytes(&context.ctx, &raw[..]).unwrap(); let mimeparser = MimeMessage::from_bytes(&context.ctx, &raw[..]).unwrap();
let grpid = Some("HcxyMARjyJy".to_string()); let grpid = Some("HcxyMARjyJy");
assert_eq!(extract_grpid(&mimeparser, HeaderDef::InReplyTo), grpid); assert_eq!(extract_grpid(&mimeparser, HeaderDef::InReplyTo), grpid);
assert_eq!(extract_grpid(&mimeparser, HeaderDef::References), grpid); assert_eq!(extract_grpid(&mimeparser, HeaderDef::References), grpid);
} }