From 5f35e19260cc854328c1d4f77465bd8a44062b6e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Thu, 6 Aug 2020 15:24:57 -0400
Subject: [PATCH] qml: reconnect models on account's change

Change-Id: I7e88828308c8d64ea30e8ad15db950e0605d86dc
---
 src/calladapter.cpp          | 10 ++++++++++
 src/calladapter.h            |  1 +
 src/conversationsadapter.cpp | 12 +++++++++++-
 src/conversationsadapter.h   |  3 +++
 src/lrcinstance.h            |  2 ++
 src/messagesadapter.cpp      | 10 ++++++++++
 src/messagesadapter.h        |  1 +
 7 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/src/calladapter.cpp b/src/calladapter.cpp
index c1b324021..6955434a1 100644
--- a/src/calladapter.cpp
+++ b/src/calladapter.cpp
@@ -42,12 +42,22 @@ CallAdapter::initQmlObject()
             &BehaviorController::showIncomingCallView,
             this,
             &CallAdapter::slotShowIncomingCallView);
+    connect(&LRCInstance::instance(),
+            &LRCInstance::currentAccountChanged,
+            this,
+            &CallAdapter::slotAccountChanged);
     connect(&LRCInstance::behaviorController(),
             &BehaviorController::showCallView,
             this,
             &CallAdapter::slotShowCallView);
 }
 
+void
+CallAdapter::slotAccountChanged()
+{
+    connectCallModel(LRCInstance::getCurrAccId());
+}
+
 void
 CallAdapter::placeAudioOnlyCall()
 {
diff --git a/src/calladapter.h b/src/calladapter.h
index 25768e187..288ab0afc 100644
--- a/src/calladapter.h
+++ b/src/calladapter.h
@@ -86,6 +86,7 @@ public slots:
     void slotShowIncomingCallView(const QString &accountId,
                                   const lrc::api::conversation::Info &convInfo);
     void slotShowCallView(const QString &accountId, const lrc::api::conversation::Info &convInfo);
+    void slotAccountChanged();
 
 private:
     void updateCall(const QString &convUid = {},
diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp
index d5cd4b5d9..e27fc59e4 100644
--- a/src/conversationsadapter.cpp
+++ b/src/conversationsadapter.cpp
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2020 by Savoir-faire Linux
  * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>
- * Author: Anthony Léonard <anthony.leonard@savoirfairelinux.com>
+ * Author: Anthony L�onard <anthony.leonard@savoirfairelinux.com>
  * Author: Olivier Soldano <olivier.soldano@savoirfairelinux.com>
  * Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
  * Author: Isa Nanic <isa.nanic@savoirfairelinux.com>
@@ -45,10 +45,20 @@ ConversationsAdapter::initQmlObject()
             [this](const QString &accountId, lrc::api::conversation::Info convInfo) {
                 emit showChatView(accountId, convInfo.uid);
             });
+    connect(&LRCInstance::instance(),
+            &LRCInstance::currentAccountChanged,
+            this,
+            &ConversationsAdapter::slotAccountChanged);
 
     connectConversationModel();
 }
 
+void
+ConversationsAdapter::slotAccountChanged()
+{
+    connectConversationModel();
+}
+
 void
 ConversationsAdapter::backToWelcomePage()
 {
diff --git a/src/conversationsadapter.h b/src/conversationsadapter.h
index 33dea8fcc..9fbcac459 100644
--- a/src/conversationsadapter.h
+++ b/src/conversationsadapter.h
@@ -47,6 +47,9 @@ signals:
     void showChatView(const QString &accountId, const QString &convUid);
     void showConversationTabs(bool visible);
 
+public slots:
+    void slotAccountChanged();
+
 private:
     void initQmlObject() override;
     void setConversationFilter(lrc::api::profile::Type filter);
diff --git a/src/lrcinstance.h b/src/lrcinstance.h
index 16762f14b..190b3839e 100644
--- a/src/lrcinstance.h
+++ b/src/lrcinstance.h
@@ -284,6 +284,7 @@ public:
     setSelectedAccountId(const QString &accountId = {})
     {
         instance().selectedAccountId_ = accountId;
+        emit instance().currentAccountChanged();
         QSettings settings("jami.net", "Jami");
         settings.setValue(SettingsKey::selectedAccount, accountId);
 
@@ -454,6 +455,7 @@ public:
 
 signals:
     void accountListChanged();
+    void currentAccountChanged();
 
 private:
     LRCInstance(migrateCallback willMigrateCb = {}, migrateCallback didMigrateCb = {})
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index 1aa925be5..20311bd56 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -40,6 +40,16 @@ MessagesAdapter::~MessagesAdapter() {}
 
 void
 MessagesAdapter::initQmlObject()
+{
+    connect(&LRCInstance::instance(),
+            &LRCInstance::currentAccountChanged,
+            this,
+            &MessagesAdapter::slotAccountChanged);
+    connectConversationModel();
+}
+
+void
+MessagesAdapter::slotAccountChanged()
 {
     connectConversationModel();
 }
diff --git a/src/messagesadapter.h b/src/messagesadapter.h
index f3247661b..5323a1361 100644
--- a/src/messagesadapter.h
+++ b/src/messagesadapter.h
@@ -91,6 +91,7 @@ public slots:
     void slotUpdateDraft(const QString &content);
     void slotMessagesCleared();
     void slotMessagesLoaded();
+    void slotAccountChanged();
 
 private:
     void initQmlObject() override final;
-- 
GitLab