diff --git a/res/ui/preferences.ui b/res/ui/preferences.ui index b0dcb43f22b7da3de110071816f3c1127f1b736c..fb22b90836b734d2052cd1ba1906de1759353a9d 100644 --- a/res/ui/preferences.ui +++ b/res/ui/preferences.ui @@ -280,7 +280,116 @@ </item> </layout> </widget> - <widget class="QWidget" name="page_3"/> + <widget class="QWidget" name="page_3"> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QCheckBox" name="checkbox_proxy"> + <property name="text"> + <string>Utiliser un serveur proxy</string> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_11"> + <property name="topMargin"> + <number>6</number> + </property> + <item> + <widget class="QLabel" name="label_8"> + <property name="text"> + <string>Proxy type : </string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="combox_proxytype"> + <item> + <property name="text"> + <string>HTTP</string> + </property> + </item> + <item> + <property name="text"> + <string>SOCKS5</string> + </property> + </item> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_9"> + <item> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>Proxy server address : </string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="edit_proxy_address"/> + </item> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>:</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="spinbox_proxy_port"/> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_10"> + <item> + <widget class="QLabel" name="label_7"> + <property name="text"> + <string>Requested data validation : </string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="spinbox_data_validation"/> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> </widget> </item> </layout> diff --git a/src/cutecoin/core/app.py b/src/cutecoin/core/app.py index 56a4369033e080a9fd3ab8efe1aedbeb92cbf646..227459b48a518228102b97721f4e348d5c3899ce 100644 --- a/src/cutecoin/core/app.py +++ b/src/cutecoin/core/app.py @@ -14,7 +14,7 @@ import i18n_rc from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, \ QUrl, QTranslator, QCoreApplication, QLocale -from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkReply, QNetworkRequest +from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkReply, QNetworkRequest, QNetworkProxy from . import config from .account import Account @@ -59,7 +59,12 @@ class Application(QObject): 'expert_mode': False, 'digits_after_comma': 6, 'maximized': False, - 'notifications': True + 'notifications': True, + 'enable_proxy': False, + 'proxy_type': "HTTP", + 'proxy_address': "", + 'proxy_port': 8080, + 'data_validation': 2 } @classmethod @@ -70,6 +75,14 @@ class Application(QObject): app = cls(qapp, loop, network_manager, identities_registry) app.load() app.switch_language() + if app.preferences['enable_proxy'] is True: + proxytypes = {"HTTP": QNetworkProxy.HttpProxy, + "SOCKS5": QNetworkProxy.Socks5Proxy} + qtproxy = QNetworkProxy(proxytypes[app.preferences.get('proxy_type', "HTTP")], + app.preferences['proxy_address'], + app.preferences['proxy_port']) + network_manager.setProxy(qtproxy) + if app.preferences["account"] != "": account = app.get_account(app.preferences["account"]) app.change_current_account(account) diff --git a/src/cutecoin/gui/preferences.py b/src/cutecoin/gui/preferences.py index 902b5d624fdb16d45a6bc7dc6d7c4c4f6f08ff0f..bd5b6f529e0fa38277c34ff6119b1b33f54bf816 100644 --- a/src/cutecoin/gui/preferences.py +++ b/src/cutecoin/gui/preferences.py @@ -37,16 +37,34 @@ class PreferencesDialog(QDialog, Ui_PreferencesDialog): self.combo_referential.setCurrentIndex(self.app.preferences['ref']) for lang in ('en_GB', 'fr_FR'): self.combo_language.addItem(lang) - self.combo_language.setCurrentText(self.app.preferences['lang']) - self.checkbox_expertmode.setChecked(self.app.preferences['expert_mode']) - self.checkbox_maximize.setChecked(self.app.preferences['maximized']) - self.checkbox_notifications.setChecked(self.app.preferences['notifications']) - self.spinbox_digits_comma.setValue(self.app.preferences['digits_after_comma']) + self.combo_language.setCurrentText(self.app.preferences.get('lang', 'en_US')) + self.checkbox_expertmode.setChecked(self.app.preferences.get('expert_mode', False)) + self.checkbox_maximize.setChecked(self.app.preferences.get('maximized', False)) + self.checkbox_notifications.setChecked(self.app.preferences.get('notifications', True)) + self.spinbox_digits_comma.setValue(self.app.preferences.get('digits_after_comma', 2)) self.spinbox_digits_comma.setMaximum(12) self.spinbox_digits_comma.setMinimum(1) self.button_app.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(0)) self.button_display.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(1)) self.button_network.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(2)) + self.spinbox_data_validation.setValue(self.app.preferences.get('data_validation', 2)) + self.spinbox_data_validation.setMinimum(0) + self.spinbox_data_validation.setMaximum(100) + + self.checkbox_proxy.setChecked(self.app.preferences.get('enable_proxy', False)) + self.spinbox_proxy_port.setEnabled(self.checkbox_proxy.isChecked()) + self.edit_proxy_address.setEnabled(self.checkbox_proxy.isChecked()) + self.checkbox_proxy.stateChanged.connect(self.handle_proxy_change) + + self.spinbox_proxy_port.setValue(self.app.preferences.get('proxy_port', 8080)) + self.spinbox_proxy_port.setMinimum(0) + self.spinbox_proxy_port.setMaximum(55636) + self.combox_proxytype.setCurrentText(self.app.preferences.get('proxy_type', "HTTP")) + self.edit_proxy_address.setText(self.app.preferences.get('proxy_address', "")) + + def handle_proxy_change(self): + self.spinbox_proxy_port.setEnabled(self.checkbox_proxy.isChecked()) + self.edit_proxy_address.setEnabled(self.checkbox_proxy.isChecked()) def accept(self): pref = {'account': self.combo_account.currentText(), @@ -55,7 +73,12 @@ class PreferencesDialog(QDialog, Ui_PreferencesDialog): 'expert_mode': self.checkbox_expertmode.isChecked(), 'maximized': self.checkbox_maximize.isChecked(), 'digits_after_comma': self.spinbox_digits_comma.value(), - 'notifications': self.checkbox_notifications.isChecked()} + 'notifications': self.checkbox_notifications.isChecked(), + 'enable_proxy': self.checkbox_proxy.isChecked(), + 'proxy_type': self.combox_proxytype.currentText(), + 'proxy_address': self.edit_proxy_address.text(), + 'proxy_port': self.spinbox_proxy_port.value(), + 'data_validation': self.spinbox_data_validation.value()} self.app.save_preferences(pref) toast.display(self.tr("Preferences"), self.tr("A restart is needed to apply your new preferences."))