Skip to content

Commit 1f759a6

Browse files
committed
Solved the membership check by creating an active_users variable in MemberRoomInfo
1 parent fb6a845 commit 1f759a6

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

crates/matrix-sdk-base/src/room/members.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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,23 @@ 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 } =
215-
room_info;
217+
let MemberRoomInfo {
218+
power_levels,
219+
max_power_level,
220+
users_display_names,
221+
ignored_users,
222+
active_users,
223+
} = room_info;
216224

217225
let display_name = event.display_name();
218-
let membership = event.membership();
219226

220-
println!("{:?} {:?}", users_display_names, &display_name);
221227
let display_name_ambiguous = users_display_names.get(&display_name).is_some_and(|s| {
228+
// s.filter(|n| )
222229
if !is_display_name_ambiguous(&display_name, s) {
223230
return false;
224231
}
225-
matches!(*membership, MembershipState::Join | MembershipState::Invite)
232+
//We check of many active_users with the same surname exist
233+
active_users.iter().filter(|u| s.contains(*u)).count() > 1
226234
});
227235
let is_ignored = ignored_users.as_ref().is_some_and(|s| s.contains(event.user_id()));
228236

@@ -396,6 +404,7 @@ pub(crate) struct MemberRoomInfo<'a> {
396404
pub(crate) max_power_level: i64,
397405
pub(crate) users_display_names: HashMap<&'a DisplayName, BTreeSet<OwnedUserId>>,
398406
pub(crate) ignored_users: Option<BTreeSet<OwnedUserId>>,
407+
pub(crate) active_users: Vec<OwnedUserId>,
399408
}
400409

401410
/// The kind of room member updates that just happened.
@@ -574,12 +583,9 @@ mod tests {
574583
.or_default()
575584
.entry(StateEventType::RoomMember)
576585
.or_default();
577-
578-
let ambiguity_maps = changes
579-
.ambiguity_maps
580-
.entry(room.room_id().to_owned())
581-
.or_default();
582586

587+
let ambiguity_maps =
588+
changes.ambiguity_maps.entry(room.room_id().to_owned()).or_default();
583589

584590
let display_name = DisplayName::new("Carol");
585591
members.insert(carol.into(), f.member(carol).display_name("Carol").into());
@@ -618,7 +624,6 @@ mod tests {
618624
members.insert(mewto.into(), f.member(mewto).display_name("Me").into());
619625
ambiguity_maps.entry(display_name.clone()).or_default().insert(mewto.to_owned());
620626

621-
622627
store.save_changes(&changes).await.unwrap();
623628
}
624629

@@ -634,7 +639,6 @@ mod tests {
634639
assert!(!room.get_member(julie).await.unwrap().expect("Julie user").name_ambiguous());
635640
assert!(!room.get_member(bob).await.unwrap().expect("Bob user").name_ambiguous());
636641

637-
638642
assert!(room.get_member(me).await.unwrap().expect("Me user").name_ambiguous());
639643
assert!(room.get_member(mewto).await.unwrap().expect("Mewto user").name_ambiguous());
640644
}

0 commit comments

Comments
 (0)