From 519ced58f71b0de28ece6ffe18da9d848565ad7e Mon Sep 17 00:00:00 2001
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
Date: Mon, 2 Aug 2021 13:22:01 -0400
Subject: [PATCH] chatview: don't call printHistory

Use updateHistory instead. This prevents "Contact added" message
duplication. We also clear the unread messages at this point which
will prevent an uncleared unread first message when adding a new
conversation.

Gitlab: #482
Change-Id: I927e15dfe945aa3f2f33db3fb91739522db5ea9b
---
 src/messagesadapter.cpp | 30 ++++++++++--------------------
 src/messagesadapter.h   |  1 -
 2 files changed, 10 insertions(+), 21 deletions(-)

diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index 9e9843fa2..32b406607 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -102,7 +102,6 @@ MessagesAdapter::onInteractionStatusUpdated(const QString& convUid,
                                             const lrc::api::interaction::Info& interaction)
 {
     auto currentConversationModel = lrcInstance_->getCurrentConversationModel();
-    currentConversationModel->clearUnreadInteractions(convUid);
     updateInteraction(*currentConversationModel, interactionId, interaction);
 }
 
@@ -206,16 +205,16 @@ MessagesAdapter::slotMessagesCleared()
 {
     auto* convModel = lrcInstance_->getCurrentConversationModel();
 
-    auto convOpt = convModel->getConversationForUid(lrcInstance_->get_selectedConvUid());
-    if (!convOpt)
+    auto optConv = convModel->getConversationForUid(lrcInstance_->get_selectedConvUid());
+    if (!optConv)
         return;
-    if (convOpt->get().isSwarm() && !convOpt->get().allMessagesLoaded) {
-        convModel->loadConversationMessages(convOpt->get().uid, 20);
+    if (optConv->get().isSwarm() && !optConv->get().allMessagesLoaded) {
+        convModel->loadConversationMessages(optConv->get().uid, 20);
     } else {
-        printHistory(*convModel, convOpt->get().interactions);
+        updateHistory(*convModel, optConv->get().interactions, optConv->get().allMessagesLoaded);
         Utils::oneShotConnect(qmlObj_, SIGNAL(messagesLoaded()), this, SLOT(slotMessagesLoaded()));
     }
-    setConversationProfileData(convOpt->get());
+    setConversationProfileData(optConv->get());
 }
 
 void
@@ -457,31 +456,22 @@ MessagesAdapter::setDisplayLinks()
     QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
 }
 
-void
-MessagesAdapter::printHistory(lrc::api::ConversationModel& conversationModel,
-                              MessagesList interactions)
-{
-    auto interactionsStr = interactionsToJsonArrayObject(conversationModel,
-                                                         lrcInstance_->get_selectedConvUid(),
-                                                         interactions)
-                               .toUtf8();
-    QString s = QString::fromLatin1("printHistory(%1);").arg(interactionsStr.constData());
-    QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
-}
-
 void
 MessagesAdapter::updateHistory(lrc::api::ConversationModel& conversationModel,
                                MessagesList interactions,
                                bool allLoaded)
 {
+    auto conversationId = lrcInstance_->get_selectedConvUid();
     auto interactionsStr = interactionsToJsonArrayObject(conversationModel,
-                                                         lrcInstance_->get_selectedConvUid(),
+                                                         conversationId,
                                                          interactions)
                                .toUtf8();
     QString s = QString::fromLatin1("updateHistory(%1, %2);")
                     .arg(interactionsStr.constData())
                     .arg(allLoaded);
     QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
+    auto* convModel = lrcInstance_->getCurrentConversationModel();
+    conversationModel.clearUnreadInteractions(conversationId);
 }
 
 void
diff --git a/src/messagesadapter.h b/src/messagesadapter.h
index f8651c468..06c674de7 100644
--- a/src/messagesadapter.h
+++ b/src/messagesadapter.h
@@ -71,7 +71,6 @@ protected:
     void setMessagesVisibility(bool visible);
     void setIsSwarm(bool isSwarm);
     void clearChatView();
-    void printHistory(ConversationModel& conversationModel, MessagesList interactions);
     void updateHistory(ConversationModel& conversationModel,
                        MessagesList interactions,
                        bool allLoaded);
-- 
GitLab