From 51fc2342a48acfffa81349b82288d1f1c7e9e80b Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 7 Oct 2025 17:13:58 +0000 Subject: [PATCH] Add is_direct() query for account_data. Signed-off-by: Jason Volk --- src/service/account_data/direct.rs | 19 +++++++++++++++++++ src/service/account_data/mod.rs | 1 + 2 files changed, 20 insertions(+) create mode 100644 src/service/account_data/direct.rs diff --git a/src/service/account_data/direct.rs b/src/service/account_data/direct.rs new file mode 100644 index 00000000..ea90f283 --- /dev/null +++ b/src/service/account_data/direct.rs @@ -0,0 +1,19 @@ +use ruma::{ + RoomId, UserId, + events::{GlobalAccountDataEventType, direct::DirectEventContent}, +}; +use tuwunel_core::{at, implement, is_equal_to}; + +#[implement(super::Service)] +pub async fn is_direct(&self, user_id: &UserId, room_id: &RoomId) -> bool { + self.services + .account_data + .get_global(user_id, GlobalAccountDataEventType::Direct) + .await + .map(|content: DirectEventContent| content) + .into_iter() + .flat_map(DirectEventContent::into_iter) + .map(at!(1)) + .flat_map(Vec::into_iter) + .any(is_equal_to!(room_id)) +} diff --git a/src/service/account_data/mod.rs b/src/service/account_data/mod.rs index e1d188b5..cd43a708 100644 --- a/src/service/account_data/mod.rs +++ b/src/service/account_data/mod.rs @@ -1,3 +1,4 @@ +mod direct; mod room_tags; use std::sync::Arc;