From: Javier Llorente Date: Sun, 7 Feb 2016 23:36:17 +0000 (+0100) Subject: Add system proxy support for quassel-client X-Git-Tag: travis-deploy-test~178 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=9ddb5712b16b3219338871d346765bc649007de0 Add system proxy support for quassel-client --- diff --git a/src/client/clientauthhandler.cpp b/src/client/clientauthhandler.cpp index ce7c58d9..2c96a1c9 100644 --- a/src/client/clientauthhandler.cpp +++ b/src/client/clientauthhandler.cpp @@ -75,10 +75,21 @@ void ClientAuthHandler::connectToCore() QTcpSocket *socket = new QTcpSocket(this); #endif -// TODO: Handle system proxy #ifndef QT_NO_NETWORKPROXY - if (_account.useProxy()) { - QNetworkProxy proxy(_account.proxyType(), _account.proxyHostName(), _account.proxyPort(), _account.proxyUser(), _account.proxyPassword()); + QNetworkProxy proxy; + proxy.setType(_account.proxyType()); + if (_account.proxyType() == QNetworkProxy::Socks5Proxy || + _account.proxyType() == QNetworkProxy::HttpProxy) { + proxy.setHostName(_account.proxyHostName()); + proxy.setPort(_account.proxyPort()); + proxy.setUser(_account.proxyUser()); + proxy.setPassword(_account.proxyPassword()); + } + + if (_account.proxyType() == QNetworkProxy::DefaultProxy) { + QNetworkProxyFactory::setUseSystemConfiguration(true); + } else { + QNetworkProxyFactory::setUseSystemConfiguration(false); socket->setProxy(proxy); } #endif diff --git a/src/client/coreaccount.cpp b/src/client/coreaccount.cpp index f46006b6..e023ed7c 100644 --- a/src/client/coreaccount.cpp +++ b/src/client/coreaccount.cpp @@ -27,8 +27,7 @@ CoreAccount::CoreAccount(AccountId accountId) _port = 4242; _storePassword = false; _useSsl = true; - _useProxy = false; - _proxyType = QNetworkProxy::Socks5Proxy; + _proxyType = QNetworkProxy::DefaultProxy; _proxyPort = 8080; } @@ -93,12 +92,6 @@ void CoreAccount::setUseSsl(bool useSsl) } -void CoreAccount::setUseProxy(bool useProxy) -{ - _useProxy = useProxy; -} - - void CoreAccount::setProxyType(QNetworkProxy::ProxyType type) { _proxyType = type; @@ -145,7 +138,6 @@ QVariantMap CoreAccount::toVariantMap(bool forcePassword) const v["HostName"] = hostName(); v["Port"] = port(); v["UseSSL"] = useSsl(); - v["UseProxy"] = useProxy(); v["ProxyType"] = proxyType(); v["ProxyUser"] = proxyUser(); v["ProxyPassword"] = proxyPassword(); @@ -167,7 +159,6 @@ void CoreAccount::fromVariantMap(const QVariantMap &v) setHostName(v.value("HostName").toString()); setPort(v.value("Port").toUInt()); setUseSsl(v.value("UseSSL").toBool()); - setUseProxy(v.value("UseProxy").toBool()); setProxyType((QNetworkProxy::ProxyType)v.value("ProxyType").toInt()); setProxyUser(v.value("ProxyUser").toString()); setProxyPassword(v.value("ProxyPassword").toString()); diff --git a/src/client/coreaccount.h b/src/client/coreaccount.h index 42c862e3..8913b2e4 100644 --- a/src/client/coreaccount.h +++ b/src/client/coreaccount.h @@ -47,7 +47,6 @@ public: inline uint port() const { return _port; } inline bool useSsl() const { return _useSsl; } - inline bool useProxy() const { return _useProxy; } inline QNetworkProxy::ProxyType proxyType() const { return _proxyType; } inline QString proxyUser() const { return _proxyUser; } inline QString proxyHostName() const { return _proxyHostName; } @@ -64,7 +63,6 @@ public: void setPort(uint port); void setUseSsl(bool); - void setUseProxy(bool); void setProxyType(QNetworkProxy::ProxyType); void setProxyUser(const QString &); void setProxyHostName(const QString &); diff --git a/src/qtui/settingspages/coreaccounteditdlg.ui b/src/qtui/settingspages/coreaccounteditdlg.ui index 647366f3..3760d05d 100644 --- a/src/qtui/settingspages/coreaccounteditdlg.ui +++ b/src/qtui/settingspages/coreaccounteditdlg.ui @@ -6,8 +6,8 @@ 0 0 - 378 - 455 + 398 + 602 @@ -122,26 +122,23 @@ - + - Use a Proxy - - - true - - - false + Proxy Settings - - + + - Proxy Type: + Port: - + + + false + SOCKS 5 @@ -154,7 +151,7 @@ - + Qt::Horizontal @@ -167,29 +164,35 @@ - + Hostname: - + + + false + localhost - - - - Port: + + + + false - + + + false + 0 @@ -207,7 +210,7 @@ - + Qt::Horizontal @@ -220,31 +223,31 @@ - + User: - - - - + Password: - + + + false + QLineEdit::Password - + Qt::Horizontal @@ -257,7 +260,7 @@ - + Qt::Horizontal @@ -270,6 +273,50 @@ + + + + Proxy Type: + + + + + + + + + No pro&xy + + + buttonGroupProxyType + + + + + + + S&ystem proxy + + + true + + + buttonGroupProxyType + + + + + + + &Manual proxy configuration + + + buttonGroupProxyType + + + + + @@ -305,7 +352,6 @@ user password rememberPassword - useProxy proxyType proxyHostName proxyPort @@ -348,4 +394,7 @@ + + + diff --git a/src/qtui/settingspages/coreaccountsettingspage.cpp b/src/qtui/settingspages/coreaccountsettingspage.cpp index 46852ea3..b8b09fef 100644 --- a/src/qtui/settingspages/coreaccountsettingspage.cpp +++ b/src/qtui/settingspages/coreaccountsettingspage.cpp @@ -250,12 +250,40 @@ CoreAccountEditDlg::CoreAccountEditDlg(const CoreAccount &acct, QWidget *parent) ui.user->setText(acct.user()); ui.password->setText(acct.password()); ui.rememberPassword->setChecked(acct.storePassword()); - ui.useProxy->setChecked(acct.useProxy()); - ui.proxyHostName->setText(acct.proxyHostName()); - ui.proxyPort->setValue(acct.proxyPort()); - ui.proxyType->setCurrentIndex(acct.proxyType() == QNetworkProxy::Socks5Proxy ? 0 : 1); - ui.proxyUser->setText(acct.proxyUser()); - ui.proxyPassword->setText(acct.proxyPassword()); + + ui.buttonGroupProxyType->setId(ui.radioButtonNoProxy, 0); + ui.buttonGroupProxyType->setId(ui.radioButtonSystemProxy, 1); + ui.buttonGroupProxyType->setId(ui.radioButtonManualProxy, 2); + + bool manualProxy = false; + switch (acct.proxyType()) { + case QNetworkProxy::NoProxy: + ui.buttonGroupProxyType->button(0)->setChecked(true); + break; + case QNetworkProxy::DefaultProxy: + ui.buttonGroupProxyType->button(1)->setChecked(true); + break; + case QNetworkProxy::Socks5Proxy: + ui.buttonGroupProxyType->button(2)->setChecked(true); + ui.proxyType->setCurrentIndex(0); + manualProxy = true; + break; + case QNetworkProxy::HttpProxy: + ui.buttonGroupProxyType->button(2)->setChecked(true); + ui.proxyType->setCurrentIndex(1); + manualProxy = true; + break; + default: + break; + } + + if (manualProxy) { + ui.proxyHostName->setText(acct.proxyHostName()); + ui.proxyPort->setValue(acct.proxyPort()); + ui.proxyType->setEnabled(true); + ui.proxyUser->setText(acct.proxyUser()); + ui.proxyPassword->setText(acct.proxyPassword()); + } if (acct.accountId().isValid()) setWindowTitle(tr("Edit Core Account")); @@ -266,18 +294,37 @@ CoreAccountEditDlg::CoreAccountEditDlg(const CoreAccount &acct, QWidget *parent) CoreAccount CoreAccountEditDlg::account() { - _account.setAccountName(ui.accountName->text().trimmed()); - _account.setHostName(ui.hostName->text().trimmed()); - _account.setPort(ui.port->value()); - _account.setUser(ui.user->text().trimmed()); - _account.setPassword(ui.password->text()); - _account.setStorePassword(ui.rememberPassword->isChecked()); - _account.setUseProxy(ui.useProxy->isChecked()); - _account.setProxyHostName(ui.proxyHostName->text().trimmed()); - _account.setProxyPort(ui.proxyPort->value()); - _account.setProxyType(ui.proxyType->currentIndex() == 0 ? QNetworkProxy::Socks5Proxy : QNetworkProxy::HttpProxy); - _account.setProxyUser(ui.proxyUser->text().trimmed()); - _account.setProxyPassword(ui.proxyPassword->text()); + QNetworkProxy::ProxyType proxyType = QNetworkProxy::NoProxy; + int checkedId = ui.buttonGroupProxyType->checkedId(); + + switch (checkedId) { + case NoProxy: // QNetworkProxy::NoProxy + QNetworkProxyFactory::setUseSystemConfiguration(false); + _account.setProxyType(proxyType); + break; + case SystemProxy: // QNetworkProxy::DefaultProxy: + QNetworkProxyFactory::setUseSystemConfiguration(true); + _account.setProxyType(QNetworkProxy::DefaultProxy); + break; + case ManualProxy: // QNetworkProxy::Socks5Proxy || QNetworkProxy::HttpProxy + proxyType = ui.proxyType->currentIndex() == 0 ? + QNetworkProxy::Socks5Proxy : QNetworkProxy::HttpProxy; + QNetworkProxyFactory::setUseSystemConfiguration(false); + _account.setAccountName(ui.accountName->text().trimmed()); + _account.setHostName(ui.hostName->text().trimmed()); + _account.setPort(ui.port->value()); + _account.setUser(ui.user->text().trimmed()); + _account.setPassword(ui.password->text()); + _account.setStorePassword(ui.rememberPassword->isChecked()); + _account.setProxyHostName(ui.proxyHostName->text().trimmed()); + _account.setProxyPort(ui.proxyPort->value()); + _account.setProxyType(proxyType); + _account.setProxyUser(ui.proxyUser->text().trimmed()); + _account.setProxyPassword(ui.proxyPassword->text()); + break; + default: + break; + } return _account; } @@ -311,6 +358,15 @@ void CoreAccountEditDlg::on_user_textChanged(const QString &text) setWidgetStates(); } +void CoreAccountEditDlg::on_radioButtonManualProxy_toggled(bool checked) +{ + ui.proxyType->setEnabled(checked); + ui.proxyHostName->setEnabled(checked); + ui.proxyPort->setEnabled(checked); + ui.proxyUser->setEnabled(checked); + ui.proxyPassword->setEnabled(checked); +} + /***************************************************************************************** * FilteredCoreAccountModel diff --git a/src/qtui/settingspages/coreaccountsettingspage.h b/src/qtui/settingspages/coreaccountsettingspage.h index e582f480..ee0572e3 100644 --- a/src/qtui/settingspages/coreaccountsettingspage.h +++ b/src/qtui/settingspages/coreaccountsettingspage.h @@ -22,6 +22,7 @@ #define COREACCOUNTSETTINGSPAGE_H_ #include +#include #include "settingspage.h" @@ -102,12 +103,14 @@ private slots: void on_hostName_textChanged(const QString &); void on_accountName_textChanged(const QString &); void on_user_textChanged(const QString &); + void on_radioButtonManualProxy_toggled(bool checked); void setWidgetStates(); private: Ui::CoreAccountEditDlg ui; CoreAccount _account; + enum ProxyType { NoProxy, SystemProxy, ManualProxy }; };