diff --git a/src/ephemeral.rs b/src/ephemeral.rs index abcabee34..32b9a7d50 100644 --- a/src/ephemeral.rs +++ b/src/ephemeral.rs @@ -64,7 +64,7 @@ use crate::context::Context; use crate::dc_tools::time; use crate::error::{ensure, Error}; use crate::events::Event; -use crate::message::{Message, MsgId}; +use crate::message::{Message, MessageState, MsgId}; use crate::mimeparser::SystemMessage; use crate::sql; use crate::stock::StockMessage; @@ -422,6 +422,36 @@ pub(crate) async fn load_imap_deletion_msgid(context: &Context) -> sql::Result sql::Result<()> { + context + .sql + .execute( + "UPDATE msgs \ + SET ephemeral_timestamp = ? + ephemeral_timer \ + WHERE ephemeral_timer > 0 \ + AND ephemeral_timestamp = 0 \ + AND state NOT IN (?, ?, ?)", + paramsv![ + time(), + MessageState::InFresh, + MessageState::InNoticed, + MessageState::OutDraft + ], + ) + .await?; + + Ok(()) +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/sql.rs b/src/sql.rs index b798a0d3e..940af6854 100644 --- a/src/sql.rs +++ b/src/sql.rs @@ -13,6 +13,7 @@ use crate::chat::{update_device_icon, update_saved_messages_icon}; use crate::constants::{ShowEmails, DC_CHAT_ID_TRASH}; use crate::context::Context; use crate::dc_tools::*; +use crate::ephemeral::start_ephemeral_timers; use crate::param::*; use crate::peerstate::*; @@ -568,6 +569,13 @@ pub async fn housekeeping(context: &Context) { } } + if let Err(err) = start_ephemeral_timers(context).await { + warn!( + context, + "Housekeeping: cannot start ephemeral timers: {}", err + ); + } + if let Err(err) = prune_tombstones(context).await { warn!( context,