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