network/gui: unify host/port input fields to single server str
This allows optionally specifying the protocol for the main server. fixes #6095 fixes #5278
This commit is contained in:
@@ -36,8 +36,8 @@ from PyQt5.QtGui import QFontMetrics
|
||||
|
||||
from electrum.i18n import _
|
||||
from electrum import constants, blockchain, util
|
||||
from electrum.interface import ServerAddr
|
||||
from electrum.network import Network, PREFERRED_NETWORK_PROTOCOL
|
||||
from electrum.interface import ServerAddr, PREFERRED_NETWORK_PROTOCOL
|
||||
from electrum.network import Network
|
||||
from electrum.logging import get_logger
|
||||
|
||||
from .util import (Buttons, CloseButton, HelpButton, read_QIcon, char_width_in_lineedit,
|
||||
@@ -171,8 +171,7 @@ class ServerListWidget(QTreeWidget):
|
||||
menu.exec_(self.viewport().mapToGlobal(position))
|
||||
|
||||
def set_server(self, server: ServerAddr):
|
||||
self.parent.server_host.setText(server.host)
|
||||
self.parent.server_port.setText(str(server.port))
|
||||
self.parent.server_e.setText(server.net_addr_str())
|
||||
self.parent.set_server()
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
@@ -230,15 +229,12 @@ class NetworkChoiceLayout(object):
|
||||
grid = QGridLayout(server_tab)
|
||||
grid.setSpacing(8)
|
||||
|
||||
self.server_host = QLineEdit()
|
||||
self.server_host.setFixedWidth(fixed_width_hostname)
|
||||
self.server_port = QLineEdit()
|
||||
self.server_port.setFixedWidth(fixed_width_port)
|
||||
self.server_e = QLineEdit()
|
||||
self.server_e.setFixedWidth(fixed_width_hostname + fixed_width_port)
|
||||
self.autoconnect_cb = QCheckBox(_('Select server automatically'))
|
||||
self.autoconnect_cb.setEnabled(self.config.is_modifiable('auto_connect'))
|
||||
|
||||
self.server_host.editingFinished.connect(self.set_server)
|
||||
self.server_port.editingFinished.connect(self.set_server)
|
||||
self.server_e.editingFinished.connect(self.set_server)
|
||||
self.autoconnect_cb.clicked.connect(self.set_server)
|
||||
self.autoconnect_cb.clicked.connect(self.update)
|
||||
|
||||
@@ -250,8 +246,7 @@ class NetworkChoiceLayout(object):
|
||||
grid.addWidget(HelpButton(msg), 0, 4)
|
||||
|
||||
grid.addWidget(QLabel(_('Server') + ':'), 1, 0)
|
||||
grid.addWidget(self.server_host, 1, 1, 1, 2)
|
||||
grid.addWidget(self.server_port, 1, 3)
|
||||
grid.addWidget(self.server_e, 1, 1, 1, 3)
|
||||
|
||||
label = _('Server peers') if network.is_connected() else _('Default Servers')
|
||||
grid.addWidget(QLabel(label), 2, 0, 1, 5)
|
||||
@@ -355,20 +350,18 @@ class NetworkChoiceLayout(object):
|
||||
def enable_set_server(self):
|
||||
if self.config.is_modifiable('server'):
|
||||
enabled = not self.autoconnect_cb.isChecked()
|
||||
self.server_host.setEnabled(enabled)
|
||||
self.server_port.setEnabled(enabled)
|
||||
self.server_e.setEnabled(enabled)
|
||||
self.servers_list.setEnabled(enabled)
|
||||
else:
|
||||
for w in [self.autoconnect_cb, self.server_host, self.server_port, self.servers_list]:
|
||||
for w in [self.autoconnect_cb, self.server_e, self.servers_list]:
|
||||
w.setEnabled(False)
|
||||
|
||||
def update(self):
|
||||
net_params = self.network.get_parameters()
|
||||
server = net_params.server
|
||||
proxy_config, auto_connect = net_params.proxy, net_params.auto_connect
|
||||
if not self.server_host.hasFocus() and not self.server_port.hasFocus():
|
||||
self.server_host.setText(server.host)
|
||||
self.server_port.setText(str(server.port))
|
||||
if not self.server_e.hasFocus():
|
||||
self.server_e.setText(server.net_addr_str())
|
||||
self.autoconnect_cb.setChecked(auto_connect)
|
||||
|
||||
interface = self.network.interface
|
||||
@@ -425,33 +418,13 @@ class NetworkChoiceLayout(object):
|
||||
self.network.run_from_another_thread(self.network.follow_chain_given_server(server))
|
||||
self.update()
|
||||
|
||||
def change_server(self, host, protocol):
|
||||
pp = self.servers.get(host, constants.net.DEFAULT_PORTS)
|
||||
if protocol and protocol not in protocol_letters:
|
||||
protocol = None
|
||||
if protocol:
|
||||
port = pp.get(protocol)
|
||||
if port is None:
|
||||
protocol = None
|
||||
if not protocol:
|
||||
if 's' in pp.keys():
|
||||
protocol = 's'
|
||||
port = pp.get(protocol)
|
||||
else:
|
||||
protocol = list(pp.keys())[0]
|
||||
port = pp.get(protocol)
|
||||
self.server_host.setText(host)
|
||||
self.server_port.setText(port)
|
||||
|
||||
def accept(self):
|
||||
pass
|
||||
|
||||
def set_server(self):
|
||||
net_params = self.network.get_parameters()
|
||||
try:
|
||||
server = ServerAddr(host=str(self.server_host.text()),
|
||||
port=str(self.server_port.text()),
|
||||
protocol=net_params.server.protocol)
|
||||
server = ServerAddr.from_str_with_inference(str(self.server_e.text()))
|
||||
except Exception:
|
||||
return
|
||||
net_params = net_params._replace(server=server,
|
||||
|
||||
Reference in New Issue
Block a user