Implement get_headerdef method for MailHeader slices

This commit is contained in:
Alexander Krotov
2020-02-11 00:26:06 +03:00
parent f5bb57d6a6
commit c801775a39
5 changed files with 54 additions and 31 deletions

View File

@@ -14,8 +14,6 @@ use async_imap::{
use async_std::sync::{Mutex, RwLock};
use async_std::task;
use mailparse::MailHeaderMap;
use crate::config::*;
use crate::constants::*;
use crate::context::Context;
@@ -23,7 +21,7 @@ use crate::dc_receive_imf::{
dc_receive_imf, from_field_to_contact_id, is_msgrmsg_rfc724_mid_in_list,
};
use crate::events::Event;
use crate::headerdef::HeaderDef;
use crate::headerdef::{HeaderDef, HeaderDefMap};
use crate::imap_client::*;
use crate::job::{job_add, Action};
use crate::login_param::{CertificateChecks, LoginParam};
@@ -1304,31 +1302,24 @@ fn get_fetch_headers(prefetch_msg: &Fetch) -> Result<Vec<mailparse::MailHeader>>
}
fn prefetch_get_message_id(headers: &[mailparse::MailHeader]) -> Result<String> {
if let Some(message_id) = headers.get_first_value(&HeaderDef::MessageId.get_headername())? {
if let Some(message_id) = headers.get_headerdef(HeaderDef::MessageId)? {
Ok(parse_message_id(&message_id)?)
} else {
Err(Error::Other("prefetch: No message ID found".to_string()))
}
}
/// Checks if fetch result contains a header
fn prefetch_has_header(headers: &[mailparse::MailHeader], headerdef: HeaderDef) -> Result<bool> {
Ok(headers
.get_first_value(&headerdef.get_headername())?
.is_some())
}
fn prefetch_is_reply_to_chat_message(
context: &Context,
headers: &[mailparse::MailHeader],
) -> Result<bool> {
if let Some(value) = headers.get_first_value(&HeaderDef::InReplyTo.get_headername())? {
if let Some(value) = headers.get_headerdef(HeaderDef::InReplyTo)? {
if is_msgrmsg_rfc724_mid_in_list(context, &value) {
return Ok(true);
}
}
if let Some(value) = headers.get_first_value(&HeaderDef::References.get_headername())? {
if let Some(value) = headers.get_headerdef(HeaderDef::References)? {
if is_msgrmsg_rfc724_mid_in_list(context, &value) {
return Ok(true);
}
@@ -1342,16 +1333,15 @@ fn prefetch_should_download(
headers: &[mailparse::MailHeader],
show_emails: ShowEmails,
) -> Result<bool> {
let is_chat_message = prefetch_has_header(&headers, HeaderDef::ChatVersion)?;
let is_chat_message = headers.get_headerdef(HeaderDef::ChatVersion)?.is_some();
let is_reply_to_chat_message = prefetch_is_reply_to_chat_message(context, &headers)?;
// Autocrypt Setup Message should be shown even if it is from non-chat client.
let is_autocrypt_setup_message =
prefetch_has_header(&headers, HeaderDef::AutocryptSetupMessage)?;
let is_autocrypt_setup_message = headers
.get_headerdef(HeaderDef::AutocryptSetupMessage)?
.is_some();
let from_field = headers
.get_first_value(&HeaderDef::From_.get_headername())?
.unwrap_or_default();
let from_field = headers.get_headerdef(HeaderDef::From_)?.unwrap_or_default();
let (_contact_id, blocked_contact, origin) = from_field_to_contact_id(context, &from_field)?;
let accepted_contact = origin.is_known();