From 4cbfe7a966d6c56ebb1e9c1d93ee76c74c1874d4 Mon Sep 17 00:00:00 2001
From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com>
Date: Fri, 6 Nov 2020 10:52:21 -0500
Subject: [PATCH] calladapter: initialize auto answer calls for non-current
 accounts

Gitlab: #193
Change-Id: I9ab1c298a1f720165affa55c0350bb27dfd67030
---
 src/calladapter.cpp       | 7 +++++--
 src/calladapter.h         | 6 +++---
 src/mainview/MainView.qml | 1 +
 src/rendermanager.cpp     | 8 ++++++++
 src/rendermanager.h       | 2 +-
 5 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/calladapter.cpp b/src/calladapter.cpp
index 6f973bd3e..385a211b9 100644
--- a/src/calladapter.cpp
+++ b/src/calladapter.cpp
@@ -227,6 +227,11 @@ CallAdapter::updateCall(const QString& convUid, const QString& accountId, bool f
     emit callSetupMainViewRequired(accountId_, convUid_);
     updateCallOverlay(convInfo);
     emit previewVisibilityNeedToChange(shouldShowPreview(forceCallOnly));
+
+    if (call->status == lrc::api::call::Status::IN_PROGRESS) {
+        LRCInstance::renderer()->addDistantRenderer(call->id);
+        LRCInstance::getAccountInfo(accountId).callModel->setCurrentCall(call->id);
+    }
 }
 
 bool
@@ -457,9 +462,7 @@ CallAdapter::connectCallModel(const QString& accountId)
                 if (!convInfo.uid.isEmpty() && convInfo.uid == LRCInstance::getCurrentConvUid()) {
                     accInfo.conversationModel->selectConversation(convInfo.uid);
                 }
-                LRCInstance::renderer()->addDistantRenderer(callId);
                 updateCall(convInfo.uid, accountId);
-                LRCInstance::getAccountInfo(accountId).callModel->setCurrentCall(callId);
                 break;
             }
             case lrc::api::call::Status::PAUSED:
diff --git a/src/calladapter.h b/src/calladapter.h
index 4c59cfe74..f8767b721 100644
--- a/src/calladapter.h
+++ b/src/calladapter.h
@@ -70,6 +70,9 @@ public:
     Q_INVOKABLE void muteParticipant(const QString& uri, const bool state);
     Q_INVOKABLE bool isMuted(const QString& uri) const;
     Q_INVOKABLE void hangupParticipant(const QString& uri);
+    Q_INVOKABLE void updateCall(const QString& convUid = {},
+                                const QString& accountId = {},
+                                bool forceCallOnly = false);
 
 signals:
     void callStatusChanged(int index, const QString& accountId, const QString& convUid);
@@ -101,9 +104,6 @@ public slots:
     void slotAccountChanged();
 
 private:
-    void updateCall(const QString& convUid = {},
-                    const QString& accountId = {},
-                    bool forceCallOnly = false);
     bool shouldShowPreview(bool force);
     void showNotification(const QString& accountId, const QString& convUid);
 
diff --git a/src/mainview/MainView.qml b/src/mainview/MainView.qml
index 163c2bab8..6fbe9d42a 100644
--- a/src/mainview/MainView.qml
+++ b/src/mainview/MainView.qml
@@ -148,6 +148,7 @@ Window {
                         AccountAdapter.currentAccountId)
             ConversationsAdapter.selectConversation(
                         AccountAdapter.currentAccountId, callConv)
+            CallAdapter.updateCall(callConv, currentAccountId)
         } else {
             showWelcomeView()
         }
diff --git a/src/rendermanager.cpp b/src/rendermanager.cpp
index f29f9ae21..f6d59158b 100644
--- a/src/rendermanager.cpp
+++ b/src/rendermanager.cpp
@@ -269,6 +269,14 @@ RenderManager::addDistantRenderer(const QString& id)
          * Connect FrameWrapper to avmodel.
          */
         dfw->connectStartRendering();
+        try {
+            /*
+             * If the renderer has already started, then start the slot.
+             */
+            if (avModel_.getRenderer(id).isRendering())
+                dfw->slotRenderingStarted(id);
+        } catch (...) {
+        }
 
         /*
          * Add to map.
diff --git a/src/rendermanager.h b/src/rendermanager.h
index b9ce21634..298f9d76a 100644
--- a/src/rendermanager.h
+++ b/src/rendermanager.h
@@ -89,7 +89,7 @@ signals:
      */
     void renderingStopped(const QString& id);
 
-private slots:
+public slots:
     /*
      * Used to listen to AVModel::rendererStarted.
      * @param id of the renderer
-- 
GitLab