From: Marcus Eggenberger Date: Sat, 29 Mar 2008 13:00:14 +0000 (+0000) Subject: Added Socks5 and HTTP-Proxy support to the client. X-Git-Tag: 0.2.0-alpha5~52 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=26c15c14a067c8709d2e04ef9d8965550dcee52d Added Socks5 and HTTP-Proxy support to the client. HTTP-Proxy support is untestet though -> any feedback is welcomed. I'm unhappy with the design of the dialog though... maybe someone comes up with something prettier --- diff --git a/src/client/clientsyncer.cpp b/src/client/clientsyncer.cpp index dfadf321..9534b6fd 100644 --- a/src/client/clientsyncer.cpp +++ b/src/client/clientsyncer.cpp @@ -20,6 +20,8 @@ #include "clientsyncer.h" +#include + #include "client.h" #include "global.h" #include "identity.h" @@ -119,6 +121,10 @@ void ClientSyncer::connectToCore(const QVariantMap &conn) { //emit coreConnectionMsg(tr("Connecting...")); Q_ASSERT(!socket); QTcpSocket *sock = new QTcpSocket(Client::instance()); + if(conn.contains("useProxy") && conn["useProxy"].toBool()) { + QNetworkProxy proxy((QNetworkProxy::ProxyType)conn["proxyType"].toInt(), conn["proxyHost"].toString(), conn["proxyPort"].toUInt(), conn["proxyUser"].toString(), conn["proxyPassword"].toString()); + sock->setProxy(proxy); + } socket = sock; connect(sock, SIGNAL(readyRead()), this, SLOT(coreHasData())); connect(sock, SIGNAL(connected()), this, SLOT(coreSocketConnected())); diff --git a/src/qtui/coreconnectdlg.cpp b/src/qtui/coreconnectdlg.cpp index 3510926d..fd4e5900 100644 --- a/src/qtui/coreconnectdlg.cpp +++ b/src/qtui/coreconnectdlg.cpp @@ -20,6 +20,7 @@ #include #include +#include #include "coreconnectdlg.h" @@ -454,11 +455,26 @@ CoreAccountEditDlg::CoreAccountEditDlg(AccountId id, const QVariantMap &acct, co existing = _existing; account = acct; if(id.isValid()) { + // add new settings + if(!acct.contains("useProxy")) { + account["useProxy"] = false; + account["proxyHost"] = "localhost"; + account["proxyPort"] = 8080; + account["proxyType"] = QNetworkProxy::Socks5Proxy; + account["proxyUser"] = ""; + account["proxyPassword"] = ""; + } existing.removeAll(acct["AccountName"].toString()); ui.host->setText(acct["Host"].toString()); ui.port->setValue(acct["Port"].toUInt()); ui.useInternal->setChecked(acct["UseInternal"].toBool()); ui.accountName->setText(acct["AccountName"].toString()); + ui.useProxy->setChecked(account["useProxy"].toBool()); + ui.proxyHost->setText(account["proxyHost"].toString()); + ui.proxyPort->setValue(account["proxyPort"].toUInt()); + ui.proxyType->setCurrentIndex(account["proxyType"].toInt() == QNetworkProxy::Socks5Proxy ? 0 : 1); + ui.proxyHost->setText(account["proxyUser"].toString()); + ui.proxyHost->setText(account["proxyPassword"].toString()); } else { setWindowTitle(tr("Add Core Account")); } @@ -469,6 +485,12 @@ QVariantMap CoreAccountEditDlg::accountData() { account["Host"] = ui.host->text().trimmed(); account["Port"] = ui.port->value(); account["UseInternal"] = ui.useInternal->isChecked(); + account["useProxy"] = ui.useProxy->isChecked(); + account["proxyHost"] = ui.proxyHost->text().trimmed(); + account["proxyPort"] = ui.proxyPort->value(); + account["proxyType"] = ui.proxyType->currentIndex() == 0 ? QNetworkProxy::Socks5Proxy : QNetworkProxy::HttpProxy; + account["proxyUser"] = ui.proxyUser->text().trimmed(); + account["proxyPassword"] = ui.proxyPassword->text().trimmed(); return account; } diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 846ccc13..870c4354 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -195,7 +195,7 @@ void MainWin::setupSettingsDlg() { //Category: General settingsDlg->registerSettingsPage(new IdentitiesSettingsPage(settingsDlg)); settingsDlg->registerSettingsPage(new NetworksSettingsPage(settingsDlg)); - // settingsDlg->registerSettingsPage(new BufferViewSettingsPage(settingsDlg)); + settingsDlg->registerSettingsPage(new BufferViewSettingsPage(settingsDlg)); } void MainWin::setupNickWidget() { diff --git a/src/qtui/settingspages/bufferviewsettingspage.cpp b/src/qtui/settingspages/bufferviewsettingspage.cpp index 861bdb66..3fe64dff 100644 --- a/src/qtui/settingspages/bufferviewsettingspage.cpp +++ b/src/qtui/settingspages/bufferviewsettingspage.cpp @@ -33,11 +33,33 @@ BufferViewSettingsPage::BufferViewSettingsPage(QWidget *parent) connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); } +BufferViewSettingsPage::~BufferViewSettingsPage() { + reset(); +} + void BufferViewSettingsPage::reset() { - // currentId = 0; ui.bufferViewList->clear(); _viewToListPos.clear(); _listPosToView.clear(); + + QHash::iterator changedConfigIter = _changedBufferViews.begin(); + QHash::iterator changedConfigIterEnd = _changedBufferViews.end(); + BufferViewConfig *config; + while(changedConfigIter != changedConfigIterEnd) { + config = (*changedConfigIter); + changedConfigIter = _changedBufferViews.erase(changedConfigIter); + config->deleteLater(); + } + + QList::iterator newConfigIter = _newBufferViews.begin(); + QList::iterator newConfigIterEnd = _newBufferViews.end(); + while(newConfigIter != newConfigIterEnd) { + config = *newConfigIter; + newConfigIter = _newBufferViews.erase(newConfigIter); + config->deleteLater(); + } + + setChangedState(false); } void BufferViewSettingsPage::load() { @@ -80,7 +102,10 @@ void BufferViewSettingsPage::addBufferView(int bufferViewId) { void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) { // id's of newly created bufferviews are negative (-1, -2... -n) int fakeId = -1 * (_newBufferViews.count() + 1); - addBufferView(new BufferViewConfig(fakeId)); + BufferViewConfig *config = new BufferViewConfig(fakeId); + config->setBufferViewName(bufferViewName); + _newBufferViews << config; + addBufferView(config); } int BufferViewSettingsPage::listPos(BufferViewConfig *config) { @@ -122,6 +147,7 @@ void BufferViewSettingsPage::on_addBufferView_clicked() { BufferViewEditDlg dlg(QString(), existing, this); if(dlg.exec() == QDialog::Accepted) { newBufferView(dlg.bufferViewName()); + changed(); } } @@ -142,18 +168,27 @@ void BufferViewSettingsPage::on_renameBufferView_clicked() { } BufferViewEditDlg dlg(config->bufferViewName(), existing, this); - if(dlg.exec() != QDialog::Accepted) - return; - - BufferViewConfig *changedConfig; - if(!_changedBufferViews.contains(config)) { - _changedBufferViews[config] = new BufferViewConfig(-1); - _changedBufferViews[config]->fromVariantMap(config->toVariantMap()); + if(dlg.exec() == QDialog::Accepted) { + BufferViewConfig *changedConfig = cloneConfig(config); + changedConfig->setBufferViewName(dlg.bufferViewName()); + changed(); } - - changedConfig = _changedBufferViews[config]; - changedConfig->setBufferViewName(dlg.bufferViewName()); - changed(); +} + +BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config) { + if(_changedBufferViews.contains(config)) + return _changedBufferViews[config]; + + BufferViewConfig *changedConfig = new BufferViewConfig(-1, this); + changedConfig->fromVariantMap(config->toVariantMap()); + return changedConfig; +} + +BufferViewConfig *BufferViewSettingsPage::configForDisplay(BufferViewConfig *config) { + if(_changedBufferViews.contains(config)) + return _changedBufferViews[config]; + else + return config; } diff --git a/src/qtui/settingspages/bufferviewsettingspage.h b/src/qtui/settingspages/bufferviewsettingspage.h index a3f32c1d..0c733587 100644 --- a/src/qtui/settingspages/bufferviewsettingspage.h +++ b/src/qtui/settingspages/bufferviewsettingspage.h @@ -32,6 +32,7 @@ class BufferViewSettingsPage : public SettingsPage { public: BufferViewSettingsPage(QWidget *parent = 0); + ~BufferViewSettingsPage(); public slots: void save(); @@ -64,6 +65,8 @@ private: int listPos(BufferViewConfig *config); int bufferViewId(int listPos); + BufferViewConfig *cloneConfig(BufferViewConfig *config); + BufferViewConfig *configForDisplay(BufferViewConfig *config); }; diff --git a/src/qtui/ui/coreaccounteditdlg.ui b/src/qtui/ui/coreaccounteditdlg.ui index 4f056bc8..5dda97de 100644 --- a/src/qtui/ui/coreaccounteditdlg.ui +++ b/src/qtui/ui/coreaccounteditdlg.ui @@ -5,8 +5,8 @@ 0 0 - 395 - 242 + 514 + 534 @@ -122,21 +122,108 @@ - - - Qt::Vertical + + + Use a proxy: - - - 20 - 40 - + + true - + + false + + + + + + Proxy Type: + + + + + + + + Socks 5 + + + + + HTTP + + + + + + + + Proxy Host: + + + + + + + Proxy Port: + + + + + + + localhost + + + + + + + 10000 + + + 8080 + + + + + + + Proxy Username: + + + + + + + + + + Proxy Password: + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -162,8 +249,8 @@ accept() - 263 - 230 + 275 + 521 157 @@ -178,8 +265,8 @@ reject() - 331 - 230 + 343 + 521 286 @@ -194,8 +281,8 @@ setDisabled(bool) - 30 - 79 + 63 + 100 92 @@ -210,11 +297,11 @@ setDisabled(bool) - 39 - 78 + 63 + 100 - 331 + 400 144 @@ -226,8 +313,8 @@ setFocus() - 26 - 113 + 59 + 126 184 diff --git a/version.inc b/version.inc index 9668a27e..45df4574 100644 --- a/version.inc +++ b/version.inc @@ -4,8 +4,8 @@ { using namespace Global; quasselVersion = "0.2.0-alpha4-pre"; - quasselDate = "2008-03-27"; - quasselBuild = 661; + quasselDate = "2008-03-29"; + quasselBuild = 664; //! Minimum client build number the core needs clientBuildNeeded = 642;