From 350c8033b10cc9a392a8655dbd46f7253a7d044a Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Wed, 22 Jul 2020 11:12:06 +0300 Subject: [PATCH] imap: use ImapLineIterator in imap_mailboxes() --- melib/src/backends/imap.rs | 8 ++++---- melib/src/backends/imap/protocol_parser.rs | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs index 94eb930f..1434e34c 100644 --- a/melib/src/backends/imap.rs +++ b/melib/src/backends/imap.rs @@ -919,10 +919,10 @@ impl ImapType { .read_response(&mut res, RequiredResponses::LIST_REQUIRED) .await?; debug!("out: {}", &res); - let mut lines = res.lines(); + let mut lines = res.split_rn(); /* Remove "M__ OK .." line */ lines.next_back(); - for l in lines.map(|l| l.trim()) { + for l in lines { if let Ok(mut mailbox) = protocol_parser::list_mailbox_result(l.as_bytes()).map(|(_, v)| v) { @@ -959,11 +959,11 @@ impl ImapType { conn.send_command(b"LSUB \"\" \"*\"").await?; conn.read_response(&mut res, RequiredResponses::LSUB_REQUIRED) .await?; - let mut lines = res.lines(); + let mut lines = res.split_rn(); debug!("out: {}", &res); /* Remove "M__ OK .." line */ lines.next_back(); - for l in lines.map(|l| l.trim()) { + for l in lines { if let Ok(subscription) = protocol_parser::list_mailbox_result(l.as_bytes()).map(|(_, v)| v) { diff --git a/melib/src/backends/imap/protocol_parser.rs b/melib/src/backends/imap/protocol_parser.rs index 4e16b236..fe95d54c 100644 --- a/melib/src/backends/imap/protocol_parser.rs +++ b/melib/src/backends/imap/protocol_parser.rs @@ -392,6 +392,7 @@ pub fn list_mailbox_result(input: &[u8]) -> IResult<&[u8], ImapMailbox> { let (input, separator) = delimited(tag(b"\""), take(1_u32), tag(b"\""))(input)?; let (input, _) = take(1_u32)(input)?; let (input, path) = mailbox_token(input)?; + let (input, _) = tag("\r\n")(input)?; Ok(( input, ({ @@ -1565,5 +1566,5 @@ fn string_token(input: &[u8]) -> IResult<&[u8], &[u8]> { // atom-specials = "(" / ")" / "{" / SP / CTL / list-wildcards / quoted-specials / resp-specials fn astring_char_tokens(input: &[u8]) -> IResult<&[u8], &[u8]> { // FIXME - is_not(" ")(input) + is_not(" \r\n")(input) }