From db943766917eba7be3a6f89d41794c2d26363ab7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Thu, 25 Jun 2020 10:57:30 -0400
Subject: [PATCH] conversationmodel: only set displayed for latest interaction

This avoids some spam about displayed messages daemon side

Change-Id: I0df255671e63c0aece14109875c8662758fbf87d
---
 src/conversationmodel.cpp | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index 81bedf9e..e7dac7fe 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -1177,22 +1177,25 @@ ConversationModel::clearUnreadInteractions(const QString& convId) {
         return;
     }
     bool emitUpdated = false;
+    QString lastDisplayed;
     {
         std::lock_guard<std::mutex> lk(pimpl_->interactionsLocks[convId]);
         auto& interactions = pimpl_->conversations[conversationIdx].interactions;
         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) {
-                                auto daemonId = storage::getDaemonIdByInteractionId(pimpl_->db, QString::number(it.first));
-                                ConfigurationManager::instance().setMessageDisplayed(owner.id, pimpl_->conversations[conversationIdx].participants.front(), daemonId, 3);
-                              }
-                              storage::setInteractionRead(pimpl_->db, it.first);
-                          }
-                      });
-    }
+                        [&] (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, QString::number(it.first));
+                                storage::setInteractionRead(pimpl_->db, it.first);
+                            }
+                        });
+    }
+    if (!lastDisplayed.isEmpty())
+        ConfigurationManager::instance().setMessageDisplayed(
+            owner.id, pimpl_->conversations[conversationIdx].participants.front(), lastDisplayed, 3
+        );
     if (emitUpdated) {
         pimpl_->conversations[conversationIdx].unreadMessages = 0;
         pimpl_->dirtyConversations = {true, true};
-- 
GitLab