tqt settings dialog: small fixes - electrum - Electrum Bitcoin wallet
 (HTM) git clone https://git.parazyd.org/electrum
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
       ---
 (DIR) commit 3e98123b175013cc07a46b4e0459f184b3fa73d3
 (DIR) parent f72bb03af6d7f06a5d3fc911c806662ff0b4cd36
 (HTM) Author: SomberNight <somber.night@protonmail.com>
       Date:   Sat,  2 Nov 2019 06:13:11 +0100
       
       qt settings dialog: small fixes
       
       Diffstat:
         M electrum/gui/qt/settings_dialog.py  |      83 +++++++++++++++----------------
       
       1 file changed, 41 insertions(+), 42 deletions(-)
       ---
 (DIR) diff --git a/electrum/gui/qt/settings_dialog.py b/electrum/gui/qt/settings_dialog.py
       t@@ -22,50 +22,33 @@
        # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
        # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        # SOFTWARE.
       -import sys
       -import time
       -import threading
       -import os
       -import traceback
       -import json
       -from decimal import Decimal
       -
       -from PyQt5.QtGui import QPixmap, QKeySequence, QIcon, QCursor
       -from PyQt5.QtCore import Qt, QRect, QStringListModel, QSize, pyqtSignal
       -from PyQt5.QtWidgets import (QMessageBox, QComboBox, QSystemTrayIcon, QTabWidget,
       -                             QSpinBox, QMenuBar, QFileDialog, QCheckBox, QLabel,
       -                             QVBoxLayout, QGridLayout, QLineEdit, QTreeWidgetItem,
       -                             QHBoxLayout, QPushButton, QScrollArea, QTextEdit,
       -                             QShortcut, QMainWindow, QCompleter, QInputDialog,
       -                             QWidget, QMenu, QSizePolicy, QStatusBar)
       -
       -import electrum
       +
       +from typing import Optional, TYPE_CHECKING
       +
       +from PyQt5.QtCore import Qt
       +from PyQt5.QtWidgets import (QComboBox,  QTabWidget,
       +                             QSpinBox,  QFileDialog, QCheckBox, QLabel,
       +                             QVBoxLayout, QGridLayout, QLineEdit,
       +                             QPushButton, QWidget)
       +
        from electrum.i18n import _
        from electrum import util, coinchooser, paymentrequest
       -from electrum.util import (format_time, format_satoshis, format_fee_satoshis,
       -                           format_satoshis_plain, NotEnoughFunds,
       -                           UserCancelled, NoDynamicFeeEstimates, profiler,
       -                           export_meta, import_meta, bh2u, bfh, InvalidPassword,
       -                           base_units, base_units_list, base_unit_name_to_decimal_point,
       -                           decimal_point_to_base_unit_name, quantize_feerate,
       -                           UnknownBaseUnit, DECIMAL_POINT_DEFAULT, UserFacingException,
       -                           get_new_wallet_name, send_exception_to_crash_reporter,
       -                           InvalidBitcoinURI, InvoiceError)
       -
       -from .amountedit import AmountEdit, BTCAmountEdit, MyLineEdit, FeerateEdit
       -from .util import (read_QIcon, ColorScheme, text_dialog, icon_path, WaitingDialog,
       -                   WindowModalDialog, ChoicesLayout, HelpLabel, FromList, Buttons,
       -                   OkButton, InfoButton, WWLabel, TaskThread, CancelButton,
       -                   CloseButton, HelpButton, MessageBoxMixin, EnterButton,
       -                   ButtonsLineEdit, CopyCloseButton, import_meta_gui, export_meta_gui,
       -                   filename_field, address_field, char_width_in_lineedit, webopen)
       +from electrum.util import base_units_list, base_unit_name_to_decimal_point
       +
       +from .util import (ColorScheme, WindowModalDialog, HelpLabel, Buttons,
       +                   CloseButton)
        
        from electrum.i18n import languages
        from electrum import qrscanner
        
       +if TYPE_CHECKING:
       +    from electrum.simple_config import SimpleConfig
       +    from .main_window import ElectrumWindow
       +
       +
        class SettingsDialog(WindowModalDialog):
        
       -    def __init__(self, parent, config):
       +    def __init__(self, parent: 'ElectrumWindow', config: 'SimpleConfig'):
                WindowModalDialog.__init__(self, parent, _('Preferences'))
                self.config = config
                self.window = parent
       t@@ -224,7 +207,7 @@ open. For this to work, your computer needs to be online regularly.""")
                ssl_privkey = self.config.get('ssl_keyfile')
                ssl_privkey_label = HelpLabel(_('SSL key file') + ':', '')
                self.ssl_privkey_e = QPushButton(ssl_privkey)
       -        self.ssl_cert_e.clicked.connect(self.select_ssl_certfile)
       +        self.ssl_privkey_e.clicked.connect(self.select_ssl_privkey)
                services_widgets.append((ssl_privkey_label, self.ssl_privkey_e))
        
                ssl_domain_label = HelpLabel(_('SSL domain') + ':', '')
       t@@ -254,7 +237,7 @@ open. For this to work, your computer needs to be online regularly.""")
                services_widgets.append((payserver_cb, self.payserver_port_e))
        
                help_local_wt = _("""To setup a local watchtower, you must run Electrum on a machine
       -        that is always connected to the internet. Configure a port if you want it to be public.""")
       +that is always connected to the internet. Configure a port if you want it to be public.""")
                local_wt_cb = QCheckBox(_("Run Watchtower"))
                local_wt_cb.setToolTip(help_local_wt)
                local_wt_cb.setChecked(bool(self.config.get('run_watchtower', False)))
       t@@ -576,10 +559,10 @@ open. For this to work, your computer needs to be online regularly.""")
                    self.check_ssl_config()
        
            def select_ssl_privkey(self, b):
       -        name = self.config.get('ssl_privkey', '')
       +        name = self.config.get('ssl_keyfile', '')
                filename, __ = QFileDialog.getOpenFileName(self, "Select your SSL private key file", name)
                if filename:
       -            self.config.set_key('ssl_privkey', filename)
       +            self.config.set_key('ssl_keyfile', filename)
                    self.ssl_cert_e.setText(filename)
                    self.check_ssl_config()
        
       t@@ -604,10 +587,26 @@ open. For this to work, your computer needs to be online regularly.""")
                hostname = str(self.hostname_e.text())
                self.config.set_key('services_hostname', hostname, True)
        
       +    def _get_int_port_from_port_text(self, port_text) -> Optional[int]:
       +        if not port_text:
       +            return
       +        try:
       +            port = int(port_text)
       +            if not (0 < port < 2 ** 16):
       +                raise Exception('port out of range')
       +        except Exception:
       +            self.window.show_error("invalid port")
       +            return
       +        return port
       +
            def on_payserver_port(self):
       -        port = int(self.payserver_port_e.text())
       +        port_text = self.payserver_port_e.text()
       +        port = self._get_int_port_from_port_text(port_text)
       +        if port is None: return
                self.config.set_key('payserver_port', port, True)
        
            def on_watchtower_port(self):
       -        port = int(self.payserver_port_e.text())
       +        port_text = self.payserver_port_e.text()
       +        port = self._get_int_port_from_port_text(port_text)
       +        if port is None: return
                self.config.set_key('watchtower_port', port, True)