diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 1e19c7844..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, @@ -1063,13 +1063,15 @@ 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| get_folder_meaning(folder) == FolderMeaning::SentObjects) + .or_else(|| { + info!(context, "can't find sentbox by attributes, checking names"); + folders.iter().find(|folder| { + get_folder_meaning_by_name(folder) == FolderMeaning::SentObjects + }) + }); info!(context, "sentbox folder is {:?}", sentbox_folder); let mut delimiter = "."; @@ -1235,7 +1237,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) { @@ -1246,27 +1248,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, - } + FolderMeaning::Unknown } fn precheck_imf(