use log::debug;
use crate::{
envelope::{Envelope, Envelopes},
flag::Flags,
message::Message,
};
impl Envelopes {
pub fn from_notmuch_msgs(msgs: notmuch::Messages) -> Self {
msgs.map(Envelope::from_notmuch_msg).collect()
}
}
impl Envelope {
pub fn from_notmuch_msg(msg: notmuch::Message) -> Self {
let id = msg.id();
let flags = Flags::from_notmuch_msg(&msg);
let message_id = get_header(&msg, "Message-ID");
let subject = get_header(&msg, "Subject");
let from = get_header(&msg, "From");
let date = get_header(&msg, "Date");
let headers = [message_id, subject, from, date].join("\r\n") + "\r\n\r\n";
let msg: Message = headers.as_bytes().into();
Envelope::from_msg(id, flags, msg)
}
}
fn get_header(msg: ¬much::Message, key: impl AsRef<str>) -> String {
let key = key.as_ref();
let val = match msg.header(key) {
Ok(Some(val)) => val,
Ok(None) => Default::default(),
Err(err) => {
debug!("cannot get header {key} from notmuch message: {err}");
debug!("{err:?}");
Default::default()
}
};
format!("{key}: {val}")
}