From b211f46e3eadcc7d54e3a1321004b141476cda28 Mon Sep 17 00:00:00 2001 From: Andreas Gattringer Date: Sat, 13 Jul 2024 12:14:59 +0200 Subject: [PATCH] Do heavy things less often on room change event --- src/models/messageeventmodel.cpp | 11 +++++++---- src/models/userlistmodel.cpp | 5 ++++- 2 files changed, 11 insertions(+), 5 deletions(-) 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); });