From 9f570a3ceef5617770d46cff86d4d02f85ec3b98 Mon Sep 17 00:00:00 2001
From: Xavier Jouslin de Noray <xavier.jouslindenoray@savoirfairelinux.com>
Date: Tue, 22 Aug 2023 12:01:14 -0400
Subject: [PATCH] Plugin Queries: resolve architecture to be able to handle
 dynamically all platform

Change-Id: I35ea5be7dc87dcf2e15b5803f9819887c946b91a
---
 src/app/pluginadapter.cpp                     | 34 +++++++++++--------
 src/app/pluginversionmanager.cpp              |  7 ++--
 src/app/utils.cpp                             |  6 ----
 src/app/utils.h                               |  2 --
 src/libclient/api/pluginmodel.h               |  1 +
 src/libclient/pluginmodel.cpp                 |  6 ++++
 src/libclient/qtwrapper/pluginmanager.cpp     |  6 ++++
 src/libclient/qtwrapper/pluginmanagerMock.cpp |  6 ++++
 src/libclient/qtwrapper/pluginmanager_wrap.h  |  2 ++
 9 files changed, 44 insertions(+), 26 deletions(-)

diff --git a/src/app/pluginadapter.cpp b/src/app/pluginadapter.cpp
index edfa0d4ce..c01d69e8b 100644
--- a/src/app/pluginadapter.cpp
+++ b/src/app/pluginadapter.cpp
@@ -90,7 +90,8 @@ PluginAdapter::getPluginsFromStore()
                                            Q_EMIT storeNotAvailable();
                                        });
     pluginVersionManager_
