summaryrefslogtreecommitdiffstats
path: root/melib/src/backends/imap.rs
diff options
context:
space:
mode:
Diffstat (limited to 'melib/src/backends/imap.rs')
-rw-r--r--melib/src/backends/imap.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs
index de694f53..439fa3e8 100644
--- a/melib/src/backends/imap.rs
+++ b/melib/src/backends/imap.rs
@@ -517,6 +517,38 @@ impl MailBackend for ImapType {
None
}
}
+
+ fn create_folder(&mut self, path: String) -> Result<Folder> {
+ let mut response = String::with_capacity(8 * 1024);
+ if self
+ .folders
+ .read()
+ .unwrap()
+ .values()
+ .any(|f| f.path == path)
+ {
+ return Err(MeliError::new(format!(
+ "Folder named `{}` in account `{}` already exists.",
+ path, self.account_name,
+ )));
+ }
+ let mut conn_lck = self.connection.lock()?;
+ conn_lck.send_command(debug!(format!("CREATE \"{}\"", path,)).as_bytes())?;
+ conn_lck.read_response(&mut response)?;
+ conn_lck.send_command(debug!(format!("SUBSCRIBE \"{}\"", path,)).as_bytes())?;
+ conn_lck.read_response(&mut response)?;
+ drop(conn_lck);
+ self.folders.write().unwrap().clear();
+ self.folders().and_then(|f| {
+ debug!(f)
+ .into_iter()
+ .find(|(_, f)| f.path() == path)
+ .map(|f| f.1)
+ .ok_or(MeliError::new(
+ "Internal error: could not find folder after creating it?",
+ ))
+ })
+ }
}
impl ImapType {