From 8b2512c5130143e79fc014594de45ef6718b1d29 Mon Sep 17 00:00:00 2001
From: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
Date: Tue, 15 Dec 2020 13:49:19 -0500
Subject: [PATCH] messagesadapter: clear conversation uid cache if it is
 currently selected

For clearConversationHistory and removeConversation

Gitlab: #252

Change-Id: I3008cf20ddace5d3395465bd328a460c72e4c07f
---
 .../ConversationSmartListContextMenu.qml      |  4 ++--
 .../components/ConversationSmartListView.qml  | 16 +++++++-------
 src/messagesadapter.cpp                       | 21 +++++++++++++++++++
 src/messagesadapter.h                         |  4 ++++
 src/utilsadapter.cpp                          | 12 -----------
 src/utilsadapter.h                            |  4 ----
 6 files changed, 34 insertions(+), 27 deletions(-)

diff --git a/src/mainview/components/ConversationSmartListContextMenu.qml b/src/mainview/components/ConversationSmartListContextMenu.qml
index 1d22d1b76..9f600940c 100644
--- a/src/mainview/components/ConversationSmartListContextMenu.qml
+++ b/src/mainview/components/ConversationSmartListContextMenu.qml
@@ -59,7 +59,7 @@ Item {
             ContextMenuGenerator.addMenuItem(qsTr("Clear conversation"),
                                              "qrc:/images/icons/ic_clear_24px.svg",
                                              function (){
-                                                 UtilsAdapter.clearConversationHistory(
+                                                 MessagesAdapter.clearConversationHistory(
                                                              responsibleAccountId,
                                                              responsibleConvUid)
                                              })
@@ -68,7 +68,7 @@ Item {
                 ContextMenuGenerator.addMenuItem(qsTr("Remove contact"),
                                                  "qrc:/images/icons/round-remove_circle-24px.svg",
                                                  function (){
-                                                     UtilsAdapter.removeConversation(
+                                                     MessagesAdapter.removeConversation(
                                                                  responsibleAccountId,
                                                                  responsibleConvUid)
                                                  })
diff --git a/src/mainview/components/ConversationSmartListView.qml b/src/mainview/components/ConversationSmartListView.qml
index d6a9a472c..4256c330d 100644
--- a/src/mainview/components/ConversationSmartListView.qml
+++ b/src/mainview/components/ConversationSmartListView.qml
@@ -119,10 +119,9 @@ ListView {
         sequence: "Ctrl+Shift+L"
         context: Qt.ApplicationShortcut
         enabled: root.visible
-        onActivated: {
-            UtilsAdapter.clearConversationHistory(AccountAdapter.currentAccountId,
-                                                  UtilsAdapter.getCurrConvId())
-        }
+        onActivated: MessagesAdapter.clearConversationHistory(
+                         AccountAdapter.currentAccountId,
+                         UtilsAdapter.getCurrConvId())
     }
 
     Shortcut {
@@ -138,11 +137,10 @@ ListView {
         sequence: "Ctrl+Shift+Delete"
         context: Qt.ApplicationShortcut
         enabled: root.visible
-        onActivated: {
-            UtilsAdapter.removeConversation(AccountAdapter.currentAccountId,
-                                            UtilsAdapter.getCurrConvId(),
-                                            false)
-        }
+        onActivated: MessagesAdapter.removeConversation(
+                         AccountAdapter.currentAccountId,
+                         UtilsAdapter.getCurrConvId(),
+                         false)
     }
 
     Shortcut {
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index cb3a12c57..84e59b32b 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -665,6 +665,8 @@ MessagesAdapter::refuseInvitation(const QString& convUid)
     const auto currentConvUid = convUid.isEmpty() ? LRCInstance::getCurrentConvUid() : convUid;
     LRCInstance::getCurrentConversationModel()->removeConversation(currentConvUid, false);
     setInvitation(false);
+    if (convUid == currentConvUid_)
+        currentConvUid_.clear();
     emit navigateToWelcomePageRequested();
 }
 
@@ -674,6 +676,25 @@ MessagesAdapter::blockConversation(const QString& convUid)
     const auto currentConvUid = convUid.isEmpty() ? LRCInstance::getCurrentConvUid() : convUid;
     LRCInstance::getCurrentConversationModel()->removeConversation(currentConvUid, true);
     setInvitation(false);
+    if (convUid == currentConvUid_)
+        currentConvUid_.clear();
     emit contactBanned();
     emit navigateToWelcomePageRequested();
 }
+
+void
+MessagesAdapter::clearConversationHistory(const QString& accountId, const QString& uid)
+{
+    LRCInstance::getAccountInfo(accountId).conversationModel->clearHistory(uid);
+    if (uid == currentConvUid_)
+        currentConvUid_.clear();
+}
+
+void
+MessagesAdapter::removeConversation(const QString& accountId, const QString& uid, bool banContact)
+{
+    LRCInstance::getAccountInfo(accountId).conversationModel->removeConversation(uid, banContact);
+    if (uid == currentConvUid_)
+        currentConvUid_.clear();
+    emit navigateToWelcomePageRequested();
+}
diff --git a/src/messagesadapter.h b/src/messagesadapter.h
index 27abe5ac8..a6925bb10 100644
--- a/src/messagesadapter.h
+++ b/src/messagesadapter.h
@@ -41,6 +41,10 @@ protected:
     Q_INVOKABLE void connectConversationModel();
     Q_INVOKABLE void sendContactRequest();
     Q_INVOKABLE void updateConversationForAddedContact();
+    Q_INVOKABLE void removeConversation(const QString& accountId,
+                                        const QString& uid,
+                                        bool banContact = false);
+    Q_INVOKABLE void clearConversationHistory(const QString& accountId, const QString& uid);
 
     /*
      * JS Q_INVOKABLE.
diff --git a/src/utilsadapter.cpp b/src/utilsadapter.cpp
index 70124de99..d17ebd012 100644
--- a/src/utilsadapter.cpp
+++ b/src/utilsadapter.cpp
@@ -157,18 +157,6 @@ UtilsAdapter::setConversationFilter(const QString& filter)
     LRCInstance::getCurrentConversationModel()->setFilter(filter);
 }
 
-void
-UtilsAdapter::clearConversationHistory(const QString& accountId, const QString& uid)
-{
-    LRCInstance::getAccountInfo(accountId).conversationModel->clearHistory(uid);
-}
-
-void
-UtilsAdapter::removeConversation(const QString& accountId, const QString& uid, bool banContact)
-{
-    LRCInstance::getAccountInfo(accountId).conversationModel->removeConversation(uid, banContact);
-}
-
 const QString
 UtilsAdapter::getCurrConvId()
 {
diff --git a/src/utilsadapter.h b/src/utilsadapter.h
index a0442204c..b8615af08 100644
--- a/src/utilsadapter.h
+++ b/src/utilsadapter.h
@@ -43,10 +43,6 @@ public:
     Q_INVOKABLE bool createStartupLink();
     Q_INVOKABLE QString GetRingtonePath();
     Q_INVOKABLE bool checkStartupLink();
-    Q_INVOKABLE void removeConversation(const QString& accountId,
-                                        const QString& uid,
-                                        bool banContact = false);
-    Q_INVOKABLE void clearConversationHistory(const QString& accountId, const QString& uid);
     Q_INVOKABLE void setConversationFilter(const QString& filter);
     Q_INVOKABLE int getTotalUnreadMessages();
     Q_INVOKABLE int getTotalPendingRequest();
-- 
GitLab