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