diff --git a/src/ephemeral.rs b/src/ephemeral.rs index d4951ed3e..5dd513af1 100644 --- a/src/ephemeral.rs +++ b/src/ephemeral.rs @@ -80,6 +80,7 @@ use crate::contact::ContactId; use crate::context::Context; use crate::download::MIN_DELETE_SERVER_AFTER; use crate::events::EventType; +use crate::location; use crate::log::LogExt; use crate::message::{Message, MessageState, MsgId, Viewtype}; use crate::mimeparser::SystemMessage; @@ -592,6 +593,11 @@ pub(crate) async fn ephemeral_loop(context: &Context, interrupt_receiver: Receiv .await .log_err(context) .ok(); + + location::delete_expired(context, time()) + .await + .log_err(context) + .ok(); } } diff --git a/src/location.rs b/src/location.rs index 32c56b2cc..164eeb647 100644 --- a/src/location.rs +++ b/src/location.rs @@ -467,6 +467,25 @@ pub async fn delete_all(context: &Context) -> Result<()> { Ok(()) } +/// Deletes expired locations. +/// +/// Only path locations are deleted. +/// POIs should be deleted when corresponding message is deleted. +pub(crate) async fn delete_expired(context: &Context, now: i64) -> Result<()> { + let deleted = context + .sql + .execute( + "DELETE FROM locations WHERE independent=0 AND timestamp < ?", + (now,), + ) + .await? + > 0; + if deleted { + context.emit_location_changed(None).await?; + } + Ok(()) +} + /// Returns `location.kml` contents. pub async fn get_kml(context: &Context, chat_id: ChatId) -> Result> { let mut last_added_location_id = 0;