From c511e9f2689043fafa74f32c3f9f30f13eae7eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Fri, 24 Apr 2026 09:08:31 +0200 Subject: [PATCH] refactor(sdk): `Client::get_dm_rooms` results will also depend on the `DmRoomDefinition` enum case --- crates/matrix-sdk/src/client/mod.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/crates/matrix-sdk/src/client/mod.rs b/crates/matrix-sdk/src/client/mod.rs index bcbcf607f..5640a2293 100644 --- a/crates/matrix-sdk/src/client/mod.rs +++ b/crates/matrix-sdk/src/client/mod.rs @@ -32,8 +32,9 @@ use matrix_sdk_base::crypto::{ DecryptionSettings, store::LockableCryptoStore, store::types::RoomPendingKeyBundleDetails, }; use matrix_sdk_base::{ - BaseClient, RoomInfoNotableUpdate, RoomState, RoomStateFilter, SendOutsideWasm, SessionMeta, - StateStoreDataKey, StateStoreDataValue, StoreError, SyncOutsideWasm, ThreadingSupport, + BaseClient, DmRoomDefinition, RoomInfoNotableUpdate, RoomState, RoomStateFilter, + SendOutsideWasm, SessionMeta, StateStoreDataKey, StateStoreDataValue, StoreError, + SyncOutsideWasm, ThreadingSupport, event_cache::store::EventCacheStoreLock, media::store::MediaStoreLock, store::{DynStateStore, RoomLoadSettings, SupportedVersionsResponse, WellKnownResponse}, @@ -1849,10 +1850,23 @@ impl Client { pub fn get_dm_rooms(&self, user_id: &UserId) -> impl Iterator { let rooms = self.joined_rooms(); + let dm_definition = &self.base_client().dm_room_definition; + // Find the room we share with the `user_id` and only with `user_id` let rooms = rooms.into_iter().filter(move |r| { let targets = r.direct_targets(); - targets.len() == 1 && targets.contains(<&DirectUserIdentifier>::from(user_id)) + let targets_match = + targets.len() == 1 && targets.contains(<&DirectUserIdentifier>::from(user_id)); + match dm_definition { + DmRoomDefinition::MatrixSpec => targets_match, + DmRoomDefinition::TwoMembers => { + let service_members_count = + r.service_members().map(|s| s.len()).unwrap_or_default() as u64; + let active_non_service_members = + r.active_members_count().saturating_sub(service_members_count); + targets_match && active_non_service_members <= 2 + } + } }); trace!(?user_id, ?rooms, "Found DM rooms with user");