From fc6691ce5b2bb34484e73e9cd3329b6de3b61c49 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Fri, 15 May 2020 23:05:23 +0200 Subject: [PATCH 1/4] add 'sentmail' to the list of known names for 'sent', acutally used by chello.at --- src/imap/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 1e19c7844..0e21a550d 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1235,7 +1235,7 @@ impl Imap { // CAVE: if possible, take care not to add a name here that is "sent" in one language // but sth. different in others - a hard job. fn get_folder_meaning_by_name(folder_name: &Name) -> FolderMeaning { - let sent_names = vec!["sent", "sent objects", "gesendet"]; + let sent_names = vec!["sent", "sentmail", "sent objects", "gesendet"]; let lower = folder_name.name().to_lowercase(); if sent_names.into_iter().any(|s| s == lower) { From 9e22bf39ccd44d91f2af9c9814922ebedb450255 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Fri, 15 May 2020 23:09:55 +0200 Subject: [PATCH 2/4] smoother searching for sentbox search for the sentbox in two passes: - first check the folder attributes - only if that fails, check for some known names this way, the sent-attribute always has precedence over the name; this was not the case before. moreover, this fixes an possibly wrong early exist when the attribute list is completely empty. --- src/imap/mod.rs | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 0e21a550d..498f1813a 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1063,13 +1063,21 @@ impl Imap { } }; - let sentbox_folder = - folders - .iter() - .find(|folder| match get_folder_meaning(folder) { - FolderMeaning::SentObjects => true, - _ => false, - }); + let sentbox_folder = folders + .iter() + .find(|folder| match get_folder_meaning(folder) { + FolderMeaning::SentObjects => true, + _ => false, + }) + .or_else(|| { + info!(context, "can't find sentbox by attributes, checking names"); + folders + .iter() + .find(|folder| match get_folder_meaning_by_name(folder) { + FolderMeaning::SentObjects => true, + _ => false, + }) + }); info!(context, "sentbox folder is {:?}", sentbox_folder); let mut delimiter = "."; @@ -1246,27 +1254,18 @@ fn get_folder_meaning_by_name(folder_name: &Name) -> FolderMeaning { } fn get_folder_meaning(folder_name: &Name) -> FolderMeaning { - if folder_name.attributes().is_empty() { - return FolderMeaning::Unknown; - } - - let mut res = FolderMeaning::Unknown; let special_names = vec!["\\Spam", "\\Trash", "\\Drafts", "\\Junk"]; for attr in folder_name.attributes() { if let NameAttribute::Custom(ref label) = attr { if special_names.iter().any(|s| *s == label) { - res = FolderMeaning::Other; + return FolderMeaning::Other; } else if label == "\\Sent" { - res = FolderMeaning::SentObjects + return FolderMeaning::SentObjects; } } } - - match res { - FolderMeaning::Unknown => get_folder_meaning_by_name(folder_name), - _ => res, - } + return FolderMeaning::Unknown; } fn precheck_imf( From eafb7b979d4a490f4116c8e409f96436165acbeb Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sat, 16 May 2020 00:09:22 +0200 Subject: [PATCH 3/4] make clippy happy --- src/imap/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 498f1813a..58f6d221b 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1265,7 +1265,7 @@ fn get_folder_meaning(folder_name: &Name) -> FolderMeaning { } } } - return FolderMeaning::Unknown; + FolderMeaning::Unknown } fn precheck_imf( From ab253744f8bb8f7683b9afe0d544971471204d9e Mon Sep 17 00:00:00 2001 From: Hocuri Date: Sat, 16 May 2020 15:07:01 +0200 Subject: [PATCH 4/4] Code style --- src/imap/mod.rs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 58f6d221b..6286ae4ff 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -135,7 +135,7 @@ impl async_imap::Authenticator for OAuth2 { } } -#[derive(Debug)] +#[derive(Debug, PartialEq)] enum FolderMeaning { Unknown, SentObjects, @@ -1065,18 +1065,12 @@ impl Imap { let sentbox_folder = folders .iter() - .find(|folder| match get_folder_meaning(folder) { - FolderMeaning::SentObjects => true, - _ => false, - }) + .find(|folder| get_folder_meaning(folder) == FolderMeaning::SentObjects) .or_else(|| { info!(context, "can't find sentbox by attributes, checking names"); - folders - .iter() - .find(|folder| match get_folder_meaning_by_name(folder) { - FolderMeaning::SentObjects => true, - _ => false, - }) + folders.iter().find(|folder| { + get_folder_meaning_by_name(folder) == FolderMeaning::SentObjects + }) }); info!(context, "sentbox folder is {:?}", sentbox_folder);