From b78a9f2a9c95c19531184ec8fd4a1b0d8823e524 Mon Sep 17 00:00:00 2001 From: James Graham Date: Fri, 28 Jun 2024 12:36:36 +0100 Subject: [PATCH] Find users by Id in UserListModel as there may be users with the same display name which will end up with the wrong member replaced --- src/models/userlistmodel.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/models/userlistmodel.cpp b/src/models/userlistmodel.cpp index 21a606ef0..3e1c6bf93 100644 --- a/src/models/userlistmodel.cpp +++ b/src/models/userlistmodel.cpp @@ -158,7 +158,7 @@ void UserListModel::refreshAllMembers() m_members.clear(); if (m_currentRoom != nullptr) { - m_members = m_currentRoom->members(); + m_members = m_currentRoom->joinedMembers(); std::sort(m_members.begin(), m_members.end(), m_currentRoom->memberSorter()); } endResetModel(); @@ -167,15 +167,18 @@ void UserListModel::refreshAllMembers() int UserListModel::findUserPos(const RoomMember &member) const { - return findUserPos(member.displayName()); + return findUserPos(member.id()); } -int UserListModel::findUserPos(const QString &username) const +int UserListModel::findUserPos(const QString &userId) const { if (!m_currentRoom) { return 0; } - return m_currentRoom->memberSorter().lowerBoundIndex(m_members, username); + const auto pos = std::find_if(m_members.cbegin(), m_members.cend(), [&userId](const RoomMember &member) { + return userId == member.id(); + }); + return pos - m_members.cbegin(); } QHash UserListModel::roleNames() const