From 8230fb863c4da44f8dbd0caa3104c873d9d59d94 Mon Sep 17 00:00:00 2001
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
Date: Mon, 10 May 2021 16:26:16 -0400
Subject: [PATCH] adapters: handle injecting lrcinstance with zero accounts

Change-Id: I1ec652c60620cf4e7e1caad7fd00ddf1aa40d64d
---
 src/conversationlistmodel.cpp |  3 +++
 src/conversationsadapter.cpp  | 17 ++++++++---------
 src/lrcinstance.cpp           | 21 ++++++++++++++++++---
 3 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/src/conversationlistmodel.cpp b/src/conversationlistmodel.cpp
index cd3fd035a..a14f1818b 100644
--- a/src/conversationlistmodel.cpp
+++ b/src/conversationlistmodel.cpp
@@ -24,6 +24,9 @@
 ConversationListModel::ConversationListModel(LRCInstance* instance, QObject* parent)
     : ConversationListModelBase(instance, parent)
 {
+    if (!model_)
+        return;
+
     connect(
         model_,
         &ConversationModel::beginInsertRows,
diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp
index ade05c597..1d1c7ed4f 100644
--- a/src/conversationsadapter.cpp
+++ b/src/conversationsadapter.cpp
@@ -99,8 +99,6 @@ ConversationsAdapter::ConversationsAdapter(SystemTray* systemTray,
         Q_EMIT convSrcModel_->dataChanged(index, index);
     });
 
-    updateConversationFilterData();
-
 #ifdef Q_OS_LINUX
     // notification responses
     connect(systemTray_,
@@ -188,15 +186,8 @@ ConversationsAdapter::onCurrentAccountIdChanged()
 {
     lrcInstance_->deselectConversation();
 
-    convSrcModel_.reset(new ConversationListModel(lrcInstance_));
-    convModel_->bindSourceModel(convSrcModel_.get());
-    searchSrcModel_.reset(new SearchResultsListModel(lrcInstance_));
-    searchModel_->bindSourceModel(searchSrcModel_.get());
-
     connectConversationModel();
 
-    updateConversationFilterData();
-
     set_currentTypeFilter(lrcInstance_->getCurrentAccountInfo().profileInfo.type);
 }
 
@@ -502,6 +493,14 @@ ConversationsAdapter::connectConversationModel(bool updateFilter)
     if (updateFilter) {
         currentTypeFilter_ = profile::Type::INVALID;
     }
+
+    convSrcModel_.reset(new ConversationListModel(lrcInstance_));
+    convModel_->bindSourceModel(convSrcModel_.get());
+    searchSrcModel_.reset(new SearchResultsListModel(lrcInstance_));
+    searchModel_->bindSourceModel(searchSrcModel_.get());
+
+    updateConversationFilterData();
+
     return true;
 }
 
diff --git a/src/lrcinstance.cpp b/src/lrcinstance.cpp
index facb7be48..d6c6fd5bf 100644
--- a/src/lrcinstance.cpp
+++ b/src/lrcinstance.cpp
@@ -210,19 +210,34 @@ LRCInstance::getConversationFromCallId(const QString& callId, const QString& acc
 ConversationModel*
 LRCInstance::getCurrentConversationModel()
 {
-    return getCurrentAccountInfo().conversationModel.get();
+    try {
+        const auto& accInfo = getCurrentAccountInfo();
+        return accInfo.conversationModel.get();
+    } catch (...) {
+        return nullptr;
+    }
 }
 
 NewCallModel*
 LRCInstance::getCurrentCallModel()
 {
-    return getCurrentAccountInfo().callModel.get();
+    try {
+        const auto& accInfo = getCurrentAccountInfo();
+        return accInfo.callModel.get();
+    } catch (...) {
+        return nullptr;
+    }
 }
 
 ContactModel*
 LRCInstance::getCurrentContactModel()
 {
-    return getCurrentAccountInfo().contactModel.get();
+    try {
+        const auto& accInfo = getCurrentAccountInfo();
+        return accInfo.contactModel.get();
+    } catch (...) {
+        return nullptr;
+    }
 }
 
 const QString&
-- 
GitLab