melib/imap: small fixes

- Ignore final line ("M__ OK ...") when parsing FETCH response.

- Remove unnecessary import and reword some error messages
memfd
Manos Pitsidianakis 2020-01-27 15:55:01 +02:00
parent 254028fa47
commit 77d9cef6fc
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
3 changed files with 15 additions and 10 deletions

View File

@ -630,7 +630,10 @@ impl ImapType {
conn.send_command(b"LIST \"\" \"*\"")?; conn.send_command(b"LIST \"\" \"*\"")?;
conn.read_response(&mut res)?; conn.read_response(&mut res)?;
debug!("out: {}", &res); debug!("out: {}", &res);
for l in res.lines().map(|l| l.trim()) { let mut lines = res.lines();
/* Remove "M__ OK .." line */
lines.next_back();
for l in lines.map(|l| l.trim()) {
if let Ok(mut folder) = if let Ok(mut folder) =
protocol_parser::list_folder_result(l.as_bytes()).to_full_result() protocol_parser::list_folder_result(l.as_bytes()).to_full_result()
{ {
@ -666,7 +669,10 @@ impl ImapType {
conn.send_command(b"LSUB \"\" \"*\"")?; conn.send_command(b"LSUB \"\" \"*\"")?;
conn.read_response(&mut res)?; conn.read_response(&mut res)?;
debug!("out: {}", &res); debug!("out: {}", &res);
for l in res.lines().map(|l| l.trim()) { let mut lines = res.lines();
/* Remove "M__ OK .." line */
lines.next_back();
for l in lines.map(|l| l.trim()) {
if let Ok(subscription) = if let Ok(subscription) =
protocol_parser::list_folder_result(l.as_bytes()).to_full_result() protocol_parser::list_folder_result(l.as_bytes()).to_full_result()
{ {

View File

@ -27,7 +27,6 @@ use std::io::Write;
extern crate native_tls; extern crate native_tls;
use fnv::FnvHashSet; use fnv::FnvHashSet;
use native_tls::TlsConnector; use native_tls::TlsConnector;
use std::borrow::Cow;
use std::iter::FromIterator; use std::iter::FromIterator;
use std::net::SocketAddr; use std::net::SocketAddr;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};

View File

@ -350,7 +350,7 @@ pub fn uid_fetch_response(input: &str) -> ImapParseResult<UidFetchResponse<'_>>
ret.uid = usize::from_str(unsafe { std::str::from_utf8_unchecked(uid) }).unwrap(); ret.uid = usize::from_str(unsafe { std::str::from_utf8_unchecked(uid) }).unwrap();
} else { } else {
return debug!(Err(MeliError::new(format!( return debug!(Err(MeliError::new(format!(
"217Unexpected input while parsing UID FETCH response. Got: `{:.40}`", "Unexpected input while parsing UID FETCH response. Got: `{:.40}`",
input input
)))); ))));
} }
@ -361,7 +361,7 @@ pub fn uid_fetch_response(input: &str) -> ImapParseResult<UidFetchResponse<'_>>
i += (input.len() - i - rest.len()) + 1; i += (input.len() - i - rest.len()) + 1;
} else { } else {
return debug!(Err(MeliError::new(format!( return debug!(Err(MeliError::new(format!(
"228Unexpected input while parsing UID FETCH response. Got: `{:.40}`", "Unexpected input while parsing UID FETCH response. Got: `{:.40}`",
input input
)))); ))));
} }
@ -381,7 +381,7 @@ pub fn uid_fetch_response(input: &str) -> ImapParseResult<UidFetchResponse<'_>>
i += input.len() - i - rest.len(); i += input.len() - i - rest.len();
} else { } else {
return debug!(Err(MeliError::new(format!( return debug!(Err(MeliError::new(format!(
"248Unexpected input while parsing UID FETCH response. Got: `{:.40}`", "Unexpected input while parsing UID FETCH response. Got: `{:.40}`",
input input
)))); ))));
} }
@ -392,7 +392,7 @@ pub fn uid_fetch_response(input: &str) -> ImapParseResult<UidFetchResponse<'_>>
i += input.len() - i - rest.len(); i += input.len() - i - rest.len();
} else { } else {
return debug!(Err(MeliError::new(format!( return debug!(Err(MeliError::new(format!(
"264Unexpected input while parsing UID FETCH response. Got: `{:.40}`", "Unexpected input while parsing UID FETCH response. Got: `{:.40}`",
&input[i..] &input[i..]
)))); ))));
} }
@ -408,9 +408,9 @@ pub fn uid_fetch_response(input: &str) -> ImapParseResult<UidFetchResponse<'_>>
} else if input.as_bytes()[struct_ptr] == b')' { } else if input.as_bytes()[struct_ptr] == b')' {
if parenth_level == 0 { if parenth_level == 0 {
return debug!(Err(MeliError::new(format!( return debug!(Err(MeliError::new(format!(
"280Unexpected input while parsing UID FETCH response. Got: `{:.40}`", "Unexpected input while parsing UID FETCH response. Got: `{:.40}`",
&input[struct_ptr..] &input[struct_ptr..]
)))); ))));
} }
parenth_level -= 1; parenth_level -= 1;
if parenth_level == 0 { if parenth_level == 0 {