diff --git a/Manager.cpp b/Manager.cpp index 192deb5..0f2eb5d 100644 --- a/Manager.cpp +++ b/Manager.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include "Settings.h" #include "SettingsEditor.h" @@ -21,6 +22,7 @@ #include "ResultDialog.h" #include "LanguageHelper.h" #include "StAssert.h" +#include "Utils.h" Manager::Manager (QObject *parent) : QObject (parent), @@ -155,6 +157,16 @@ void Manager::applySettings () { // Depends on SettingsEditor button indexes. 1==dialog useResultDialog_ = GET (resultShowType).toBool (); + + QNetworkProxy proxy = QNetworkProxy::applicationProxy (); + proxy.setType (QNetworkProxy::ProxyType (GET (proxyType).toInt ())); + proxy.setHostName (GET (proxyHostName).toString ()); + proxy.setPort (GET (proxyPort).toInt ()); + proxy.setUser (GET (proxyUser).toString ()); + if (GET (proxySavePassword).toBool ()) { + proxy.setPassword (encode (GET (proxyPassword).toString ())); + } + QNetworkProxy::setApplicationProxy (proxy); settings.endGroup (); settings.beginGroup (settings_names::translationGroup); diff --git a/ScreenTranslator.pro b/ScreenTranslator.pro index 0147d6a..1376116 100644 --- a/ScreenTranslator.pro +++ b/ScreenTranslator.pro @@ -40,7 +40,8 @@ SOURCES += main.cpp\ WebTranslator.cpp \ WebTranslatorProxy.cpp \ TranslatorHelper.cpp \ - RecognizerHelper.cpp + RecognizerHelper.cpp \ + Utils.cpp HEADERS += \ Manager.h \ @@ -57,7 +58,8 @@ HEADERS += \ WebTranslatorProxy.h \ StAssert.h \ TranslatorHelper.h \ - RecognizerHelper.h + RecognizerHelper.h \ + Utils.h FORMS += \ SettingsEditor.ui \ diff --git a/Settings.h b/Settings.h index 040bba5..0c705a3 100644 --- a/Settings.h +++ b/Settings.h @@ -12,6 +12,12 @@ namespace settings_names { const QString repeatHotkey = "repeatHotkey"; const QString clipboardHotkey = "clipboardHotkey"; const QString resultShowType = "resultShowType"; + const QString proxyType = "proxyType"; + const QString proxyHostName = "proxyHostName"; + const QString proxyPort = "proxyPort"; + const QString proxyUser = "proxyUser"; + const QString proxyPassword = "proxyPassword"; + const QString proxySavePassword = "proxySavePassword"; //! Recognition const QString recogntionGroup = "Recognition"; @@ -27,7 +33,6 @@ namespace settings_names { const QString translationTimeout = "translation_timeout"; const QString translationDebugMode = "translation_debug"; const QString translators = "translators"; - } namespace settings_values { @@ -40,6 +45,12 @@ namespace settings_values { const QString repeatHotkey = "Ctrl+Alt+X"; const QString clipboardHotkey = "Ctrl+Alt+C"; const QString resultShowType = "1";//dialog + const int proxyType = 0; + const QString proxyHostName = ""; + const int proxyPort = 8080; + const QString proxyUser = ""; + const QString proxyPassword = ""; + const bool proxySavePassword = false; //! Recognition const QString tessDataPlace = "./"; diff --git a/SettingsEditor.cpp b/SettingsEditor.cpp index eddf170..b5887aa 100644 --- a/SettingsEditor.cpp +++ b/SettingsEditor.cpp @@ -4,10 +4,13 @@ #include "TranslatorHelper.h" #include "RecognizerHelper.h" #include "StAssert.h" +#include "Utils.h" #include #include #include +#include +#include #include "Settings.h" @@ -29,6 +32,22 @@ SettingsEditor::SettingsEditor (const LanguageHelper &dictionary, QWidget *paren SLOT (recognizerFixTableItemChanged (QTableWidgetItem *))); ui->translateLangCombo->addItems (dictionary_.translateLanguagesUi ()); + + typedef QNetworkProxy::ProxyType ProxyType; + QMap proxyTypeNames; + proxyTypeNames.insert (QNetworkProxy::NoProxy, tr ("Нет")); + proxyTypeNames.insert (QNetworkProxy::Socks5Proxy, tr ("SOCKS 5")); + proxyTypeNames.insert (QNetworkProxy::HttpProxy, tr ("HTTP")); + QList proxyOrder; + proxyOrder << QNetworkProxy::NoProxy << QNetworkProxy::Socks5Proxy << QNetworkProxy::HttpProxy; + foreach (ProxyType type, proxyOrder) { + ui->proxyTypeCombo->addItem (proxyTypeNames.value (type)); + } + + QRegExp urlRegexp (R"(^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)"); + ui->proxyHostEdit->setValidator (new QRegExpValidator (urlRegexp, ui->proxyHostEdit)); + ui->proxyPassEdit->setEchoMode (QLineEdit::PasswordEchoOnEdit); + loadSettings (); loadState (); } @@ -57,6 +76,20 @@ void SettingsEditor::saveSettings () const { settings.setValue (repeatHotkey, ui->repeatEdit->keySequence ().toString ()); settings.setValue (clipboardHotkey, ui->clipboardEdit->keySequence ().toString ()); settings.setValue (resultShowType, buttonGroup_->checkedId ()); + settings.setValue (proxyType, ui->proxyTypeCombo->currentIndex ()); + settings.setValue (proxyHostName, ui->proxyHostEdit->text ()); + settings.setValue (proxyPort, ui->proxyPortSpin->value ()); + settings.setValue (proxyUser, ui->proxyUserEdit->text ()); + if (ui->proxySaveCheck->isChecked ()) { + settings.setValue (proxyPassword, encode (ui->proxyPassEdit->text ())); + } + else { + settings.remove (proxyPassword); + QNetworkProxy proxy = QNetworkProxy::applicationProxy (); + proxy.setPassword (ui->proxyPassEdit->text ()); + QNetworkProxy::setApplicationProxy (proxy); + } + settings.setValue (proxySavePassword, ui->proxySaveCheck->isChecked ()); settings.endGroup (); @@ -136,6 +169,17 @@ void SettingsEditor::loadSettings () { QAbstractButton *button = buttonGroup_->button (GET (resultShowType).toInt ()); Q_CHECK_PTR (button); button->setChecked (true); + ui->proxyTypeCombo->setCurrentIndex (GET (proxyType).toInt ()); + ui->proxyHostEdit->setText (GET (proxyHostName).toString ()); + ui->proxyPortSpin->setValue (GET (proxyPort).toInt ()); + ui->proxyUserEdit->setText (GET (proxyUser).toString ()); + ui->proxySaveCheck->setChecked (GET (proxySavePassword).toBool ()); + if (ui->proxySaveCheck->isChecked ()) { + ui->proxyPassEdit->setText (encode (GET (proxyPassword).toString ())); + } + else { + ui->proxyPassEdit->setText (QNetworkProxy::applicationProxy ().password ()); + } settings.endGroup (); settings.beginGroup (settings_names::recogntionGroup); diff --git a/SettingsEditor.ui b/SettingsEditor.ui index 18bea41..201f45d 100644 --- a/SettingsEditor.ui +++ b/SettingsEditor.ui @@ -6,8 +6,8 @@ 0 0 - 509 - 338 + 553 + 456 @@ -34,7 +34,7 @@ Общее - + Горячие клавиши @@ -95,20 +95,7 @@ - - - - Qt::Vertical - - - - 20 - 270 - - - - - + Вывод результата @@ -134,6 +121,92 @@ + + + + Прокси + + + + + + Тип: + + + + + + + + + + Пользователь: + + + + + + + + + + Адрес: + + + + + + + + + + Пароль: + + + + + + + + + + Порт: + + + + + + + 1 + + + 65535 + + + + + + + Сохранять пароль (небезопасно) + + + + + + + + + + Qt::Vertical + + + + 20 + 270 + + + + diff --git a/Utils.cpp b/Utils.cpp new file mode 100644 index 0000000..d9d1430 --- /dev/null +++ b/Utils.cpp @@ -0,0 +1,13 @@ +#include "Utils.h" + +QString encode (const QString &source) { + if (source.isEmpty ()) { + return source; + } + char encKeys[] = {14, 26, 99, 43}; + std::string result = source.toStdString (); + for (int i = 0, end = result.size (); i < end; ++i) { + result [i] = result[i] ^ encKeys[ i % sizeof(encKeys)]; + } + return QString::fromUtf8 (result.data ()); +} diff --git a/Utils.h b/Utils.h new file mode 100644 index 0000000..2614507 --- /dev/null +++ b/Utils.h @@ -0,0 +1,8 @@ +#ifndef UTILS_H +#define UTILS_H + +#include + +QString encode (const QString &source); + +#endif // UTILS_H