Fleshed out some methods in the Filesystem mail store
This commit is contained in:
parent
0a30c49d49
commit
4f2f151173
2 changed files with 27 additions and 1 deletions
|
@ -38,7 +38,25 @@ impl MailStore for Filesystem {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_folder(&self, user: &str, folder: &str) -> Option<Folder> {
|
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> {
|
fn get_message(&self, user: &str, folder: &str, title: &str) -> Option<Message> {
|
||||||
|
|
|
@ -78,3 +78,11 @@ impl fmt::Display for Message {
|
||||||
write!(f, "{}\r\n", self.body)
|
write!(f, "{}\r\n", self.body)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl FromStr for Message {
|
||||||
|
type Err = String;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue