diff --git a/src/app/networkmanager.cpp b/src/app/networkmanager.cpp index 7bad5e6c6bbc8a01952f5bd49e226175fb138580..501758fbaa03f3923001da1e26ead9a30eb20ca9 100644 --- a/src/app/networkmanager.cpp +++ b/src/app/networkmanager.cpp @@ -59,7 +59,28 @@ void NetworkManager::sendGetRequest(const QUrl& url, std::function<void(const QByteArray&)>&& onDoneCallback) { - auto* const reply = manager_->get(QNetworkRequest(url)); + QNetworkRequest request = QNetworkRequest(url); + sendGetRequest(request, std::move(onDoneCallback)); +} + +void +NetworkManager::sendGetRequest(const QUrl& url, + const QMap<QString, QByteArray>& header, + std::function<void(const QByteArray&)>&& onDoneCallback) +{ + QNetworkRequest request = QNetworkRequest(url); + for (auto it = header.begin(); it != header.end(); ++it) { + request.setRawHeader(QByteArray(it.key().toStdString().c_str(), it.key().size()), + it.value()); + } + sendGetRequest(request, std::move(onDoneCallback)); +} + +void +NetworkManager::sendGetRequest(const QNetworkRequest& request, + std::function<void(const QByteArray&)>&& onDoneCallback) +{ + auto* const reply = manager_->get(request); QObject::connect(reply, &QNetworkReply::finished, this, [reply, onDoneCallback, this]() { if (reply->error() == QNetworkReply::NoError) { onDoneCallback(reply->readAll()); diff --git a/src/app/networkmanager.h b/src/app/networkmanager.h index daa2196be02496c89dd6a351e4aa54e6e9f500d3..569f5e794b3da0f4fd46325c0e3583c51d98011d 100644 --- a/src/app/networkmanager.h +++ b/src/app/networkmanager.h @@ -39,7 +39,11 @@ public: Q_ENUM(GetError) void sendGetRequest(const QUrl& url, std::function<void(const QByteArray&)>&& onDoneCallback); - + void sendGetRequest(const QUrl& url, + const QMap<QString, QByteArray>& header, + std::function<void(const QByteArray&)>&& onDoneCallback); + void sendGetRequest(const QNetworkRequest& request, + std::function<void(const QByteArray&)>&& onDoneCallback); int downloadFile(const QUrl& url, int replyId, std::function<void(bool, const QString&)>&& onDoneCallback, diff --git a/src/app/pluginadapter.cpp b/src/app/pluginadapter.cpp index c01d69e8b408bdf806b97e66fb3839618c9482fd..79a9ff9446fb9a919ef495a297e536c3e8efed17 100644 --- a/src/app/pluginadapter.cpp +++ b/src/app/pluginadapter.cpp @@ -23,21 +23,27 @@ #include "pluginstorelistmodel.h" #include "networkmanager.h" #include "lrcinstance.h" +#include "appsettingsmanager.h" #include "utilsadapter.h" #include "qmlregister.h" #include <QJsonArray> #include <QJsonDocument> +#include <QtNetwork> #include <QJsonObject> #include <QDir> #include <QString> -PluginAdapter::PluginAdapter(LRCInstance* instance, QObject* parent, QString baseUrl) +PluginAdapter::PluginAdapter(LRCInstance* instance, + AppSettingsManager* settingsManager, + QObject* parent, + QString baseUrl) : QmlAdapterBase(instance, parent) , pluginStoreListModel_(new PluginStoreListModel(instance, this)) , pluginVersionManager_(new PluginVersionManager(instance, baseUrl, this)) , pluginListModel_(new PluginListModel(instance, this)) , lrcInstance_(instance) + , settingsManager_(settingsManager) , tempPath_(QDir::tempPath()) , baseUrl_(baseUrl) @@ -89,9 +95,13 @@ PluginAdapter::getPluginsFromStore() [this](NetworkManager::GetError error, const QString& msg) { Q_EMIT storeNotAvailable(); }); + QMap<QString, QByteArray> header; + const auto& language = settingsManager_->getLanguage(); + header["Accept-Language"] = QByteArray(language.toStdString().c_str(), language.size()); pluginVersionManager_ ->sendGetRequest(QUrl(baseUrl_ + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"]), + header, [this, errorHandler](const QByteArray& data) { auto result = QJsonDocument::fromJson(data).array(); auto pluginsInstalled = lrcInstance_->pluginModel().getPluginsId(); @@ -113,9 +123,13 @@ PluginAdapter::getPluginsFromStore() void PluginAdapter::getPluginDetails(const QString& pluginId) { + QMap<QString, QByteArray> header; + const auto& language = settingsManager_->getLanguage(); + header["Accept-Language"] = QByteArray(language.toStdString().c_str(), language.size()); pluginVersionManager_ ->sendGetRequest(QUrl(baseUrl_ + "/details/" + pluginId + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"]), + header, [this](const QByteArray& data) { auto result = QJsonDocument::fromJson(data).object(); // my response is a json object and I want to convert diff --git a/src/app/pluginadapter.h b/src/app/pluginadapter.h index c7039d2eea032cb4ee2d0a3d5f496cd762d2ace7..5b7c3ae92bdbcd36a14737ef377c8c75d8fdb53b 100644 --- a/src/app/pluginadapter.h +++ b/src/app/pluginadapter.h @@ -32,6 +32,7 @@ class PluginVersionManager; class PluginStoreListModel; +class AppSettingsManager; class PluginAdapter final : public QmlAdapterBase { @@ -41,6 +42,7 @@ class PluginAdapter final : public QmlAdapterBase public: explicit PluginAdapter(LRCInstance* instance, + AppSettingsManager* settingsManager, QObject* parent = nullptr, QString baseUrl = "https://plugins.jami.net"); ~PluginAdapter() = default; @@ -79,4 +81,5 @@ private: std::mutex mtx_; QString tempPath_; QString baseUrl_; + AppSettingsManager* settingsManager_; }; diff --git a/src/app/qmlregister.cpp b/src/app/qmlregister.cpp index 7ebab391d79b46efbd0a7bb9d9921b3bcd4e8383..55d2cca90369d37a219c5b3f7893b8247a9c8409 100644 --- a/src/app/qmlregister.cpp +++ b/src/app/qmlregister.cpp @@ -123,7 +123,7 @@ registerTypes(QQmlEngine* engine, auto contactAdapter = new ContactAdapter(lrcInstance, parent); auto accountAdapter = new AccountAdapter(settingsManager, systemTray, lrcInstance, parent); auto utilsAdapter = new UtilsAdapter(settingsManager, systemTray, lrcInstance, parent); - auto pluginAdapter = new PluginAdapter(lrcInstance, parent); + auto pluginAdapter = new PluginAdapter(lrcInstance, settingsManager, parent); auto currentCall = new CurrentCall(lrcInstance, parent); auto currentConversation = new CurrentConversation(lrcInstance, parent); auto currentAccount = new CurrentAccount(lrcInstance, settingsManager, parent);