From f28f177c6b8c49c4b215650c375001c0985b8e65 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Tue, 24 Mar 2020 19:18:18 +0100 Subject: [PATCH 1/5] use constant for folders_configured cache --- src/constants.rs | 3 +++ src/imap/mod.rs | 12 ++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/constants.rs b/src/constants.rs index 45ebe1375..50345caa1 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -214,6 +214,9 @@ pub const DC_BOB_SUCCESS: i32 = 1; // max. width/height of an avatar pub const AVATAR_SIZE: u32 = 192; +// this value can be increased if the folder configuration is changed and must be redone on next program start +pub const DC_FOLDERS_CONFIGURED_VERSION: i32 = 3; + #[derive( Debug, Display, diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 834120e0e..d073e41cd 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1074,9 +1074,7 @@ impl Imap { let folders_configured = context .sql .get_raw_config_int(context, "folders_configured"); - if folders_configured.unwrap_or_default() >= 3 { - // the "3" here we increase if we have future updates to - // to folder configuration + if folders_configured.unwrap_or_default() >= DC_FOLDERS_CONFIGURED_VERSION { return Ok(()); } @@ -1168,9 +1166,11 @@ impl Imap { Some(sentbox_folder.name()), )?; } - context - .sql - .set_raw_config_int(context, "folders_configured", 3)?; + context.sql.set_raw_config_int( + context, + "folders_configured", + DC_FOLDERS_CONFIGURED_VERSION, + )?; } info!(context, "FINISHED configuring IMAP-folders."); Ok(()) From 36e7090466a57ec1ebf4cbfbe08663b5468f7371 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Tue, 24 Mar 2020 19:37:41 +0100 Subject: [PATCH 2/5] force folder-reconfigure on dc_configure() --- src/configure/mod.rs | 2 +- src/imap/mod.rs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/configure/mod.rs b/src/configure/mod.rs index c5240e551..74ade9595 100644 --- a/src/configure/mod.rs +++ b/src/configure/mod.rs @@ -371,7 +371,7 @@ pub(crate) fn JobConfigureImap(context: &Context) -> job::Status { let create_mvbox = context.get_config_bool(Config::MvboxWatch) || context.get_config_bool(Config::MvboxMove); let imap = &context.inbox_thread.read().unwrap().imap; - if let Err(err) = imap.ensure_configured_folders(context, create_mvbox) { + if let Err(err) = imap.configure_folders(context, create_mvbox) { warn!(context, "configuring folders failed: {:?}", err); false } else { diff --git a/src/imap/mod.rs b/src/imap/mod.rs index d073e41cd..43f2395e5 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1078,6 +1078,10 @@ impl Imap { return Ok(()); } + self.configure_folders(context, create_mvbox) + } + + pub fn configure_folders(&self, context: &Context, create_mvbox: bool) -> Result<()> { task::block_on(async move { if !self.is_connected().await { return Err(Error::NoConnection); From e135c969c94f07c65ae3f4ad5fc1c0fc12b1f272 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Wed, 25 Mar 2020 13:16:23 +0100 Subject: [PATCH 3/5] figure out and use folder-delimiter provided by LIST command --- src/imap/mod.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 43f2395e5..b1dfa97ee 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1106,7 +1106,15 @@ impl Imap { }); info!(context, "sentbox folder is {:?}", sentbox_folder); - let delimiter = self.config.read().await.imap_delimiter; + let mut delimiter = "."; + if !folders.is_empty() { + if let Some(d) = &folders[0].delimiter() { + if !d.is_empty() { + delimiter = d; + } + } + } + info!(context, "Using \"{}\" as folder-delimiter.", delimiter); let fallback_folder = format!("INBOX{}DeltaChat", delimiter); let mut mvbox_folder = folders From ab8d75b1924000b9c6637aea5cb3e2f4d9ba9e55 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Wed, 25 Mar 2020 13:23:29 +0100 Subject: [PATCH 4/5] remove now unused ImapConfig.imap_delimiter --- src/imap/mod.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/imap/mod.rs b/src/imap/mod.rs index b1dfa97ee..548360f3a 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -188,7 +188,6 @@ struct ImapConfig { /// True if the server has MOVE capability as defined in /// https://tools.ietf.org/html/rfc6851 pub can_move: bool, - pub imap_delimiter: char, } impl Default for ImapConfig { @@ -206,7 +205,6 @@ impl Default for ImapConfig { selected_folder_needs_expunge: false, can_idle: false, can_move: false, - imap_delimiter: '.', } } } From e09a0a548f059df0b5713c70de0690aeeb51090b Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Wed, 25 Mar 2020 18:10:02 +0100 Subject: [PATCH 5/5] using first() instead of [0] --- src/imap/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 548360f3a..7f1eaaf0e 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1105,8 +1105,8 @@ impl Imap { info!(context, "sentbox folder is {:?}", sentbox_folder); let mut delimiter = "."; - if !folders.is_empty() { - if let Some(d) = &folders[0].delimiter() { + if let Some(folder) = folders.first() { + if let Some(d) = folder.delimiter() { if !d.is_empty() { delimiter = d; }