From 055aba189c9668bc2b7e74369edd6c1c46c853f6 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Sat, 7 Mar 2020 19:10:13 +0300 Subject: [PATCH] Automatically delete messages in 2 weeks window only This is to avoid creating thousands of jobs when user enables "delete_server_after" setting for the first time. If device is offline for more than 2 weeks, some messages may not be deleted. --- src/job.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/job.rs b/src/job.rs index 4d07057c2..4ad83b762 100644 --- a/src/job.rs +++ b/src/job.rs @@ -943,15 +943,25 @@ fn add_imap_deletion_jobs(context: &Context) -> sql::Result<()> { if let Some(delete_server_after) = context.get_config_delete_server_after() { let threshold_timestamp = time() - delete_server_after; + // Only try to delete messages in 2 weeks window + // (oldest_timestamp, threshold_timestamp). Otherwise we may + // waste a lot of traffic attempting to delete all the + // messages since the beginning of Delta Chat usage. + let oldest_timestamp = threshold_timestamp - 2 * 7 * 24 * 60 * 60; + // Select all expired messages which don't have a // corresponding message deletion job yet. let msg_ids = context.sql.query_map( "SELECT id FROM msgs - WHERE timestamp < ? + WHERE timestamp < ? AND timestamp > ? AND server_uid != 0 AND NOT EXISTS (SELECT 1 FROM jobs WHERE foreign_id = msgs.id AND action = ?)", - params![threshold_timestamp, Action::DeleteMsgOnImap], + params![ + threshold_timestamp, + oldest_timestamp, + Action::DeleteMsgOnImap + ], |row| row.get::<_, MsgId>(0), |ids| { ids.collect::, _>>()