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.
This commit is contained in:
Alexander Krotov
2020-03-01 19:22:29 +03:00
parent 5b3bec1aac
commit 8f7a456a39
4 changed files with 27 additions and 9 deletions

View File

@@ -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<i64> {
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<()> {

View File

@@ -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

View File

@@ -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

View File

@@ -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)