From bcd4f80149bf5071f05b49cffb669d8e3cd430ac Mon Sep 17 00:00:00 2001 From: dasha_uwu Date: Sun, 24 Aug 2025 02:39:28 +0500 Subject: [PATCH] Move server user presence handling to presence service --- src/service/presence/mod.rs | 16 ++++++++++++++++ src/service/services.rs | 18 ------------------ 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/service/presence/mod.rs b/src/service/presence/mod.rs index a4aea908..41e38734 100644 --- a/src/service/presence/mod.rs +++ b/src/service/presence/mod.rs @@ -40,6 +40,15 @@ impl crate::Service for Service { } async fn worker(self: Arc) -> Result { + // reset dormant online/away statuses to offline, and set the server user as + // online + if self.services.server.config.allow_local_presence && !self.services.db.is_read_only() { + self.unset_all_presence().await; + _ = self + .ping_presence(&self.services.globals.server_user, &PresenceState::Online) + .await; + } + let receiver = self.timer_channel.1.clone(); let mut presence_timers = FuturesUnordered::new(); @@ -62,6 +71,13 @@ impl crate::Service for Service { } async fn interrupt(&self) { + // set the server user as offline + if self.services.server.config.allow_local_presence && !self.services.db.is_read_only() { + _ = self + .ping_presence(&self.services.globals.server_user, &PresenceState::Offline) + .await; + } + let (timer_sender, _) = &self.timer_channel; if !timer_sender.is_closed() { timer_sender.close(); diff --git a/src/service/services.rs b/src/service/services.rs index 1edbb817..de777f24 100644 --- a/src/service/services.rs +++ b/src/service/services.rs @@ -160,16 +160,6 @@ impl Services { .start() .await?; - // reset dormant online/away statuses to offline, and set the server user as - // online - if self.server.config.allow_local_presence && !self.db.is_read_only() { - self.presence.unset_all_presence().await; - _ = self - .presence - .ping_presence(&self.globals.server_user, &ruma::presence::PresenceState::Online) - .await; - } - debug_info!("Services startup complete."); Ok(Arc::clone(self)) @@ -178,14 +168,6 @@ impl Services { pub async fn stop(&self) { info!("Shutting down services..."); - // set the server user as offline - if self.server.config.allow_local_presence && !self.db.is_read_only() { - _ = self - .presence - .ping_presence(&self.globals.server_user, &ruma::presence::PresenceState::Offline) - .await; - } - self.interrupt().await; if let Some(manager) = self.manager.lock().await.as_ref() { manager.stop().await;