From 6c0dd8543dba57e8d49c3747dd3a21990b91dd51 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Mon, 20 Apr 2020 02:26:19 +0300 Subject: [PATCH] Delete expired messages instead of hiding them For hidden messages, blobs are not deleted during housekeeping. To actually free the space used by media files, messages should be moved to trash instead of being hidden. --- src/chat.rs | 15 ++++++++------- src/chatlist.rs | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/chat.rs b/src/chat.rs index 8685e3743..7821b35ec 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -1441,7 +1441,7 @@ pub fn get_chat_msgs( flags: u32, marker1before: Option, ) -> Vec { - match hide_device_expired_messages(context) { + match delete_device_expired_messages(context) { Err(err) => warn!(context, "Failed to delete expired messages: {}", err), Ok(messages_deleted) => { if messages_deleted { @@ -1587,11 +1587,11 @@ pub fn marknoticed_all_chats(context: &Context) -> Result<(), Error> { Ok(()) } -/// Hides messages which are expired according to "delete_device_after" setting. +/// Deletes messages which are expired according to "delete_device_after" setting. /// -/// Returns true if any message is hidden, so event can be emitted. If nothing -/// has been hidden, returns false. -pub fn hide_device_expired_messages(context: &Context) -> Result { +/// Returns true if any message is deleted, so event can be emitted. If nothing +/// has been deleted, returns false. +pub fn delete_device_expired_messages(context: &Context) -> Result { if let Some(delete_device_after) = context.get_config_delete_device_after() { let threshold_timestamp = time() - delete_device_after; @@ -1602,19 +1602,20 @@ pub fn hide_device_expired_messages(context: &Context) -> Result { .unwrap_or_default() .0; - // Hide expired messages + // Delete expired messages // // Only update the rows that have to be updated, to avoid emitting // unnecessary "chat modified" events. let rows_modified = context.sql.execute( "UPDATE msgs \ - SET txt = 'DELETED', hidden = 1 \ + SET txt = 'DELETED', chat_id = ? \ WHERE timestamp < ? \ AND chat_id > ? \ AND chat_id != ? \ AND chat_id != ? \ AND NOT hidden", params![ + DC_CHAT_ID_TRASH, threshold_timestamp, DC_CHAT_ID_LAST_SPECIAL, self_chat_id, diff --git a/src/chatlist.rs b/src/chatlist.rs index f6ed9a003..ce3569f7b 100644 --- a/src/chatlist.rs +++ b/src/chatlist.rs @@ -93,8 +93,8 @@ impl Chatlist { query_contact_id: Option, ) -> Result { // Note that we do not emit DC_EVENT_MSGS_MODIFIED here even if some - // messages get hidden to avoid reloading the same chatlist. - if let Err(err) = hide_device_expired_messages(context) { + // messages get deleted to avoid reloading the same chatlist. + if let Err(err) = delete_device_expired_messages(context) { warn!(context, "Failed to hide expired messages: {}", err); }