From a9fd63fd4bb811e66aa8f8749657b9879cd96a2b Mon Sep 17 00:00:00 2001 From: Denis Kasak Date: Tue, 9 Jun 2020 15:17:38 +0200 Subject: [PATCH] Fix display name disambiguation so it passes the test. --- matrix_sdk_base/src/models/room.rs | 31 +++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/matrix_sdk_base/src/models/room.rs b/matrix_sdk_base/src/models/room.rs index 34f8819d..41b823a1 100644 --- a/matrix_sdk_base/src/models/room.rs +++ b/matrix_sdk_base/src/models/room.rs @@ -327,17 +327,24 @@ impl Room { return false; } - let member = RoomMember::new(event); + let new_member = RoomMember::new(event); // find all users that share the same display name as the joining user let users_with_same_name: Vec<_> = self - .disambiguated_display_names + .members .iter() - .filter(|(_, v)| { - member + .filter(|(_, existing_member)| { + new_member .display_name .as_ref() - .map(|n| &n == v) + .and_then(|new_member_name| { + existing_member + .display_name + .as_ref() + .and_then(|existing_member_name| { + Some(new_member_name == existing_member_name) + }) + }) .unwrap_or(false) }) .map(|(k, _)| k) @@ -368,17 +375,19 @@ impl Room { // insert new member's display name self.disambiguated_display_names.insert( - member.user_id.clone(), - member + new_member.user_id.clone(), + new_member .display_name .as_ref() - .map(|n| format!("{} ({})", n, member.user_id)) - .unwrap_or_else(|| format!("{}", member.user_id)), + .map(|n| format!("{} ({})", n, new_member.user_id)) + .unwrap_or_else(|| format!("{}", new_member.user_id)), ); } - self.members - .insert(UserId::try_from(event.state_key.as_str()).unwrap(), member); + self.members.insert( + UserId::try_from(event.state_key.as_str()).unwrap(), + new_member, + ); true }