1use maildirs::Maildir;
7
8use crate::{
9 account::config::AccountConfig,
10 folder::{Folder, Folders},
11 maildir::MaildirContext,
12};
13
14use super::Result;
15
16impl Folders {
17 pub fn from_maildir_context(ctx: &MaildirContext) -> Self {
22 Folders::from_iter(ctx.root.iter().map(|entry| {
23 Folder {
24 kind: ctx
25 .account_config
26 .find_folder_kind_from_alias(&entry.name)
27 .or_else(|| entry.name.parse().ok()),
28 name: entry.name,
29 desc: entry.maildir.path().display().to_string(),
30 }
31 }))
32 }
33}
34
35impl Folder {
36 pub fn try_from_maildir(config: &AccountConfig, mdir: Maildir) -> Result<Self> {
42 let name = mdir.name()?.to_owned();
43 let kind = config
44 .find_folder_kind_from_alias(&name)
45 .or_else(|| name.parse().ok());
46 let desc = mdir.path().display().to_string();
47
48 Ok(Folder { kind, name, desc })
49 }
50}