From d7c1a063b368c83c8066928235dc46c685c5a859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Wed, 4 Aug 2021 14:21:39 -0400 Subject: [PATCH] conversationmodel: avoid useless iteration Also fix setMessageDisplayed for clients Change-Id: Ia2f8f586d88736a597e2271d2fd59402664ea3e6 GitLab: https://git.jami.net/savoirfairelinux/ring-project/-/issues/1282 --- src/conversationmodel.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp index 83dfd122..729e8932 100644 --- a/src/conversationmodel.cpp +++ b/src/conversationmodel.cpp @@ -1476,22 +1476,24 @@ ConversationModel::clearUnreadInteractions(const QString& convId) { std::lock_guard<std::mutex> lk(pimpl_->interactionsLocks[convId]); auto& interactions = conversation.interactions; - std::for_each(interactions.begin(), - interactions.end(), - [&](decltype(*interactions.begin())& it) { - if (!it.second.isRead) { - emitUpdated = true; - it.second.isRead = true; - if (conversation.isSwarm()) { - lastDisplayed = it.first; - return; + if (conversation.isSwarm()) { + emitUpdated = true; + if (!interactions.empty()) + lastDisplayed = interactions.rbegin()->first; + } else { + std::for_each(interactions.begin(), + interactions.end(), + [&](decltype(*interactions.begin())& it) { + if (!it.second.isRead) { + emitUpdated = true; + it.second.isRead = true; + if (owner.profileInfo.type != profile::Type::SIP) + lastDisplayed = storage::getDaemonIdByInteractionId(pimpl_->db, + it.first); + storage::setInteractionRead(pimpl_->db, it.first); } - if (owner.profileInfo.type != profile::Type::SIP) - lastDisplayed = storage::getDaemonIdByInteractionId(pimpl_->db, - it.first); - storage::setInteractionRead(pimpl_->db, it.first); - } - }); + }); + } } if (!lastDisplayed.isEmpty()) { auto to = conversation.isSwarm() -- GitLab