diff --git a/src/models/messageeventmodel.cpp b/src/models/messageeventmodel.cpp index c13462e3e..aae6f51d1 100644 --- a/src/models/messageeventmodel.cpp +++ b/src/models/messageeventmodel.cpp @@ -215,10 +215,13 @@ void MessageEventModel::setRoom(NeoChatRoom *room) } refreshEventRoles(eventId, {Qt::DisplayRole}); }); - connect(m_currentRoom, &Room::changed, this, [this]() { - for (auto it = m_currentRoom->messageEvents().rbegin(); it != m_currentRoom->messageEvents().rend(); ++it) { - auto event = it->event(); - refreshEventRoles(event->id(), {ReadMarkersRole, ReadMarkersStringRole, ExcessReadMarkersRole}); + connect(m_currentRoom, &Room::changed, this, [this](Room::Changes changes) { + if (changes & (Room::Change::PartiallyReadStats | Room::Change::UnreadStats | Room::Change::Other | Room::Change::Members)) { + // this is slow + for (auto it = m_currentRoom->messageEvents().rbegin(); it != m_currentRoom->messageEvents().rend(); ++it) { + auto event = it->event(); + refreshEventRoles(event->id(), {ReadMarkersRole, ReadMarkersStringRole, ExcessReadMarkersRole}); + } } }); connect(m_currentRoom->connection(), &Connection::ignoredUsersListChanged, this, [this] { diff --git a/src/models/userlistmodel.cpp b/src/models/userlistmodel.cpp index c17617873..fe3f8f839 100644 --- a/src/models/userlistmodel.cpp +++ b/src/models/userlistmodel.cpp @@ -47,7 +47,10 @@ void UserListModel::setRoom(NeoChatRoom *room) connect(m_currentRoom, &Room::memberAvatarUpdated, this, [this](RoomMember member) { refreshMember(member, {AvatarRole}); }); - connect(m_currentRoom, &Room::changed, this, &UserListModel::refreshAllMembers); + connect(m_currentRoom, &Room::memberListChanged, this, [this]() { + // this is slow + UserListModel::refreshAllMembers(); + }); connect(m_currentRoom->connection(), &Connection::loggedOut, this, [this]() { setRoom(nullptr); });