From b00d61fc904286bdbdbbde5b31809b7012b075a0 Mon Sep 17 00:00:00 2001
From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com>
Date: Tue, 5 Oct 2021 14:59:47 -0400
Subject: [PATCH] lrcinstance: clear the interaction cache when switching the
 conversation

Gitlab: #550
Change-Id: I713af229a3f90ca9d6b3e526ae3c710e7f573c66
---
 src/lrcinstance.cpp | 19 +++++++++++++++++++
 src/lrcinstance.h   |  9 ++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/lrcinstance.cpp b/src/lrcinstance.cpp
index 88385327f..cd947070c 100644
--- a/src/lrcinstance.cpp
+++ b/src/lrcinstance.cpp
@@ -428,3 +428,22 @@ LRCInstance::getCurrentCallId()
         return QString();
     }
 }
+
+QString
+LRCInstance::get_selectedConvUid()
+{
+    return selectedConvUid_;
+}
+
+void
+LRCInstance::set_selectedConvUid(QString selectedConvUid)
+{
+    if (selectedConvUid_ != selectedConvUid) {
+        auto& accInfo = accountModel().getAccountInfo(get_currentAccountId());
+        auto& convModel = accInfo.conversationModel;
+        convModel->clearInteractionsCache(selectedConvUid_);
+
+        selectedConvUid_ = selectedConvUid;
+        Q_EMIT selectedConvUidChanged();
+    }
+}
diff --git a/src/lrcinstance.h b/src/lrcinstance.h
index b3145de46..3433710a9 100644
--- a/src/lrcinstance.h
+++ b/src/lrcinstance.h
@@ -55,7 +55,8 @@ using getConvPredicate = std::function<bool(const conversation::Info& conv)>;
 class LRCInstance : public QObject
 {
     Q_OBJECT
-    QML_PROPERTY(QString, selectedConvUid)
+    Q_PROPERTY(QString selectedConvUid READ get_selectedConvUid WRITE set_selectedConvUid NOTIFY
+                   selectedConvUidChanged)
     QML_PROPERTY(QString, currentAccountId)
     QML_RO_PROPERTY(lrc::api::profile::Type, currentAccountType)
     QML_PROPERTY(bool, currentAccountAvatarSet)
@@ -123,8 +124,13 @@ public:
     bool hasActiveCall(bool withVideo = false);
     VectorString getConferenceSubcalls(const QString& callId);
 
+    QString get_selectedConvUid();
+
+    void set_selectedConvUid(QString selectedConvUid = "");
+
 Q_SIGNALS:
     void accountListChanged();
+    void selectedConvUidChanged();
     void restoreAppRequested();
     void notificationClicked();
     void quitEngineRequested();
@@ -136,6 +142,7 @@ private:
     std::unique_ptr<RenderManager> renderer_;
     std::unique_ptr<UpdateManager> updateManager_;
 
+    QString selectedConvUid_;
     MapStringString contentDrafts_;
     MapStringString lastConferences_;
 
-- 
GitLab