diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 543c116c5..ebc846b36 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1246,7 +1246,9 @@ impl Imap { } else if let FolderMeaning::SentObjects = get_folder_meaning(&folder) { // Always takes precedent sentbox_folder = Some(folder.name().to_string()); - } else if let FolderMeaning::SentObjects = get_folder_meaning_by_name(&folder) { + } else if let FolderMeaning::SentObjects = + get_folder_meaning_by_name(&folder.name()) + { // only set iff none has been already set if sentbox_folder.is_none() { sentbox_folder = Some(folder.name().to_string()); @@ -1325,11 +1327,43 @@ impl Imap { // only watching this folder is not working. at least, this is no show stopper. // 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", "sentmail", "sent objects", "gesendet"]; - let lower = folder_name.name().to_lowercase(); +fn get_folder_meaning_by_name(folder_name: &str) -> FolderMeaning { + // source: https://stackoverflow.com/questions/2185391/localized-gmail-imap-folders + let sent_names = vec![ + "sent", + "sentmail", + "sent objects", + "gesendet", + "Sent Mail", + "Sendte e-mails", + "Enviados", + "Messages envoyés", + "Messages envoyes", + "Posta inviata", + "Verzonden berichten", + "Wyslane", + "E-mails enviados", + "Correio enviado", + "Enviada", + "Enviado", + "Gönderildi", + "Inviati", + "Odeslaná pošta", + "Sendt", + "Skickat", + "Verzonden", + "Wysłane", + "Éléments envoyés", + "Απεσταλμένα", + "Отправленные", + "寄件備份", + "已发送邮件", + "送信済み", + "보낸편지함", + ]; + let lower = folder_name.to_lowercase(); - if sent_names.into_iter().any(|s| s == lower) { + if sent_names.into_iter().any(|s| s.to_lowercase() == lower) { FolderMeaning::SentObjects } else { FolderMeaning::Unknown @@ -1575,3 +1609,32 @@ async fn message_needs_processing( fn get_fallback_folder(delimiter: &str) -> String { format!("INBOX{}DeltaChat", delimiter) } + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn test_get_folder_meaning_by_name() { + assert_eq!( + get_folder_meaning_by_name("Gesendet"), + FolderMeaning::SentObjects + ); + assert_eq!( + get_folder_meaning_by_name("GESENDET"), + FolderMeaning::SentObjects + ); + assert_eq!( + get_folder_meaning_by_name("gesendet"), + FolderMeaning::SentObjects + ); + assert_eq!( + get_folder_meaning_by_name("Messages envoyés"), + FolderMeaning::SentObjects + ); + assert_eq!( + get_folder_meaning_by_name("mEsSaGes envoyÉs"), + FolderMeaning::SentObjects + ); + assert_eq!(get_folder_meaning_by_name("xxx"), FolderMeaning::Unknown); + } +}