diff options
Diffstat (limited to 'src/imap/selectors.rs')
-rw-r--r-- | src/imap/selectors.rs | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/src/imap/selectors.rs b/src/imap/selectors.rs deleted file mode 100644 index 09320c3..0000000 --- a/src/imap/selectors.rs +++ /dev/null @@ -1,100 +0,0 @@ -use std::iter::zip; - -use anyhow::{anyhow, Result}; - -use crate::cryptoblob::Key; -use crate::imap::mail_view::{FetchedMail, MailView}; -use crate::imap::mailbox_view::MailIdentifiers; -use crate::mail::mailbox::MailMeta; -use crate::mail::unique_ident::UniqueIdent; - -pub struct BodyIdentifier<'a> { - pub msg_uuid: &'a UniqueIdent, - pub msg_key: &'a Key, -} - -#[derive(Default)] -pub struct MailSelectionBuilder<'a> { - //attrs: AttributeProxy, - mail_count: usize, - need_body: bool, - mi: &'a [MailIdentifiers], - meta: &'a [MailMeta], - flags: &'a [&'a Vec<String>], - bodies: &'a [Vec<u8>], -} - -impl<'a> MailSelectionBuilder<'a> { - pub fn new(need_body: bool, mail_count: usize) -> Self { - Self { - mail_count, - need_body, - ..MailSelectionBuilder::default() - } - } - - pub fn with_mail_identifiers(&mut self, mi: &'a [MailIdentifiers]) -> &mut Self { - self.mi = mi; - self - } - - pub fn with_metadata(&mut self, meta: &'a [MailMeta]) -> &mut Self { - self.meta = meta; - self - } - - pub fn with_flags(&mut self, flags: &'a [&'a Vec<String>]) -> &mut Self { - self.flags = flags; - self - } - - pub fn bodies_to_collect(&self) -> Vec<BodyIdentifier> { - if !self.need_body { - return vec![]; - } - zip(self.mi, self.meta) - .map(|(mi, meta)| BodyIdentifier { - msg_uuid: &mi.uuid, - msg_key: &meta.message_key, - }) - .collect::<Vec<_>>() - } - - pub fn with_bodies(&mut self, rbodies: &'a [Vec<u8>]) -> &mut Self { - self.bodies = rbodies; - self - } - - pub fn build(&self) -> Result<Vec<MailView<'a>>> { - let mut bodies = vec![]; - - if !self.need_body { - for m in self.meta.iter() { - let (_, hdrs) = - eml_codec::parse_imf(&m.headers).or(Err(anyhow!("Invalid mail headers")))?; - bodies.push(FetchedMail::Partial(hdrs)); - } - } else { - for rb in self.bodies.iter() { - let (_, p) = eml_codec::parse_message(&rb).or(Err(anyhow!("Invalid mail body")))?; - bodies.push(FetchedMail::new_from_message(p)); - } - } - - if self.mi.len() != self.mail_count && self.meta.len() != self.mail_count - || self.flags.len() != self.mail_count - || bodies.len() != self.mail_count - { - return Err(anyhow!("Can't build a mail view selection as parts were not correctly registered into the builder.")); - } - - Ok(zip(self.mi, zip(self.meta, zip(self.flags, bodies))) - .map(|(ids, (meta, (flags, content)))| MailView { - ids, - meta, - flags, - content, - }) - .collect()) - } -} |