From 3d65bb562b73a9e7317216263a80f123d803629e Mon Sep 17 00:00:00 2001
From: agsantos <aline.gondimsantos@savoirfairelinux.com>
Date: Mon, 26 Oct 2020 16:29:24 -0400
Subject: [PATCH] plugins: add callId to API

Change-Id: Ieb4b8c1b507cdc8905e364c375df76e30b7c87c6
---
 .../components/MediaHandlerPicker.qml         | 17 ++++++++++---
 src/mediahandleritemlistmodel.cpp             | 25 +++++++++++++++----
 src/mediahandleritemlistmodel.h               |  8 +++++-
 src/pluginadapter.cpp                         |  4 +--
 src/pluginadapter.h                           |  2 +-
 .../components/PluginSettingsPage.qml         |  1 -
 6 files changed, 43 insertions(+), 14 deletions(-)

diff --git a/src/mainview/components/MediaHandlerPicker.qml b/src/mainview/components/MediaHandlerPicker.qml
index 6e002b68a..fec106108 100644
--- a/src/mainview/components/MediaHandlerPicker.qml
+++ b/src/mainview/components/MediaHandlerPicker.qml
@@ -21,14 +21,17 @@ import QtQuick.Controls 2.14
 import QtQuick.Layouts 1.14
 import QtQuick.Controls.Universal 2.14
 import net.jami.Models 1.0
