From 546f4782d14f9dfeacd3bf3f2e98b656a2927c6b Mon Sep 17 00:00:00 2001 From: Gres Date: Fri, 6 Mar 2020 20:53:53 +0300 Subject: [PATCH] Add proxy handling --- src/manager.cpp | 28 +++++++++++++++++++++++++++ src/manager.h | 1 + src/settings.cpp | 6 ++++-- src/settings.h | 10 ++++++---- src/settingseditor.cpp | 44 +++++++++++++++++++++++++++--------------- 5 files changed, 67 insertions(+), 22 deletions(-) diff --git a/src/manager.cpp b/src/manager.cpp index 8de2951..a949efe 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -12,6 +12,7 @@ #include #include #include +#include Manager::Manager() { @@ -34,6 +35,8 @@ Manager::~Manager() = default; void Manager::updateSettings(const Settings &settings) { LTRACE() << "updateSettings"; + setupProxy(settings); + tray_->updateSettings(settings); capturer_->updateSettings(settings); recognizer_->updateSettings(settings); @@ -42,6 +45,31 @@ void Manager::updateSettings(const Settings &settings) representer_->updateSettings(settings); } +void Manager::setupProxy(const Settings &settings) +{ + if (settings.proxyType == ProxyType::System) { + QNetworkProxyFactory::setUseSystemConfiguration(true); + return; + } + + QNetworkProxyFactory::setUseSystemConfiguration(false); + + if (settings.proxyType == ProxyType::Disabled) { + QNetworkProxy::setApplicationProxy({}); + return; + } + + QNetworkProxy proxy; + using T = QNetworkProxy::ProxyType; + proxy.setType(settings.proxyType == ProxyType::Socks5 ? T::Socks5Proxy + : T::HttpProxy); + proxy.setHostName(settings.proxyHostName); + proxy.setPort(settings.proxyPort); + proxy.setUser(settings.proxyUser); + proxy.setPassword(settings.proxyPassword); + QNetworkProxy::setApplicationProxy(proxy); +} + void Manager::finishTask(const TaskPtr &task) { SOFT_ASSERT(task, return ); diff --git a/src/manager.h b/src/manager.h index 9491dab..f0291a1 100644 --- a/src/manager.h +++ b/src/manager.h @@ -27,6 +27,7 @@ public: private: void updateSettings(const Settings &settings); + void setupProxy(const Settings &settings); void finishTask(const TaskPtr &task); std::unique_ptr tray_; diff --git a/src/settings.cpp b/src/settings.cpp index 1ec3780..0d3a936 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -62,7 +62,7 @@ void Settings::save() settings.setValue(qs_resultShowType, int(resultShowType)); - settings.setValue(qs_proxyType, proxyType); + settings.setValue(qs_proxyType, int(proxyType)); settings.setValue(qs_proxyHostName, proxyHostName); settings.setValue(qs_proxyPort, proxyPort); settings.setValue(qs_proxyUser, proxyUser); @@ -115,7 +115,9 @@ void Settings::load() std::clamp(settings.value(qs_resultShowType, int(resultShowType)).toInt(), int(ResultMode::Widget), int(ResultMode::Tooltip))); - proxyType = settings.value(qs_proxyType, proxyType).toInt(); + proxyType = + ProxyType(std::clamp(settings.value(qs_proxyType, int(proxyType)).toInt(), + int(ProxyType::Disabled), int(ProxyType::Http))); proxyHostName = settings.value(qs_proxyHostName, proxyHostName).toString(); proxyPort = settings.value(qs_proxyPort, proxyPort).toInt(); proxyUser = settings.value(qs_proxyUser, proxyUser).toString(); diff --git a/src/settings.h b/src/settings.h index 5a55f7a..613a0aa 100644 --- a/src/settings.h +++ b/src/settings.h @@ -14,6 +14,8 @@ struct Substitution { }; using Substitutions = std::unordered_multimap; +enum class ProxyType { Disabled, System, Socks5, Http }; + class Settings { public: @@ -25,11 +27,11 @@ public: QString showLastHotkey{"Ctrl+Alt+X"}; QString clipboardHotkey{"Ctrl+Alt+C"}; - int proxyType{0}; - QString proxyHostName{""}; + ProxyType proxyType{ProxyType::System}; + QString proxyHostName; int proxyPort{8080}; - QString proxyUser{""}; - QString proxyPassword{""}; + QString proxyUser; + QString proxyPassword; bool proxySavePassword{false}; int autoUpdateType{0}; // Never diff --git a/src/settingseditor.cpp b/src/settingseditor.cpp index ee86b99..13c4f70 100644 --- a/src/settingseditor.cpp +++ b/src/settingseditor.cpp @@ -23,23 +23,21 @@ SettingsEditor::SettingsEditor() this, &SettingsEditor::updateCurrentPage); } - // general - // QMap proxyTypeNames; - // proxyTypeNames.insert(QNetworkProxy::NoProxy, tr("No")); - // proxyTypeNames.insert(QNetworkProxy::DefaultProxy, tr("System")); - // proxyTypeNames.insert(QNetworkProxy::Socks5Proxy, tr("SOCKS 5")); - // proxyTypeNames.insert(QNetworkProxy::HttpProxy, tr("HTTP")); - // QList proxyOrder = proxyTypeOrder(); - // for (int type : proxyOrder) { - // ui->proxyTypeCombo->addItem( - // proxyTypeNames.value(QNetworkProxy::ProxyType(type))); - // } + { + QMap proxyTypes; + proxyTypes.insert(ProxyType::Disabled, tr("Disabled")); + proxyTypes.insert(ProxyType::System, tr("System")); + proxyTypes.insert(ProxyType::Socks5, tr("SOCKS 5")); + proxyTypes.insert(ProxyType::Http, tr("HTTP")); + ui->proxyTypeCombo->addItems(proxyTypes.values()); - // QRegExp urlRegexp( - // R"(^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)"); - // ui->proxyHostEdit->setValidator( - // new QRegExpValidator(urlRegexp, ui->proxyHostEdit)); - // ui->proxyPassEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit); + QRegExp urlRegexp( + R"(^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)"); + ui->proxyHostEdit->setValidator( + new QRegExpValidator(urlRegexp, ui->proxyHostEdit)); + + ui->proxyPassEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit); + } // recognition connect(ui->tessdataButton, &QPushButton::clicked, // @@ -77,6 +75,13 @@ Settings SettingsEditor::settings() const settings.showLastHotkey = ui->repeatEdit->keySequence().toString(); settings.clipboardHotkey = ui->clipboardEdit->keySequence().toString(); + settings.proxyType = ProxyType(ui->proxyTypeCombo->currentIndex()); + settings.proxyHostName = ui->proxyHostEdit->text(); + settings.proxyPort = ui->proxyPortSpin->value(); + settings.proxyUser = ui->proxyUserEdit->text(); + settings.proxyPassword = ui->proxyPassEdit->text(); + settings.proxySavePassword = ui->proxySaveCheck->isChecked(); + settings.tessdataPath = ui->tessdataEdit->text(); settings.doTranslation = ui->doTranslationCheck->isChecked(); @@ -104,6 +109,13 @@ void SettingsEditor::setSettings(const Settings &settings) ui->repeatEdit->setKeySequence(settings.showLastHotkey); ui->clipboardEdit->setKeySequence(settings.clipboardHotkey); + ui->proxyTypeCombo->setCurrentIndex(int(settings.proxyType)); + ui->proxyHostEdit->setText(settings.proxyHostName); + ui->proxyPortSpin->setValue(settings.proxyPort); + ui->proxyUserEdit->setText(settings.proxyUser); + ui->proxyPassEdit->setText(settings.proxyPassword); + ui->proxySaveCheck->setChecked(settings.proxySavePassword); + ui->tessdataEdit->setText(settings.tessdataPath); updateTesseractLanguages();