From fdd48c7607b31cd92df3e7714dae7047d3f9c26f Mon Sep 17 00:00:00 2001
From: agsantos <aline.gondimsantos@savoirfairelinux.com>
Date: Fri, 5 Nov 2021 16:28:47 -0400
Subject: [PATCH] conference: use requestmediachange in video resquest

Change-Id: I4a1722f6942ca55a7095998153dfd64b186fdb25
---
 src/newcallmodel.cpp | 40 +++++++++++++++++++++++++---------------
 1 file changed, 25 insertions(+), 15 deletions(-)

diff --git a/src/newcallmodel.cpp b/src/newcallmodel.cpp
index 2c4f1d02..8b36a672 100644
--- a/src/newcallmodel.cpp
+++ b/src/newcallmodel.cpp
@@ -366,7 +366,7 @@ NewCallModel::createCall(const QString& uri, bool isAudioOnly, VectorMapStringSt
     }
 #ifdef ENABLE_LIBWRAP
     auto callId = CallManager::instance().placeCallWithMedia(owner.id, uri, mediaList);
-#else // dbus
+#else  // dbus
     // do not use auto here (QDBusPendingReply<QString>)
     QString callId = CallManager::instance().placeCallWithMedia(owner.id, uri, mediaList);
 #endif // ENABLE_LIBWRAP
@@ -408,6 +408,7 @@ NewCallModel::requestMediaChange(const QString& callId,
     QString resource = "";
     int found = 0;
     QString srctype = MediaAttributeValue::SRC_TYPE_CAPTURE_DEVICE;
+    auto proposedList = callInfo->mediaList;
 
     switch (type) {
     case MediaRequestType::FILESHARING: {
@@ -417,23 +418,31 @@ NewCallModel::requestMediaChange(const QString& callId,
                                         .arg(sep)
                                         .arg(QUrl(uri).toLocalFile())
                                   : DRing::Media::VideoProtocolPrefix::NONE;
-        if (callInfo->type == call::Type::CONFERENCE) {
-            CallManager::instance().switchInput(owner.id, callId, resource);
-            return;
-        }
         if (!resource.isEmpty())
             srctype = MediaAttributeValue::SRC_TYPE_FILE;
+        if (callInfo->type == call::Type::CONFERENCE) {
+            proposedList.push_back({{MediaAttributeKey::MEDIA_TYPE, MediaAttributeValue::VIDEO},
+                                    {MediaAttributeKey::ENABLED, "true"},
+                                    {MediaAttributeKey::MUTED, mute ? "true" : "false"},
+                                    {MediaAttributeKey::SOURCE_TYPE, srctype},
+                                    {MediaAttributeKey::SOURCE, resource},
+                                    {MediaAttributeKey::LABEL, mediaLabel}});
+        }
 
         break;
     }
     case MediaRequestType::SCREENSHARING: {
         // Screen/window sharing
         resource = uri;
+        srctype = MediaAttributeValue::SRC_TYPE_DISPLAY;
         if (callInfo->type == call::Type::CONFERENCE) {
-            CallManager::instance().switchInput(owner.id, callId, resource);
-            return;
+            proposedList.push_back({{MediaAttributeKey::MEDIA_TYPE, MediaAttributeValue::VIDEO},
+                                    {MediaAttributeKey::ENABLED, "true"},
+                                    {MediaAttributeKey::MUTED, mute ? "true" : "false"},
+                                    {MediaAttributeKey::SOURCE_TYPE, srctype},
+                                    {MediaAttributeKey::SOURCE, resource},
+                                    {MediaAttributeKey::LABEL, mediaLabel}});
         }
-        srctype = MediaAttributeValue::SRC_TYPE_DISPLAY;
         break;
     }
     case MediaRequestType::CAMERA: {
@@ -443,6 +452,7 @@ NewCallModel::requestMediaChange(const QString& callId,
                                         .arg(sep)
                                         .arg(uri)
                                   : DRing::Media::VideoProtocolPrefix::NONE;
+        srctype = MediaAttributeValue::SRC_TYPE_CAPTURE_DEVICE;
 
         if (callInfo->type == call::Type::CONFERENCE) {
             if (mediaLabel.contains("audio_0")) {
@@ -450,23 +460,23 @@ NewCallModel::requestMediaChange(const QString& callId,
                                                        callId,
                                                        DRing::Media::Details::MEDIA_TYPE_AUDIO,
                                                        !callInfo->audioMuted && mute);
+                return;
             } else if (mediaLabel.contains("video_0")) {
-                CallManager::instance().muteLocalMedia(owner.id,
-                                                       callId,
-                                                       DRing::Media::Details::MEDIA_TYPE_VIDEO,
-                                                       !callInfo->videoMuted && mute);
+                proposedList.push_back({{MediaAttributeKey::MEDIA_TYPE, MediaAttributeValue::VIDEO},
+                                        {MediaAttributeKey::ENABLED, "true"},
+                                        {MediaAttributeKey::MUTED, mute ? "true" : "false"},
+                                        {MediaAttributeKey::SOURCE_TYPE, srctype},
+                                        {MediaAttributeKey::SOURCE, resource},
+                                        {MediaAttributeKey::LABEL, mediaLabel}});
             }
-            return;
         }
 
-        srctype = MediaAttributeValue::SRC_TYPE_CAPTURE_DEVICE;
         break;
     }
     default:
         return;
     }
 
-    auto proposedList = callInfo->mediaList;
     for (auto& item : proposedList) {
         if (item[MediaAttributeKey::LABEL] == mediaLabel) {
             mute = resource.isEmpty() ? item[MediaAttributeKey::MUTED] == "false" : mute;
-- 
GitLab