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