From d779e745572320a974e7d5981a1099b42271f6dc Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Thu, 18 Jul 2013 17:44:23 +0200 Subject: [PATCH] Proxy settings loading for global access network manager for web browsers. --- CMakeLists.txt | 2 ++ src/core/basenetworkaccessmanager.cpp | 28 ++++++++++++++++++++- src/core/basenetworkaccessmanager.h | 3 ++- src/core/webbrowsernetworkaccessmanager.cpp | 9 +++++++ src/core/webbrowsernetworkaccessmanager.h | 15 +++++++++++ src/gui/basewebpage.cpp | 2 +- src/gui/formsettings.cpp | 4 +++ src/gui/webbrowser.cpp | 9 ++++--- src/gui/webbrowser.h | 6 ++--- 9 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 src/core/webbrowsernetworkaccessmanager.cpp create mode 100644 src/core/webbrowsernetworkaccessmanager.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 6448b7456..181a01e6f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,6 +181,7 @@ set(APP_SOURCES src/core/localization.cpp src/core/dynamicshortcuts.cpp src/core/basenetworkaccessmanager.cpp + src/core/webBrowsernetworkaccessmanager.cpp # Basic application sources. src/main.cpp @@ -212,6 +213,7 @@ set(APP_HEADERS # CORE headers. src/core/basenetworkaccessmanager.h + src/core/webBrowsernetworkaccessmanager.h ) # Add form files. diff --git a/src/core/basenetworkaccessmanager.cpp b/src/core/basenetworkaccessmanager.cpp index 8f63426b5..929763f45 100644 --- a/src/core/basenetworkaccessmanager.cpp +++ b/src/core/basenetworkaccessmanager.cpp @@ -10,10 +10,36 @@ BaseNetworkAccessManager::BaseNetworkAccessManager(QObject *parent) loadSettings(); } +BaseNetworkAccessManager::~BaseNetworkAccessManager() { + qDebug("Destroying BaseNetworkAccessManager instance."); +} + void BaseNetworkAccessManager::loadSettings() { QNetworkProxy new_proxy; - // TODO: Continue here. + + // Load proxy values from settings. + QNetworkProxy::ProxyType selected_proxy_type = static_cast(Settings::getInstance()->value(APP_CFG_PROXY, + "proxy_type", + QNetworkProxy::NoProxy).toInt()); + if (selected_proxy_type == QNetworkProxy::NoProxy) { + // No extra setting is needed, set new proxy and exit this method. + setProxy(QNetworkProxy::NoProxy); + return; + } + + // Custom proxy is selected, set it up. + new_proxy.setType(selected_proxy_type); + new_proxy.setHostName(Settings::getInstance()->value(APP_CFG_PROXY, + "host").toString()); + new_proxy.setPort(Settings::getInstance()->value(APP_CFG_PROXY, + "port", 80).toInt()); + new_proxy.setUser(Settings::getInstance()->value(APP_CFG_PROXY, + "username").toString()); + new_proxy.setPassword(Settings::getInstance()->value(APP_CFG_PROXY, + "password").toString()); setProxy(new_proxy); + + qDebug("Settings of BaseNetworkAccessManager changed."); } QNetworkReply *BaseNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, diff --git a/src/core/basenetworkaccessmanager.h b/src/core/basenetworkaccessmanager.h index e6996a049..2c13f7422 100644 --- a/src/core/basenetworkaccessmanager.h +++ b/src/core/basenetworkaccessmanager.h @@ -8,9 +8,10 @@ class BaseNetworkAccessManager : public QNetworkAccessManager { Q_OBJECT public: explicit BaseNetworkAccessManager(QObject *parent = 0); + virtual ~BaseNetworkAccessManager(); public slots: - void loadSettings(); + virtual void loadSettings(); protected: QNetworkReply *createRequest(Operation op, diff --git a/src/core/webbrowsernetworkaccessmanager.cpp b/src/core/webbrowsernetworkaccessmanager.cpp new file mode 100644 index 000000000..8db8648f4 --- /dev/null +++ b/src/core/webbrowsernetworkaccessmanager.cpp @@ -0,0 +1,9 @@ +#include "core/webbrowsernetworkaccessmanager.h" + + +WebBrowserNetworkAccessManager::WebBrowserNetworkAccessManager(QObject *parent) + : BaseNetworkAccessManager(parent) { +} + +WebBrowserNetworkAccessManager::~WebBrowserNetworkAccessManager() { +} diff --git a/src/core/webbrowsernetworkaccessmanager.h b/src/core/webbrowsernetworkaccessmanager.h new file mode 100644 index 000000000..f1ac0b98c --- /dev/null +++ b/src/core/webbrowsernetworkaccessmanager.h @@ -0,0 +1,15 @@ +#ifndef WEBBROWSERNETWORKACCESSMANAGER_H +#define WEBBROWSERNETWORKACCESSMANAGER_H + +#include "core/basenetworkaccessmanager.h" + + +class WebBrowserNetworkAccessManager : public BaseNetworkAccessManager { + Q_OBJECT + public: + explicit WebBrowserNetworkAccessManager(QObject *parent = 0); + virtual ~WebBrowserNetworkAccessManager(); + +}; + +#endif // WEBBROWSERNETWORKACCESSMANAGER_H diff --git a/src/gui/basewebpage.cpp b/src/gui/basewebpage.cpp index 5d763b450..a5f87f552 100644 --- a/src/gui/basewebpage.cpp +++ b/src/gui/basewebpage.cpp @@ -1,4 +1,4 @@ -#include "core/basenetworkaccessmanager.h" +#include "core/webbrowsernetworkaccessmanager.h" #include "gui/basewebpage.h" #include "gui/webbrowser.h" diff --git a/src/gui/formsettings.cpp b/src/gui/formsettings.cpp index 0a8fd628f..836ebf5d4 100644 --- a/src/gui/formsettings.cpp +++ b/src/gui/formsettings.cpp @@ -11,6 +11,7 @@ #include "core/localization.h" #include "core/systemfactory.h" #include "core/dynamicshortcuts.h" +#include "core/webbrowsernetworkaccessmanager.h" FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_ui(new Ui::FormSettings) { @@ -116,6 +117,9 @@ void FormSettings::saveProxy() { m_ui->m_txtProxyPassword->text()); Settings::getInstance()->setValue(APP_CFG_PROXY, "port", m_ui->m_spinProxyPort->value()); + + // Reload settings for all network access managers. + WebBrowser::globalNetworkManager()->loadSettings(); } void FormSettings::loadLanguage() { diff --git a/src/gui/webbrowser.cpp b/src/gui/webbrowser.cpp index 41f973950..1b1a7fc1e 100644 --- a/src/gui/webbrowser.cpp +++ b/src/gui/webbrowser.cpp @@ -2,10 +2,12 @@ #include #include #include +#include #include #include "core/basenetworkaccessmanager.h" +#include "core/webbrowsernetworkaccessmanager.h" #include "gui/basewebview.h" #include "gui/basewebpage.h" #include "gui/webbrowser.h" @@ -13,7 +15,7 @@ #include "gui/themefactory.h" -QPointer WebBrowser::m_networkManager; +QPointer WebBrowser::m_networkManager; QList WebBrowser::m_runningWebBrowsers; WebBrowser::WebBrowser(QWidget *parent) @@ -112,9 +114,10 @@ QList WebBrowser::runningWebBrowsers() { return m_runningWebBrowsers; } -BaseNetworkAccessManager *WebBrowser::globalNetworkManager() { +WebBrowserNetworkAccessManager *WebBrowser::globalNetworkManager() { if (m_networkManager.isNull()) { - m_networkManager = new BaseNetworkAccessManager(); + // TODO: Not sure if qApp is needed here. + m_networkManager = new WebBrowserNetworkAccessManager(qApp); } return m_networkManager; diff --git a/src/gui/webbrowser.h b/src/gui/webbrowser.h index 7eb92a756..53324df91 100644 --- a/src/gui/webbrowser.h +++ b/src/gui/webbrowser.h @@ -8,7 +8,7 @@ class QToolBar; class QVBoxLayout; class LocationLineEdit; class BaseWebView; -class BaseNetworkAccessManager; +class WebBrowserNetworkAccessManager; class WebBrowser : public QWidget { Q_OBJECT @@ -19,7 +19,7 @@ class WebBrowser : public QWidget { void setupIcons(); - static BaseNetworkAccessManager *globalNetworkManager(); + static WebBrowserNetworkAccessManager *globalNetworkManager(); static QList runningWebBrowsers(); protected: @@ -40,7 +40,7 @@ class WebBrowser : public QWidget { QAction *m_actionReload; QAction *m_actionStop; - static QPointer m_networkManager; + static QPointer m_networkManager; static QList m_runningWebBrowsers; };