From 981edc9cf748fc066a3dd15dd1a3a6f9d7963fd3 Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Sun, 7 Jan 2024 21:44:44 +0100 Subject: [PATCH] Refactor proxy configuration and move to separate file --- src/CMakeLists.txt | 2 ++ src/controller.cpp | 33 ++------------------------------- src/controller.h | 7 ------- src/proxycontroller.cpp | 35 +++++++++++++++++++++++++++++++++++ src/proxycontroller.h | 36 ++++++++++++++++++++++++++++++++++++ src/qml/NetworkProxyPage.qml | 2 +- 6 files changed, 76 insertions(+), 39 deletions(-) create mode 100644 src/proxycontroller.cpp create mode 100644 src/proxycontroller.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c16cf1ffa..47ea681c4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -146,6 +146,8 @@ add_library(neochat STATIC enums/pushrule.h models/itinerarymodel.cpp models/itinerarymodel.h + proxycontroller.cpp + proxycontroller.h ) qt_add_qml_module(neochat URI org.kde.neochat NO_PLUGIN diff --git a/src/controller.cpp b/src/controller.cpp index ada7804cc..17f83f724 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -28,6 +28,7 @@ #include "neochatconfig.h" #include "neochatroom.h" #include "notificationsmanager.h" +#include "proxycontroller.h" #include "roommanager.h" #if defined(Q_OS_WIN) || defined(Q_OS_MAC) @@ -45,7 +46,7 @@ Controller::Controller(QObject *parent) { Connection::setRoomType(); - setApplicationProxy(); + ProxyController::instance().setApplicationProxy(); #ifndef Q_OS_ANDROID setQuitOnLastWindowClosed(); @@ -315,36 +316,6 @@ void Controller::listenForNotifications() #endif } -void Controller::setApplicationProxy() -{ - NeoChatConfig *cfg = NeoChatConfig::self(); - QNetworkProxy proxy; - - // type match to ProxyType from neochatconfig.kcfg - switch (cfg->proxyType()) { - case 1: // HTTP - proxy.setType(QNetworkProxy::HttpProxy); - proxy.setHostName(cfg->proxyHost()); - proxy.setPort(cfg->proxyPort()); - proxy.setUser(cfg->proxyUser()); - proxy.setPassword(cfg->proxyPassword()); - break; - case 2: // SOCKS 5 - proxy.setType(QNetworkProxy::Socks5Proxy); - proxy.setHostName(cfg->proxyHost()); - proxy.setPort(cfg->proxyPort()); - proxy.setUser(cfg->proxyUser()); - proxy.setPassword(cfg->proxyPassword()); - break; - case 0: // System Default - default: - // do nothing - break; - } - - QNetworkProxy::setApplicationProxy(proxy); -} - bool Controller::isFlatpak() const { #ifdef NEOCHAT_FLATPAK diff --git a/src/controller.h b/src/controller.h index 80c8cc8e7..528019753 100644 --- a/src/controller.h +++ b/src/controller.h @@ -84,13 +84,6 @@ public: [[nodiscard]] bool supportSystemTray() const; - /** - * @brief Sets the QNetworkProxy for the application. - * - * @sa QNetworkProxy::setApplicationProxy - */ - Q_INVOKABLE void setApplicationProxy(); - bool isFlatpak() const; /** diff --git a/src/proxycontroller.cpp b/src/proxycontroller.cpp new file mode 100644 index 000000000..11c36ef87 --- /dev/null +++ b/src/proxycontroller.cpp @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2024 Tobias Fella +// SPDX-License-Identifier: LGPL-2.0-or-later + +#include "proxycontroller.h" + +#include + +#include "neochatconfig.h" + +void ProxyController::setApplicationProxy() +{ + auto cfg = NeoChatConfig::self(); + QNetworkProxy proxy; + + switch (cfg->proxyType()) { + case 1: + proxy.setType(QNetworkProxy::HttpProxy); + break; + case 2: + proxy.setType(QNetworkProxy::Socks5Proxy); + break; + default: + break; + } + proxy.setHostName(cfg->proxyHost()); + proxy.setPort(cfg->proxyPort()); + proxy.setUser(cfg->proxyUser()); + proxy.setPassword(cfg->proxyPassword()); + QNetworkProxy::setApplicationProxy(proxy); +} + +ProxyController::ProxyController(QObject *parent) + : QObject(parent) +{ +} diff --git a/src/proxycontroller.h b/src/proxycontroller.h new file mode 100644 index 000000000..ff42c2e26 --- /dev/null +++ b/src/proxycontroller.h @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2024 Tobias Fella +// SPDX-License-Identifier: LGPL-2.0-or-later + +#pragma once + +#include +#include + +class ProxyController : public QObject +{ + Q_OBJECT + QML_ELEMENT + QML_SINGLETON + +public: + static ProxyController &instance() + { + static ProxyController _instance; + return _instance; + } + static ProxyController *create(QQmlEngine *engine, QJSEngine *) + { + engine->setObjectOwnership(&instance(), QQmlEngine::CppOwnership); + return &instance(); + } + + /** + * @brief Sets the QNetworkProxy for the application. + * + * @sa QNetworkProxy::setApplicationProxy + */ + Q_INVOKABLE void setApplicationProxy(); + +private: + explicit ProxyController(QObject *parent = nullptr); +}; diff --git a/src/qml/NetworkProxyPage.qml b/src/qml/NetworkProxyPage.qml index 1c10af758..e2dd48459 100644 --- a/src/qml/NetworkProxyPage.qml +++ b/src/qml/NetworkProxyPage.qml @@ -113,7 +113,7 @@ FormCard.FormCardPage { Config.proxyPassword = passwordField.text Config.save() proxyConfigChanged = false - Controller.setApplicationProxy() + ProxyController.setApplicationProxy() } } }