Add proxy handling

This commit is contained in:
Gres 2020-03-06 20:53:53 +03:00
parent aee289eaef
commit 546f4782d1
5 changed files with 67 additions and 22 deletions

View File

@ -12,6 +12,7 @@
#include <QApplication> #include <QApplication>
#include <QClipboard> #include <QClipboard>
#include <QMessageBox> #include <QMessageBox>
#include <QNetworkProxy>
Manager::Manager() Manager::Manager()
{ {
@ -34,6 +35,8 @@ Manager::~Manager() = default;
void Manager::updateSettings(const Settings &settings) void Manager::updateSettings(const Settings &settings)
{ {
LTRACE() << "updateSettings"; LTRACE() << "updateSettings";
setupProxy(settings);
tray_->updateSettings(settings); tray_->updateSettings(settings);
capturer_->updateSettings(settings); capturer_->updateSettings(settings);
recognizer_->updateSettings(settings); recognizer_->updateSettings(settings);
@ -42,6 +45,31 @@ void Manager::updateSettings(const Settings &settings)
representer_->updateSettings(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) void Manager::finishTask(const TaskPtr &task)
{ {
SOFT_ASSERT(task, return ); SOFT_ASSERT(task, return );

View File

@ -27,6 +27,7 @@ public:
private: private:
void updateSettings(const Settings &settings); void updateSettings(const Settings &settings);
void setupProxy(const Settings &settings);
void finishTask(const TaskPtr &task); void finishTask(const TaskPtr &task);
std::unique_ptr<TrayIcon> tray_; std::unique_ptr<TrayIcon> tray_;

View File

@ -62,7 +62,7 @@ void Settings::save()
settings.setValue(qs_resultShowType, int(resultShowType)); 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_proxyHostName, proxyHostName);
settings.setValue(qs_proxyPort, proxyPort); settings.setValue(qs_proxyPort, proxyPort);
settings.setValue(qs_proxyUser, proxyUser); settings.setValue(qs_proxyUser, proxyUser);
@ -115,7 +115,9 @@ void Settings::load()
std::clamp(settings.value(qs_resultShowType, int(resultShowType)).toInt(), std::clamp(settings.value(qs_resultShowType, int(resultShowType)).toInt(),
int(ResultMode::Widget), int(ResultMode::Tooltip))); 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(); proxyHostName = settings.value(qs_proxyHostName, proxyHostName).toString();
proxyPort = settings.value(qs_proxyPort, proxyPort).toInt(); proxyPort = settings.value(qs_proxyPort, proxyPort).toInt();
proxyUser = settings.value(qs_proxyUser, proxyUser).toString(); proxyUser = settings.value(qs_proxyUser, proxyUser).toString();

View File

@ -14,6 +14,8 @@ struct Substitution {
}; };
using Substitutions = std::unordered_multimap<LanguageId, Substitution>; using Substitutions = std::unordered_multimap<LanguageId, Substitution>;
enum class ProxyType { Disabled, System, Socks5, Http };
class Settings class Settings
{ {
public: public:
@ -25,11 +27,11 @@ public:
QString showLastHotkey{"Ctrl+Alt+X"}; QString showLastHotkey{"Ctrl+Alt+X"};
QString clipboardHotkey{"Ctrl+Alt+C"}; QString clipboardHotkey{"Ctrl+Alt+C"};
int proxyType{0}; ProxyType proxyType{ProxyType::System};
QString proxyHostName{""}; QString proxyHostName;
int proxyPort{8080}; int proxyPort{8080};
QString proxyUser{""}; QString proxyUser;
QString proxyPassword{""}; QString proxyPassword;
bool proxySavePassword{false}; bool proxySavePassword{false};
int autoUpdateType{0}; // Never int autoUpdateType{0}; // Never

View File

@ -23,23 +23,21 @@ SettingsEditor::SettingsEditor()
this, &SettingsEditor::updateCurrentPage); this, &SettingsEditor::updateCurrentPage);
} }
// general {
// QMap<QNetworkProxy::ProxyType, QString> proxyTypeNames; QMap<ProxyType, QString> proxyTypes;
// proxyTypeNames.insert(QNetworkProxy::NoProxy, tr("No")); proxyTypes.insert(ProxyType::Disabled, tr("Disabled"));
// proxyTypeNames.insert(QNetworkProxy::DefaultProxy, tr("System")); proxyTypes.insert(ProxyType::System, tr("System"));
// proxyTypeNames.insert(QNetworkProxy::Socks5Proxy, tr("SOCKS 5")); proxyTypes.insert(ProxyType::Socks5, tr("SOCKS 5"));
// proxyTypeNames.insert(QNetworkProxy::HttpProxy, tr("HTTP")); proxyTypes.insert(ProxyType::Http, tr("HTTP"));
// QList<int> proxyOrder = proxyTypeOrder(); ui->proxyTypeCombo->addItems(proxyTypes.values());
// for (int type : proxyOrder) {
// ui->proxyTypeCombo->addItem(
// proxyTypeNames.value(QNetworkProxy::ProxyType(type)));
// }
// QRegExp urlRegexp( QRegExp urlRegexp(
// R"(^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)"); R"(^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)");
// ui->proxyHostEdit->setValidator( ui->proxyHostEdit->setValidator(
// new QRegExpValidator(urlRegexp, ui->proxyHostEdit)); new QRegExpValidator(urlRegexp, ui->proxyHostEdit));
// ui->proxyPassEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
ui->proxyPassEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
}
// recognition // recognition
connect(ui->tessdataButton, &QPushButton::clicked, // connect(ui->tessdataButton, &QPushButton::clicked, //
@ -77,6 +75,13 @@ Settings SettingsEditor::settings() const
settings.showLastHotkey = ui->repeatEdit->keySequence().toString(); settings.showLastHotkey = ui->repeatEdit->keySequence().toString();
settings.clipboardHotkey = ui->clipboardEdit->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.tessdataPath = ui->tessdataEdit->text();
settings.doTranslation = ui->doTranslationCheck->isChecked(); settings.doTranslation = ui->doTranslationCheck->isChecked();
@ -104,6 +109,13 @@ void SettingsEditor::setSettings(const Settings &settings)
ui->repeatEdit->setKeySequence(settings.showLastHotkey); ui->repeatEdit->setKeySequence(settings.showLastHotkey);
ui->clipboardEdit->setKeySequence(settings.clipboardHotkey); 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); ui->tessdataEdit->setText(settings.tessdataPath);
updateTesseractLanguages(); updateTesseractLanguages();