From 8f7a456a39ef420570f331a503b669a75ce5bc66 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Sun, 1 Mar 2020 19:22:29 +0300 Subject: [PATCH] Use 0 value for "delete_server_after" default. Now 0 means "never delete", 1 means "delete at once" and other values indicate the number of seconds after which them message should be deleted from the server. Configuration value interpretation is moved into Context.get_config_delete_server_after() function. --- src/config.rs | 19 +++++++++++++++++-- src/dc_receive_imf.rs | 6 +++--- src/imap/mod.rs | 6 +++--- src/job.rs | 5 ++++- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/config.rs b/src/config.rs index 2e4afd6a6..beea4d46b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -68,9 +68,12 @@ pub enum Config { /// Timer in seconds after which the message is deleted from the /// server. /// - /// Equals to -1 by default, which means the message is never + /// Equals to 0 by default, which means the message is never /// deleted. - #[strum(props(default = "-1"))] + /// + /// Value 1 is treated as "delete at once": messages are deleted + /// immediately, without moving to DeltaChat folder. + #[strum(props(default = "0"))] DeleteServerAfter, SaveMimeHeaders, @@ -136,6 +139,18 @@ impl Context { self.get_config_int(key) != 0 } + /// Gets configured "delete_server_after" value. + /// + /// `None` means never delete the message, `Some(0)` means delete + /// at once, `Some(x)` means delete after `x` seconds. + pub fn get_config_delete_server_after(&self) -> Option { + match self.get_config_int(Config::DeleteServerAfter) { + 0 => None, + 1 => Some(0), + x => Some(x as i64), + } + } + /// Set the given config key. /// If `None` is passed as a value the value is cleared and set to the default if there is one. pub fn set_config(&self, key: Config, value: Option<&str>) -> crate::sql::Result<()> { diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 3cd71cfbf..8a517d2ae 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -204,14 +204,14 @@ pub fn dc_receive_imf( } } else { // Get user-configured server deletion - let delete_server_after = context.get_config_int(Config::DeleteServerAfter); + let delete_server_after = context.get_config_delete_server_after(); - if delete_server_after != 0 { + if delete_server_after != Some(0) { // Move message if we don't delete it immediately. context.do_heuristics_moves(server_folder.as_ref(), insert_msg_id); } - if delete_server_after >= 0 { + if let Some(delete_server_after) = delete_server_after { info!( context, "Scheduling message deletion in {} seconds", delete_server_after diff --git a/src/imap/mod.rs b/src/imap/mod.rs index a0e699942..c0c118da0 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1308,9 +1308,9 @@ fn precheck_imf(context: &Context, rfc724_mid: &str, server_folder: &str, server if old_server_folder.is_empty() && old_server_uid == 0 { info!(context, "[move] detected bcc-self {}", rfc724_mid,); - let delete_server_after = context.get_config_int(Config::DeleteServerAfter); + let delete_server_after = context.get_config_delete_server_after(); - if delete_server_after != 0 { + if delete_server_after != Some(0) { context.do_heuristics_moves(server_folder.as_ref(), msg_id); job_add( context, @@ -1321,7 +1321,7 @@ fn precheck_imf(context: &Context, rfc724_mid: &str, server_folder: &str, server ); } - if delete_server_after >= 0 { + if let Some(delete_server_after) = delete_server_after { info!( context, "Scheduling BCC-self deletion in {} seconds", delete_server_after diff --git a/src/job.rs b/src/job.rs index c8d75e901..160401d85 100644 --- a/src/job.rs +++ b/src/job.rs @@ -859,8 +859,11 @@ pub fn job_send_msg(context: &Context, msg_id: MsgId) -> Result<()> { .get_config(Config::ConfiguredAddr) .unwrap_or_default(); let lowercase_from = from.to_lowercase(); + + // Send BCC to self if it is enabled and we are not going to + // delete it immediately. if context.get_config_bool(Config::BccSelf) - && context.get_config_int(Config::DeleteServerAfter) != 0 + && context.get_config_delete_server_after() != Some(0) && !recipients .iter() .any(|x| x.to_lowercase() == lowercase_from)