mirror of
https://github.com/chatmail/core.git
synced 2026-04-21 23:46:31 +03:00
Implement get_headerdef method for MailHeader slices
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user