Fleshed out some methods in the Filesystem mail store

This commit is contained in:
Nathan Fisher 2023-05-28 23:32:52 -04:00
parent 0a30c49d49
commit 4f2f151173
2 changed files with 27 additions and 1 deletions

View file

@ -38,7 +38,25 @@ impl MailStore for Filesystem {
}
fn get_folder(&self, user: &str, folder: &str) -> Option<Folder> {
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::<Message>() {
folder.messages.insert(message.id.clone(), message);
}
}
});
Some(folder)
}
fn get_message(&self, user: &str, folder: &str, title: &str) -> Option<Message> {

View file

@ -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<Self, Self::Err> {
todo!()
}
}