From d765fc9297dccb5099624564e8636897d5f0d429 Mon Sep 17 00:00:00 2001
From: Xavier Jouslin de Noray <xavier.jouslindenoray@savoirfairelinux.com>
Date: Wed, 13 Sep 2023 15:00:26 -0400
Subject: [PATCH] PluginStoreEndPoint: add possibility to change the plugin
 store end point

Gitlab: #1341
Change-Id: Ib4516c6cf2361a4976230a6b056a4c072932a92b
---
 src/app/appsettingsmanager.h     |  1 +
 src/app/pluginadapter.cpp        | 13 ++++++-------
 src/app/pluginadapter.h          |  3 ++-
 src/app/pluginversionmanager.cpp | 16 ++++++++--------
 src/app/pluginversionmanager.h   |  4 +---
 5 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/src/app/appsettingsmanager.h b/src/app/appsettingsmanager.h
index b28deddc0..69344ac6c 100644
--- a/src/app/appsettingsmanager.h
+++ b/src/app/appsettingsmanager.h
@@ -57,6 +57,7 @@ extern const QString defaultDownloadPath;
     X(WindowState, QWindow::AutomaticVisibility) \
     X(EnableExperimentalSwarm, false) \
     X(LANG, "SYSTEM") \
+    X(PluginStoreEndpoint, "https://plugins.jami.net") \
     X(PositionShareDuration, 15) \
     X(PositionShareLimit, true) \
     X(FlipSelf, true) \
diff --git a/src/app/pluginadapter.cpp b/src/app/pluginadapter.cpp
index 79a9ff944..ccc23df89 100644
--- a/src/app/pluginadapter.cpp
+++ b/src/app/pluginadapter.cpp
@@ -40,12 +40,11 @@ PluginAdapter::PluginAdapter(LRCInstance* instance,
                              QString baseUrl)
     : QmlAdapterBase(instance, parent)
     , pluginStoreListModel_(new PluginStoreListModel(instance, this))
-    , pluginVersionManager_(new PluginVersionManager(instance, baseUrl, this))
+    , pluginVersionManager_(new PluginVersionManager(instance, this))
     , pluginListModel_(new PluginListModel(instance, this))
     , lrcInstance_(instance)
     , settingsManager_(settingsManager)
     , tempPath_(QDir::tempPath())
-    , baseUrl_(baseUrl)
 
 {
     QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, pluginStoreListModel_, "PluginStoreListModel");
@@ -99,7 +98,7 @@ PluginAdapter::getPluginsFromStore()
     const auto& language = settingsManager_->getLanguage();
     header["Accept-Language"] = QByteArray(language.toStdString().c_str(), language.size());
     pluginVersionManager_