+import net.jami.Adapters 1.0
 
 import "../../commoncomponents"
 
 Popup {
     id: root
     function toggleMediaHandlerSlot(mediaHandlerId, isLoaded) {
-        PluginModel.toggleCallMediaHandler(mediaHandlerId, !isLoaded)
-        mediahandlerPickerListView.model = PluginAdapter.getMediaHandlerSelectableModel()
+        var callId = UtilsAdapter.getCallId(callStackViewWindow.responsibleAccountId,
+                                            callStackViewWindow.responsibleConvUid)
+        PluginModel.toggleCallMediaHandler(mediaHandlerId, callId, !isLoaded)
+        mediahandlerPickerListView.model = PluginAdapter.getMediaHandlerSelectableModel(callId)
     }
 
     width: 350
@@ -93,7 +96,11 @@ Popup {
                     Layout.preferredWidth: mediahandlerPickerPopupRect.width
                     Layout.preferredHeight: 200
 
-                    model: PluginAdapter.getMediaHandlerSelectableModel()
+                    model: {
+                        var callId = UtilsAdapter.getCallId(callStackViewWindow.responsibleAccountId,
+                                                            callStackViewWindow.responsibleConvUid)
+                        return PluginAdapter.getMediaHandlerSelectableModel(callId)
+                        }
 
                     clip: true
 
@@ -235,7 +242,9 @@ Popup {
 
     onAboutToShow: {
         // Reset the model on each show.
-        mediahandlerPickerListView.model = PluginAdapter.getMediaHandlerSelectableModel()
+        var callId = UtilsAdapter.getCallId(callStackViewWindow.responsibleAccountId,
+                                            callStackViewWindow.responsibleConvUid)
+        mediahandlerPickerListView.model = PluginAdapter.getMediaHandlerSelectableModel(callId)
     }
 
     background: Rectangle {
diff --git a/src/mediahandleritemlistmodel.cpp b/src/mediahandleritemlistmodel.cpp
index 3c9d3a157..2fae003bf 100644
--- a/src/mediahandleritemlistmodel.cpp
+++ b/src/mediahandleritemlistmodel.cpp
@@ -18,9 +18,11 @@
 
 #include "mediahandleritemlistmodel.h"
 
-MediaHandlerItemListModel::MediaHandlerItemListModel(QObject* parent)
+MediaHandlerItemListModel::MediaHandlerItemListModel(QObject* parent, const QString& callId)
     : QAbstractListModel(parent)
-{}
+{
+    callId_ = callId;
+}
 
 MediaHandlerItemListModel::~MediaHandlerItemListModel() {}
 
@@ -59,10 +61,11 @@ MediaHandlerItemListModel::data(const QModelIndex& index, int role) const
 
     auto details = LRCInstance::pluginModel().getCallMediaHandlerDetails(
         mediahandlerList.at(index.row()));
-    auto status = LRCInstance::pluginModel().getCallMediaHandlerStatus();
+    auto status = LRCInstance::pluginModel().getCallMediaHandlerStatus(callId_);
     bool loaded = false;
-    if (status["name"] == details.id)
-        loaded = true;
+    for (const auto& mediaHandler : status[callId_])
+        if (mediaHandler == details.id)
+            loaded = true;
     if (!details.pluginId.isEmpty()) {
         details.pluginId.remove(details.pluginId.size() - 5, 5);
     }
@@ -132,3 +135,15 @@ MediaHandlerItemListModel::reset()
     beginResetModel();
     endResetModel();
 }
+
+QString
+MediaHandlerItemListModel::callId()
+{
+    return callId_;
+}
+
+void
+MediaHandlerItemListModel::setCallId(QString callId)
+{
+    callId_ = callId;
+}
diff --git a/src/mediahandleritemlistmodel.h b/src/mediahandleritemlistmodel.h
index 11fe45b3b..7f262361f 100644
--- a/src/mediahandleritemlistmodel.h
+++ b/src/mediahandleritemlistmodel.h
@@ -38,7 +38,7 @@ public:
     };
     Q_ENUM(Role)
 
-    explicit MediaHandlerItemListModel(QObject* parent = 0);
+    explicit MediaHandlerItemListModel(QObject* parent = 0, const QString& callId = QString(""));
     ~MediaHandlerItemListModel();
 
     /*
@@ -59,4 +59,10 @@ public:
      * This function is to reset the model when there's new account added.
      */
     Q_INVOKABLE void reset();
+
+    QString callId();
+    void setCallId(QString callId);
+
+private:
+    QString callId_ = QString("");
 };
diff --git a/src/pluginadapter.cpp b/src/pluginadapter.cpp
index 57b5d8bec..83aa1f1d5 100644
--- a/src/pluginadapter.cpp
+++ b/src/pluginadapter.cpp
@@ -25,9 +25,9 @@ PluginAdapter::PluginAdapter(QObject* parent)
 {}
 
 QVariant
-PluginAdapter::getMediaHandlerSelectableModel()
+PluginAdapter::getMediaHandlerSelectableModel(const QString& callId)
 {
-    mediaHandlerListModel_.reset(new MediaHandlerItemListModel(this));
+    mediaHandlerListModel_.reset(new MediaHandlerItemListModel(this, callId));
     return QVariant::fromValue(mediaHandlerListModel_.get());
 }
 
diff --git a/src/pluginadapter.h b/src/pluginadapter.h
index 814fcbb40..13a1fd48a 100644
--- a/src/pluginadapter.h
+++ b/src/pluginadapter.h
@@ -38,7 +38,7 @@ public:
 protected:
     void safeInit() override {};
 
-    Q_INVOKABLE QVariant getMediaHandlerSelectableModel();
+    Q_INVOKABLE QVariant getMediaHandlerSelectableModel(const QString& callId = QString(""));
     Q_INVOKABLE QVariant getPluginSelectableModel();
     Q_INVOKABLE QVariant getPluginPreferencesModel(const QString& pluginId,
                                                    const QString& mediaHandlerName = "");
diff --git a/src/settingsview/components/PluginSettingsPage.qml b/src/settingsview/components/PluginSettingsPage.qml
index dbc5cb93b..ba7cf7408 100644
--- a/src/settingsview/components/PluginSettingsPage.qml
+++ b/src/settingsview/components/PluginSettingsPage.qml
@@ -65,7 +65,6 @@ Rectangle {
 
                 pluginListSettingsView.visible = checked
                 if (!pluginListSettingsView.visible) {
-                    PluginModel.toggleCallMediaHandler("", true)
                     pluginListSettingsView.hidePreferences()
                 }
             }
-- 
GitLab