Added ability to set proxy.

This commit is contained in:
Gres 2015-10-10 14:45:57 +03:00
parent 0fd694787a
commit b6461fa3a9
7 changed files with 183 additions and 20 deletions

View File

@ -11,6 +11,7 @@
#include <QClipboard> #include <QClipboard>
#include <QMessageBox> #include <QMessageBox>
#include <QInputDialog> #include <QInputDialog>
#include <QNetworkProxy>
#include "Settings.h" #include "Settings.h"
#include "SettingsEditor.h" #include "SettingsEditor.h"
@ -21,6 +22,7 @@
#include "ResultDialog.h" #include "ResultDialog.h"
#include "LanguageHelper.h" #include "LanguageHelper.h"
#include "StAssert.h" #include "StAssert.h"
#include "Utils.h"
Manager::Manager (QObject *parent) : Manager::Manager (QObject *parent) :
QObject (parent), QObject (parent),
@ -155,6 +157,16 @@ void Manager::applySettings () {
// Depends on SettingsEditor button indexes. 1==dialog // Depends on SettingsEditor button indexes. 1==dialog
useResultDialog_ = GET (resultShowType).toBool (); 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.endGroup ();
settings.beginGroup (settings_names::translationGroup); settings.beginGroup (settings_names::translationGroup);

View File

@ -40,7 +40,8 @@ SOURCES += main.cpp\
WebTranslator.cpp \ WebTranslator.cpp \
WebTranslatorProxy.cpp \ WebTranslatorProxy.cpp \
TranslatorHelper.cpp \ TranslatorHelper.cpp \
RecognizerHelper.cpp RecognizerHelper.cpp \
Utils.cpp
HEADERS += \ HEADERS += \
Manager.h \ Manager.h \
@ -57,7 +58,8 @@ HEADERS += \
WebTranslatorProxy.h \ WebTranslatorProxy.h \
StAssert.h \ StAssert.h \
TranslatorHelper.h \ TranslatorHelper.h \
RecognizerHelper.h RecognizerHelper.h \
Utils.h
FORMS += \ FORMS += \
SettingsEditor.ui \ SettingsEditor.ui \

View File

@ -12,6 +12,12 @@ namespace settings_names {
const QString repeatHotkey = "repeatHotkey"; const QString repeatHotkey = "repeatHotkey";
const QString clipboardHotkey = "clipboardHotkey"; const QString clipboardHotkey = "clipboardHotkey";
const QString resultShowType = "resultShowType"; 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 //! Recognition
const QString recogntionGroup = "Recognition"; const QString recogntionGroup = "Recognition";
@ -27,7 +33,6 @@ namespace settings_names {
const QString translationTimeout = "translation_timeout"; const QString translationTimeout = "translation_timeout";
const QString translationDebugMode = "translation_debug"; const QString translationDebugMode = "translation_debug";
const QString translators = "translators"; const QString translators = "translators";
} }
namespace settings_values { namespace settings_values {
@ -40,6 +45,12 @@ namespace settings_values {
const QString repeatHotkey = "Ctrl+Alt+X"; const QString repeatHotkey = "Ctrl+Alt+X";
const QString clipboardHotkey = "Ctrl+Alt+C"; const QString clipboardHotkey = "Ctrl+Alt+C";
const QString resultShowType = "1";//dialog 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 //! Recognition
const QString tessDataPlace = "./"; const QString tessDataPlace = "./";

View File

@ -4,10 +4,13 @@
#include "TranslatorHelper.h" #include "TranslatorHelper.h"
#include "RecognizerHelper.h" #include "RecognizerHelper.h"
#include "StAssert.h" #include "StAssert.h"
#include "Utils.h"
#include <QSettings> #include <QSettings>
#include <QFileDialog> #include <QFileDialog>
#include <QDir> #include <QDir>
#include <QRegExpValidator>
#include <QNetworkProxy>
#include "Settings.h" #include "Settings.h"
@ -29,6 +32,22 @@ SettingsEditor::SettingsEditor (const LanguageHelper &dictionary, QWidget *paren
SLOT (recognizerFixTableItemChanged (QTableWidgetItem *))); SLOT (recognizerFixTableItemChanged (QTableWidgetItem *)));
ui->translateLangCombo->addItems (dictionary_.translateLanguagesUi ()); ui->translateLangCombo->addItems (dictionary_.translateLanguagesUi ());
typedef QNetworkProxy::ProxyType ProxyType;
QMap<ProxyType, QString> proxyTypeNames;
proxyTypeNames.insert (QNetworkProxy::NoProxy, tr ("Нет"));
proxyTypeNames.insert (QNetworkProxy::Socks5Proxy, tr ("SOCKS 5"));
proxyTypeNames.insert (QNetworkProxy::HttpProxy, tr ("HTTP"));
QList<ProxyType> 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 (); loadSettings ();
loadState (); loadState ();
} }
@ -57,6 +76,20 @@ void SettingsEditor::saveSettings () const {
settings.setValue (repeatHotkey, ui->repeatEdit->keySequence ().toString ()); settings.setValue (repeatHotkey, ui->repeatEdit->keySequence ().toString ());
settings.setValue (clipboardHotkey, ui->clipboardEdit->keySequence ().toString ()); settings.setValue (clipboardHotkey, ui->clipboardEdit->keySequence ().toString ());
settings.setValue (resultShowType, buttonGroup_->checkedId ()); 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 (); settings.endGroup ();
@ -136,6 +169,17 @@ void SettingsEditor::loadSettings () {
QAbstractButton *button = buttonGroup_->button (GET (resultShowType).toInt ()); QAbstractButton *button = buttonGroup_->button (GET (resultShowType).toInt ());
Q_CHECK_PTR (button); Q_CHECK_PTR (button);
button->setChecked (true); 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.endGroup ();
settings.beginGroup (settings_names::recogntionGroup); settings.beginGroup (settings_names::recogntionGroup);

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>509</width> <width>553</width>
<height>338</height> <height>456</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -34,7 +34,7 @@
<string>Общее</string> <string>Общее</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_5"> <layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0" colspan="2"> <item row="0" column="0">
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string>Горячие клавиши</string> <string>Горячие клавиши</string>
@ -95,20 +95,7 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>270</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="resultGroup"> <widget class="QGroupBox" name="resultGroup">
<property name="title"> <property name="title">
<string>Вывод результата</string> <string>Вывод результата</string>
@ -134,6 +121,92 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="2" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Прокси</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Тип:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="proxyTypeCombo"/>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Пользователь:</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLineEdit" name="proxyUserEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Адрес:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="proxyHostEdit"/>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Пароль:</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="proxyPassEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Порт:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="proxyPortSpin">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
</widget>
</item>
<item row="2" column="2" colspan="2">
<widget class="QCheckBox" name="proxySaveCheck">
<property name="text">
<string>Сохранять пароль (небезопасно)</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>270</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="recognizeTab"> <widget class="QWidget" name="recognizeTab">

13
Utils.cpp Normal file
View File

@ -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 ());
}

8
Utils.h Normal file
View File

@ -0,0 +1,8 @@
#ifndef UTILS_H
#define UTILS_H
#include <QString>
QString encode (const QString &source);
#endif // UTILS_H