Add proxy handling
This commit is contained in:
parent
aee289eaef
commit
546f4782d1
@ -12,6 +12,7 @@
|
||||
#include <QApplication>
|
||||
#include <QClipboard>
|
||||
#include <QMessageBox>
|
||||
#include <QNetworkProxy>
|
||||
|
||||
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 );
|
||||
|
@ -27,6 +27,7 @@ public:
|
||||
|
||||
private:
|
||||
void updateSettings(const Settings &settings);
|
||||
void setupProxy(const Settings &settings);
|
||||
void finishTask(const TaskPtr &task);
|
||||
|
||||
std::unique_ptr<TrayIcon> tray_;
|
||||
|
@ -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();
|
||||
|
@ -14,6 +14,8 @@ struct Substitution {
|
||||
};
|
||||
using Substitutions = std::unordered_multimap<LanguageId, Substitution>;
|
||||
|
||||
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
|
||||
|
@ -23,23 +23,21 @@ SettingsEditor::SettingsEditor()
|
||||
this, &SettingsEditor::updateCurrentPage);
|
||||
}
|
||||
|
||||
// general
|
||||
// QMap<QNetworkProxy::ProxyType, QString> 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<int> proxyOrder = proxyTypeOrder();
|
||||
// for (int type : proxyOrder) {
|
||||
// ui->proxyTypeCombo->addItem(
|
||||
// proxyTypeNames.value(QNetworkProxy::ProxyType(type)));
|
||||
// }
|
||||
{
|
||||
QMap<ProxyType, QString> 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();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user