-        ->sendGetRequest(QUrl(baseUrl_ + "?arch=" + Utils::getPlatformString()),
+        ->sendGetRequest(QUrl(baseUrl_
+                              + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"]),
                          [this, errorHandler](const QByteArray& data) {
                              auto result = QJsonDocument::fromJson(data).array();
                              auto pluginsInstalled = lrcInstance_->pluginModel().getPluginsId();
@@ -112,18 +113,19 @@ PluginAdapter::getPluginsFromStore()
 void
 PluginAdapter::getPluginDetails(const QString& pluginId)
 {
-    pluginVersionManager_->sendGetRequest(QUrl(baseUrl_ + "/details/" + pluginId
-                                               + "?arch=" + Utils::getPlatformString()),
-                                          [this](const QByteArray& data) {
-                                              auto result = QJsonDocument::fromJson(data).object();
-                                              // my response is a json object and I want to convert
-                                              // it to a QVariantMap
-                                              auto plugin = result.toVariantMap();
-                                              if (!plugin.contains("id")) {
-                                                  plugin["id"] = plugin["name"];
-                                              }
-                                              pluginStoreListModel_->addPlugin(plugin);
-                                          });
+    pluginVersionManager_
+        ->sendGetRequest(QUrl(baseUrl_ + "/details/" + pluginId
+                              + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"]),
+                         [this](const QByteArray& data) {
+                             auto result = QJsonDocument::fromJson(data).object();
+                             // my response is a json object and I want to convert
+                             // it to a QVariantMap
+                             auto plugin = result.toVariantMap();
+                             if (!plugin.contains("id")) {
+                                 plugin["id"] = plugin["name"];
+                             }
+                             pluginStoreListModel_->addPlugin(plugin);
+                         });
 }
 
 void
@@ -204,11 +206,13 @@ PluginAdapter::baseUrl() const
 QString
 PluginAdapter::getIconUrl(const QString& pluginId) const
 {
-    return baseUrl_ + "/icons/" + pluginId + "?arch=" + Utils::getPlatformString();
+    return baseUrl_ + "/icons/" + pluginId
+           + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"];
 }
 
 QString
 PluginAdapter::getBackgroundImageUrl(const QString& pluginId) const
 {
-    return baseUrl_ + "/backgrounds/" + pluginId + "?arch=" + Utils::getPlatformString();
+    return baseUrl_ + "/backgrounds/" + pluginId
+           + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"];
 }
diff --git a/src/app/pluginversionmanager.cpp b/src/app/pluginversionmanager.cpp
index e508402b9..04c850d3f 100644
--- a/src/app/pluginversionmanager.cpp
+++ b/src/app/pluginversionmanager.cpp
@@ -103,8 +103,8 @@ public:
             return;
         }
 
-        parent_.sendGetRequest(QUrl(parent_.baseUrl + "/versions/" + plugin.id
-                                    + "?arch=" + Utils::getPlatformString()),
+        parent_.sendGetRequest(QUrl(parent_.baseUrl + "/versions/" + plugin.id + "?arch="
+                                    + lrcInstance_->pluginModel().getPlatformInfo()["os"]),
                                [this, plugin](const QByteArray& data) {
                                    // `data` represents the version in this case.
                                    if (plugin.version < data) {
@@ -121,7 +121,8 @@ public:
     void installRemotePlugin(const QString& pluginId)
     {
         parent_.downloadFile(
-            QUrl(parent_.baseUrl + "/download/" + Utils::getPlatformString() + "/" + pluginId),
+            QUrl(parent_.baseUrl + "/download/"
+                 + lrcInstance_->pluginModel().getPlatformInfo()["os"] + "/" + pluginId),
             pluginId,
             0,
             [this, pluginId](bool success, const QString& error) {
diff --git a/src/app/utils.cpp b/src/app/utils.cpp
index cbd725b87..57fe7e6aa 100644
--- a/src/app/utils.cpp
+++ b/src/app/utils.cpp
@@ -931,9 +931,3 @@ Utils::generateUid()
 {
     return QUuid::createUuid().toString(QUuid::Id128);
 }
-
-QString
-Utils::getPlatformString()
-{
-    return "desktop";
-}
diff --git a/src/app/utils.h b/src/app/utils.h
index 6f7bed819..6e762be25 100644
--- a/src/app/utils.h
+++ b/src/app/utils.h
@@ -126,6 +126,4 @@ QString generateUid();
 // Misc
 QString humanFileSize(qint64 fileSize);
 QString getDebugFilePath();
-
-QString getPlatformString();
 } // namespace Utils
diff --git a/src/libclient/api/pluginmodel.h b/src/libclient/api/pluginmodel.h
index 2faafeac0..88bdae939 100644
--- a/src/libclient/api/pluginmodel.h
+++ b/src/libclient/api/pluginmodel.h
@@ -102,6 +102,7 @@ public:
      */
     QString getPluginPath(const QString& pluginId);
 
+    MapStringString getPlatformInfo();
     /**
      * @brief fetch all plugins path and id
      *
diff --git a/src/libclient/pluginmodel.cpp b/src/libclient/pluginmodel.cpp
index 7afd2acb1..7e80d30c6 100644
--- a/src/libclient/pluginmodel.cpp
+++ b/src/libclient/pluginmodel.cpp
@@ -109,6 +109,12 @@ PluginModel::getPluginDetails(const QString& path)
     return result;
 }
 
+MapStringString
+PluginModel::getPlatformInfo()
+{
+    return PluginManager::instance().getPlatformInfo();
+}
+
 bool
 PluginModel::installPlugin(const QString& jplPath, bool force)
 {
diff --git a/src/libclient/qtwrapper/pluginmanager.cpp b/src/libclient/qtwrapper/pluginmanager.cpp
index cc6c13db4..af74942f2 100644
--- a/src/libclient/qtwrapper/pluginmanager.cpp
+++ b/src/libclient/qtwrapper/pluginmanager.cpp
@@ -60,6 +60,12 @@ PluginManagerInterface::uninstallPlugin(const QString& pluginRootPath)
     return libjami::uninstallPlugin(pluginRootPath.toStdString());
 }
 
+MapStringString
+PluginManagerInterface::getPlatformInfo()
+{
+    return convertMap(libjami::getPlatformInfo());
+}
+
 QStringList
 PluginManagerInterface::getCallMediaHandlers()
 {
diff --git a/src/libclient/qtwrapper/pluginmanagerMock.cpp b/src/libclient/qtwrapper/pluginmanagerMock.cpp
index c0194f22c..4b89113a0 100644
--- a/src/libclient/qtwrapper/pluginmanagerMock.cpp
+++ b/src/libclient/qtwrapper/pluginmanagerMock.cpp
@@ -61,6 +61,12 @@ PluginManagerInterface::uninstallPlugin(const QString& pluginRootPath)
     return 0;
 }
 
+MapStringString
+PluginManagerInterface::getPlatformInfo()
+{
+    return {};
+}
+
 QStringList
 PluginManagerInterface::getCallMediaHandlers()
 {
diff --git a/src/libclient/qtwrapper/pluginmanager_wrap.h b/src/libclient/qtwrapper/pluginmanager_wrap.h
index 9e2a6befc..cbf35edfb 100644
--- a/src/libclient/qtwrapper/pluginmanager_wrap.h
+++ b/src/libclient/qtwrapper/pluginmanager_wrap.h
@@ -58,6 +58,8 @@ public Q_SLOTS: // METHODS
 
     int uninstallPlugin(const QString& pluginRootPath);
 
+    MapStringString getPlatformInfo();
+
     QStringList getCallMediaHandlers();
 
     void toggleCallMediaHandler(const QString& mediaHandlerId, const QString& callId, bool toggle);
-- 
GitLab