diff options
Diffstat (limited to 'melib/src/backends/imap.rs')
-rw-r--r-- | melib/src/backends/imap.rs | 32 |
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 { |