-        ->sendGetRequest(QUrl(baseUrl_
+        ->sendGetRequest(QUrl(baseUrl()
                               + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"]),
                          header,
                          [this, errorHandler](const QByteArray& data) {
@@ -127,7 +126,7 @@ PluginAdapter::getPluginDetails(const QString& pluginId)
     const auto& language = settingsManager_->getLanguage();
     header["Accept-Language"] = QByteArray(language.toStdString().c_str(), language.size());
     pluginVersionManager_
-        ->sendGetRequest(QUrl(baseUrl_ + "/details/" + pluginId
+        ->sendGetRequest(QUrl(baseUrl() + "/details/" + pluginId
                               + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"]),
                          header,
                          [this](const QByteArray& data) {
@@ -214,19 +213,19 @@ PluginAdapter::checkVersionStatus(const QString& pluginId)
 QString
 PluginAdapter::baseUrl() const
 {
-    return baseUrl_;
+    return settingsManager_->getValue("PluginStoreEndpoint").toString();
 }
 
 QString
 PluginAdapter::getIconUrl(const QString& pluginId) const
 {
-    return baseUrl_ + "/icons/" + pluginId
+    return baseUrl() + "/icons/" + pluginId
            + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"];
 }
 
 QString
 PluginAdapter::getBackgroundImageUrl(const QString& pluginId) const
 {
-    return baseUrl_ + "/backgrounds/" + pluginId
+    return baseUrl() + "/backgrounds/" + pluginId
            + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"];
 }
diff --git a/src/app/pluginadapter.h b/src/app/pluginadapter.h
index 5b7c3ae92..f79d35384 100644
--- a/src/app/pluginadapter.h
+++ b/src/app/pluginadapter.h
@@ -22,6 +22,7 @@
 #include "pluginlistmodel.h"
 #include "pluginhandlerlistmodel.h"
 #include "pluginlistpreferencemodel.h"
+#include "appsettingsmanager.h"
 #include "pluginversionmanager.h"
 #include "pluginstorelistmodel.h"
 #include "preferenceitemlistmodel.h"
@@ -78,8 +79,8 @@ private:
     std::unique_ptr<PluginHandlerListModel> pluginHandlerListModel_;
 
     LRCInstance* lrcInstance_;
+    AppSettingsManager* settingsManager_;
     std::mutex mtx_;
     QString tempPath_;
     QString baseUrl_;
-    AppSettingsManager* settingsManager_;
 };
diff --git a/src/app/pluginversionmanager.cpp b/src/app/pluginversionmanager.cpp
index 6f2c11d52..e6a177e7f 100644
--- a/src/app/pluginversionmanager.cpp
+++ b/src/app/pluginversionmanager.cpp
@@ -33,7 +33,7 @@ public:
     Impl(LRCInstance* instance, PluginVersionManager& parent)
         : QObject(nullptr)
         , parent_(parent)
-        , appSettingsManager_(new AppSettingsManager(this))
+        , settingsManager_(new AppSettingsManager(this))
         , lrcInstance_(instance)
         , tempPath_(QDir::tempPath())
         , updateTimer_(new QTimer(this))
@@ -78,12 +78,12 @@ public:
 
     bool isAutoUpdaterEnabled()
     {
-        return appSettingsManager_->getValue(Settings::Key::PluginAutoUpdate).toBool();
+        return settingsManager_->getValue(Settings::Key::PluginAutoUpdate).toBool();
     }
 
     void setAutoUpdate(bool state)
     {
-        appSettingsManager_->setValue(Settings::Key::PluginAutoUpdate, state);
+        settingsManager_->setValue(Settings::Key::PluginAutoUpdate, state);
     }
 
     void checkVersionStatus(const QString& pluginId)
@@ -103,7 +103,8 @@ public:
             return;
         }
 
-        parent_.sendGetRequest(QUrl(parent_.baseUrl + "/versions/" + plugin.id + "?arch="
+        parent_.sendGetRequest(QUrl(settingsManager_->getValue("PluginStoreEndpoint").toString()
+                                    + "/versions/" + plugin.id + "?arch="
                                     + lrcInstance_->pluginModel().getPlatformInfo()["os"]),
                                [this, plugin](const QByteArray& data) {
                                    // `data` represents the version in this case.
@@ -121,7 +122,7 @@ public:
     void installRemotePlugin(const QString& pluginId)
     {
         parent_.downloadFile(
-            QUrl(parent_.baseUrl + "/download/"
+            QUrl(settingsManager_->getValue("PluginStoreEndpoint").toString() + "/download/"
                  + lrcInstance_->pluginModel().getPlatformInfo()["os"] + "/" + pluginId),
             pluginId,
             0,
@@ -158,15 +159,14 @@ public:
     };
 
     PluginVersionManager& parent_;
-    AppSettingsManager* appSettingsManager_ {nullptr};
+    AppSettingsManager* settingsManager_ {nullptr};
     LRCInstance* lrcInstance_ {nullptr};
     QString tempPath_;
     QTimer* updateTimer_;
 };
 
-PluginVersionManager::PluginVersionManager(LRCInstance* instance, QString& baseUrl, QObject* parent)
+PluginVersionManager::PluginVersionManager(LRCInstance* instance, QObject* parent)
     : NetworkManager(&instance->connectivityMonitor(), parent)
-    , baseUrl(baseUrl)
     , pimpl_(std::make_unique<Impl>(instance, *this))
 {}
 
diff --git a/src/app/pluginversionmanager.h b/src/app/pluginversionmanager.h
index cf03b0b85..9aff2feaf 100644
--- a/src/app/pluginversionmanager.h
+++ b/src/app/pluginversionmanager.h
@@ -46,9 +46,7 @@ class PluginVersionManager final : public NetworkManager
 {
     Q_OBJECT
 public:
-    explicit PluginVersionManager(LRCInstance* instance,
-                                  QString& baseUrl,
-                                  QObject* parent = nullptr);
+    explicit PluginVersionManager(LRCInstance* instance, QObject* parent = nullptr);
     ~PluginVersionManager();
 
     Q_INVOKABLE bool isAutoUpdaterEnabled();
-- 
GitLab