mirror of
https://github.com/chatmail/core.git
synced 2026-05-07 08:56:30 +03:00
Merge pull request #1548 from deltachat/fix-folders
fix(imap): deterministically detect folder meaning
This commit is contained in:
@@ -1140,54 +1140,54 @@ impl Imap {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut delimiter = ".".to_string();
|
||||||
|
let mut delimiter_is_default = true;
|
||||||
let mut sentbox_folder = None;
|
let mut sentbox_folder = None;
|
||||||
let mut mvbox_folder = None;
|
let mut mvbox_folder = None;
|
||||||
|
let mut fallback_folder = get_fallback_folder(&delimiter);
|
||||||
let mut delimiter = ".".to_string();
|
|
||||||
if let Some(folder) = folders.next().await {
|
|
||||||
let folder = folder.map_err(|err| Error::Other(err.to_string()))?;
|
|
||||||
if let Some(d) = folder.delimiter() {
|
|
||||||
if !d.is_empty() {
|
|
||||||
delimiter = d.to_string();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
info!(context, "Using \"{}\" as folder-delimiter.", delimiter);
|
|
||||||
let fallback_folder = format!("INBOX{}DeltaChat", delimiter);
|
|
||||||
|
|
||||||
while let Some(folder) = folders.next().await {
|
while let Some(folder) = folders.next().await {
|
||||||
let folder = folder.map_err(|err| Error::Other(err.to_string()))?;
|
let folder = folder.map_err(|err| Error::Other(err.to_string()))?;
|
||||||
info!(context, "Scanning folder: {:?}", folder);
|
info!(context, "Scanning folder: {:?}", folder);
|
||||||
|
|
||||||
if mvbox_folder.is_none()
|
// Update the delimiter iff there is a different one, but only once.
|
||||||
&& (folder.name() == "DeltaChat" || folder.name() == fallback_folder)
|
if let Some(d) = folder.delimiter() {
|
||||||
{
|
if delimiter_is_default && !d.is_empty() && delimiter != d {
|
||||||
mvbox_folder = Some(folder.name().to_string());
|
delimiter = d.to_string();
|
||||||
}
|
fallback_folder = get_fallback_folder(&delimiter);
|
||||||
|
delimiter_is_default = false;
|
||||||
if sentbox_folder.is_none() {
|
|
||||||
if let FolderMeaning::SentObjects = get_folder_meaning(&folder) {
|
|
||||||
sentbox_folder = Some(folder);
|
|
||||||
} else if let FolderMeaning::SentObjects = get_folder_meaning_by_name(&folder) {
|
|
||||||
sentbox_folder = Some(folder);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if mvbox_folder.is_some() && sentbox_folder.is_some() {
|
if folder.name() == "DeltaChat" {
|
||||||
break;
|
// Always takes precendent
|
||||||
|
mvbox_folder = Some(folder.name().to_string());
|
||||||
|
} else if folder.name() == fallback_folder {
|
||||||
|
// only set iff none has been already set
|
||||||
|
if mvbox_folder.is_none() {
|
||||||
|
mvbox_folder = Some(folder.name().to_string());
|
||||||
|
}
|
||||||
|
} 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) {
|
||||||
|
// only set iff none has been already set
|
||||||
|
if sentbox_folder.is_none() {
|
||||||
|
sentbox_folder = Some(folder.name().to_string());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
info!(context, "sentbox folder is {:?}", sentbox_folder);
|
|
||||||
|
|
||||||
drop(folders);
|
drop(folders);
|
||||||
|
|
||||||
|
info!(context, "Using \"{}\" as folder-delimiter.", delimiter);
|
||||||
|
info!(context, "sentbox folder is {:?}", sentbox_folder);
|
||||||
|
|
||||||
if mvbox_folder.is_none() && create_mvbox {
|
if mvbox_folder.is_none() && create_mvbox {
|
||||||
info!(context, "Creating MVBOX-folder \"DeltaChat\"...",);
|
info!(context, "Creating MVBOX-folder \"DeltaChat\"...",);
|
||||||
|
|
||||||
match session.create("DeltaChat").await {
|
match session.create("DeltaChat").await {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
mvbox_folder = Some("DeltaChat".into());
|
mvbox_folder = Some("DeltaChat".into());
|
||||||
|
|
||||||
info!(context, "MVBOX-folder created.",);
|
info!(context, "MVBOX-folder created.",);
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
@@ -1233,11 +1233,7 @@ impl Imap {
|
|||||||
if let Some(ref sentbox_folder) = sentbox_folder {
|
if let Some(ref sentbox_folder) = sentbox_folder {
|
||||||
context
|
context
|
||||||
.sql
|
.sql
|
||||||
.set_raw_config(
|
.set_raw_config(context, "configured_sentbox_folder", Some(sentbox_folder))
|
||||||
context,
|
|
||||||
"configured_sentbox_folder",
|
|
||||||
Some(sentbox_folder.name()),
|
|
||||||
)
|
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
context
|
context
|
||||||
@@ -1514,3 +1510,7 @@ async fn message_needs_processing(
|
|||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_fallback_folder(delimiter: &str) -> String {
|
||||||
|
format!("INBOX{}DeltaChat", delimiter)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user