Merge pull request #1488 from deltachat/fix-get-sent-folder

improve finding out the sent-folder
This commit is contained in:
bjoern
2020-05-17 03:01:39 +02:00
committed by GitHub

View File

@@ -135,7 +135,7 @@ impl async_imap::Authenticator for OAuth2 {
} }
} }
#[derive(Debug)] #[derive(Debug, PartialEq)]
enum FolderMeaning { enum FolderMeaning {
Unknown, Unknown,
SentObjects, SentObjects,
@@ -1063,13 +1063,15 @@ impl Imap {
} }
}; };
let sentbox_folder = let sentbox_folder = folders
folders .iter()
.iter() .find(|folder| get_folder_meaning(folder) == FolderMeaning::SentObjects)
.find(|folder| match get_folder_meaning(folder) { .or_else(|| {
FolderMeaning::SentObjects => true, info!(context, "can't find sentbox by attributes, checking names");
_ => false, folders.iter().find(|folder| {
}); get_folder_meaning_by_name(folder) == FolderMeaning::SentObjects
})
});
info!(context, "sentbox folder is {:?}", sentbox_folder); info!(context, "sentbox folder is {:?}", sentbox_folder);
let mut delimiter = "."; 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 // 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. // but sth. different in others - a hard job.
fn get_folder_meaning_by_name(folder_name: &Name) -> FolderMeaning { 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(); let lower = folder_name.name().to_lowercase();
if sent_names.into_iter().any(|s| s == lower) { 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 { 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"]; let special_names = vec!["\\Spam", "\\Trash", "\\Drafts", "\\Junk"];
for attr in folder_name.attributes() { for attr in folder_name.attributes() {
if let NameAttribute::Custom(ref label) = attr { if let NameAttribute::Custom(ref label) = attr {
if special_names.iter().any(|s| *s == label) { if special_names.iter().any(|s| *s == label) {
res = FolderMeaning::Other; return FolderMeaning::Other;
} else if label == "\\Sent" { } else if label == "\\Sent" {
res = FolderMeaning::SentObjects return FolderMeaning::SentObjects;
} }
} }
} }
FolderMeaning::Unknown
match res {
FolderMeaning::Unknown => get_folder_meaning_by_name(folder_name),
_ => res,
}
} }
fn precheck_imf( fn precheck_imf(