From 4f2f1511734755c3e6fddeccf21dc32068bdc0c0 Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Sun, 28 May 2023 23:32:52 -0400 Subject: [PATCH] Fleshed out some methods in the Filesystem mail store --- src/mailstore/filesystem.rs | 20 +++++++++++++++++++- src/message/mod.rs | 8 ++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/mailstore/filesystem.rs b/src/mailstore/filesystem.rs index ca12ccd..fd4b738 100644 --- a/src/mailstore/filesystem.rs +++ b/src/mailstore/filesystem.rs @@ -38,7 +38,25 @@ impl MailStore for Filesystem { } fn get_folder(&self, user: &str, folder: &str) -> Option { - todo!() + let Some((user, host)) = user.rsplit_once('@') else { + return None; + }; + let mut path = self.path.clone(); + path.push(host); + path.push(user); + path.push(folder); + let Ok(dir) = fs::read_dir(path) else { + return None; + }; + let mut folder = Folder { name: folder.to_string(), messages: HashMap::new() }; + dir.filter(|x| x.is_ok()).map(|x| x.unwrap()).for_each(|e| { + if let Ok(contents) = fs::read_to_string(e.path()) { + if let Ok(message) = contents.parse::() { + folder.messages.insert(message.id.clone(), message); + } + } + }); + Some(folder) } fn get_message(&self, user: &str, folder: &str, title: &str) -> Option { diff --git a/src/message/mod.rs b/src/message/mod.rs index f4ded5d..914a018 100644 --- a/src/message/mod.rs +++ b/src/message/mod.rs @@ -78,3 +78,11 @@ impl fmt::Display for Message { write!(f, "{}\r\n", self.body) } } + +impl FromStr for Message { + type Err = String; + + fn from_str(s: &str) -> Result { + todo!() + } +}