From 5a5408ecd5889d711ef3a7e9588c6f873a5cc758 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Fri, 24 Jul 2020 22:05:01 +0300 Subject: [PATCH] imap: small fixes --- melib/src/backends/imap.rs | 16 +++++++++------- melib/src/backends/imap/connection.rs | 2 ++ melib/src/backends/imap/protocol_parser.rs | 3 ++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs index 344055f5..9a6a1dbc 100644 --- a/melib/src/backends/imap.rs +++ b/melib/src/backends/imap.rs @@ -682,6 +682,13 @@ impl MailBackend for ImapType { { let mailboxes = uid_store.mailboxes.lock().await; + + if mailboxes.values().any(|f| f.path == path) { + return Err(MeliError::new(format!( + "Mailbox named `{}` already exists.", + path, + ))); + } for root_mailbox in mailboxes.values().filter(|f| f.parent.is_none()) { if path.starts_with(&root_mailbox.name) { debug!("path starts with {:?}", &root_mailbox); @@ -693,12 +700,8 @@ impl MailBackend for ImapType { } } - if mailboxes.values().any(|f| f.path == path) { - return Err(MeliError::new(format!( - "Mailbox named `{}` already exists.", - path, - ))); - } + /* FIXME Do not try to CREATE a sub-mailbox in a mailbox that has the \Noinferiors + * flag set. */ } let mut response = String::with_capacity(8 * 1024); @@ -1387,7 +1390,6 @@ async fn fetch_hlpr( permissions.set_flags = !examine_response.read_only; permissions.rename_messages = !examine_response.read_only; permissions.delete_messages = !examine_response.read_only; - permissions.delete_messages = !examine_response.read_only; mailbox_exists .lock() .unwrap() diff --git a/melib/src/backends/imap/connection.rs b/melib/src/backends/imap/connection.rs index 6ad569fc..2c736a66 100644 --- a/melib/src/backends/imap/connection.rs +++ b/melib/src/backends/imap/connection.rs @@ -525,10 +525,12 @@ impl ImapConnection { ret.push_str(&response); } ImapResponse::No(ref response_code) => { + //FIXME return error debug!("Received NO response: {:?} {:?}", response_code, response); ret.push_str(&response); } ImapResponse::Bad(ref response_code) => { + //FIXME return error debug!("Received BAD response: {:?} {:?}", response_code, response); ret.push_str(&response); } diff --git a/melib/src/backends/imap/protocol_parser.rs b/melib/src/backends/imap/protocol_parser.rs index 91558c03..f6e8bf52 100644 --- a/melib/src/backends/imap/protocol_parser.rs +++ b/melib/src/backends/imap/protocol_parser.rs @@ -539,6 +539,7 @@ pub fn uid_fetch_response(input: &str) -> ImapParseResult> let mut has_attachments = false; while i < input.len() { eat_whitespace!(break); + bounds!(break); if input[i..].starts_with("UID ") { i += "UID ".len(); @@ -877,12 +878,12 @@ pub enum UntaggedResponse { } pub fn untagged_responses(input: &[u8]) -> IResult<&[u8], Option> { - debug!("Parse untagged response from {:?}", to_str!(input)); let (input, _) = tag("* ")(input)?; let (input, num) = map_res(digit1, |s| usize::from_str(to_str!(s)))(input)?; let (input, _) = tag(" ")(input)?; let (input, _tag) = take_until("\r\n")(input)?; let (input, _) = tag("\r\n")(input)?; + debug!("Parse untagged response from {:?}", to_str!(input)); Ok((input, { use UntaggedResponse::*; match _tag {