@@ -179,10 +179,13 @@ impl Room {
179179 . transpose ( ) ?
180180 . map ( |e| e. content . ignored_users . into_keys ( ) . collect ( ) ) ;
181181
182+ let active_users = self . store . get_user_ids ( self . room_id ( ) , RoomMemberships :: ACTIVE ) . await ?;
183+
182184 Ok ( MemberRoomInfo {
183185 power_levels : power_levels. into ( ) ,
184186 max_power_level,
185187 users_display_names,
188+ active_users,
186189 ignored_users,
187190 } )
188191 }
@@ -211,18 +214,18 @@ impl RoomMember {
211214 presence : Option < PresenceEvent > ,
212215 room_info : & MemberRoomInfo < ' _ > ,
213216 ) -> Self {
214- let MemberRoomInfo { power_levels, max_power_level, users_display_names, ignored_users } =
217+ let MemberRoomInfo { power_levels, max_power_level, users_display_names, ignored_users , active_users } =
215218 room_info;
216219
217220 let display_name = event. display_name ( ) ;
218- let membership = event. membership ( ) ;
219221
220- println ! ( "{:?} {:?}" , users_display_names, & display_name) ;
221222 let display_name_ambiguous = users_display_names. get ( & display_name) . is_some_and ( |s| {
223+ // s.filter(|n| )
222224 if !is_display_name_ambiguous ( & display_name, s) {
223225 return false ;
224226 }
225- matches ! ( * membership, MembershipState :: Join | MembershipState :: Invite )
227+ //We check of many active_users with the same surname exist
228+ active_users. iter ( ) . filter ( |u| s. contains ( * u) ) . count ( ) > 1
226229 } ) ;
227230 let is_ignored = ignored_users. as_ref ( ) . is_some_and ( |s| s. contains ( event. user_id ( ) ) ) ;
228231
@@ -396,6 +399,7 @@ pub(crate) struct MemberRoomInfo<'a> {
396399 pub ( crate ) max_power_level : i64 ,
397400 pub ( crate ) users_display_names : HashMap < & ' a DisplayName , BTreeSet < OwnedUserId > > ,
398401 pub ( crate ) ignored_users : Option < BTreeSet < OwnedUserId > > ,
402+ pub ( crate ) active_users : Vec < OwnedUserId >
399403}
400404
401405/// The kind of room member updates that just happened.
0 commit comments