Browse Source

qml: update server in network dialog on more events

"defaultServerChanged" was not the right event to listen to. It is only sent
*after* the interface is ready.
"network_updated" is a bit overkill as it is triggered every time any of the
interfaces goes down or a new one is created, still, better to trigger a
few more times than to be stale.
In particular, if there is no internet connection, the server string is now
updated as expected, instead of showing stale values and ignoring trying
to change servers.
Also, a further state that did not exist before: just like it worked in
the kivy GUI, if the main server was changed but it is not yet connected,
instead of showing the old server still, we now show f"{new_server} (connecting...)".
master
SomberNight 3 years ago
parent
commit
3149ccf729
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 2
      electrum/gui/qml/components/NetworkOverview.qml
  2. 33
      electrum/gui/qml/qenetwork.py

2
electrum/gui/qml/components/NetworkOverview.qml

@ -55,7 +55,7 @@ Pane {
color: Material.accentColor
}
Label {
text: Network.server
text: Network.serverWithStatus
wrapMode: Text.WrapAnywhere
Layout.fillWidth: true
}

33
electrum/gui/qml/qenetwork.py

@ -21,7 +21,6 @@ class QENetwork(QObject, QtEventListener):
networkUpdated = pyqtSignal()
blockchainUpdated = pyqtSignal()
heightChanged = pyqtSignal([int], arguments=['height'])
defaultServerChanged = pyqtSignal()
proxySet = pyqtSignal()
proxyChanged = pyqtSignal()
statusChanged = pyqtSignal()
@ -34,6 +33,7 @@ class QENetwork(QObject, QtEventListener):
dataChanged = pyqtSignal()
_height = 0
_server = ""
_server_status = ""
_network_status = ""
_chaintips = 1
@ -59,7 +59,7 @@ class QENetwork(QObject, QtEventListener):
@event_listener
def on_event_network_updated(self, *args):
self.networkUpdated.emit()
self._update_network_status()
self._update_status()
@event_listener
def on_event_blockchain_updated(self):
@ -71,7 +71,7 @@ class QENetwork(QObject, QtEventListener):
@event_listener
def on_event_default_server_changed(self, *args):
self.defaultServerChanged.emit()
self._update_status()
@event_listener
def on_event_proxy_set(self, *args):
@ -79,15 +79,15 @@ class QENetwork(QObject, QtEventListener):
self.proxySet.emit()
self.proxyTorChanged.emit()
def _update_network_status(self):
def _update_status(self):
server = str(self.network.get_parameters().server)
if self._server != server:
self._server = server
self.statusChanged.emit()
network_status = self.network.get_status()
if self._network_status != network_status:
self._network_status = network_status
self.statusChanged.emit()
@event_listener
def on_event_status(self, *args):
self._update_network_status()
server_status = self.network.connection_status
self._logger.debug('server_status updated: %s' % server_status)
if self._server_status != server_status:
@ -104,6 +104,10 @@ class QENetwork(QObject, QtEventListener):
self._islagging = server_lag > 1
self.isLaggingChanged.emit()
@event_listener
def on_event_status(self, *args):
self._update_status()
@event_listener
def on_event_fee_histogram(self, histogram):
self._logger.debug(f'fee histogram updated: {repr(histogram)}')
@ -167,12 +171,12 @@ class QENetwork(QObject, QtEventListener):
def height(self):
return self._height
@pyqtProperty(str, notify=defaultServerChanged)
@pyqtProperty(str, notify=statusChanged)
def server(self):
return str(self.network.get_parameters().server)
return self._server
@server.setter
def server(self, server):
def server(self, server: str):
net_params = self.network.get_parameters()
try:
server = ServerAddr.from_str_with_inference(server)
@ -182,6 +186,13 @@ class QENetwork(QObject, QtEventListener):
net_params = net_params._replace(server=server, auto_connect=self._qeconfig.autoConnect)
self.network.run_from_another_thread(self.network.set_parameters(net_params))
@pyqtProperty(str, notify=statusChanged)
def serverWithStatus(self):
server = self._server
if self._server_status != "connected": # connecting or disconnected
return f"{server} (connecting...)"
return server
@pyqtProperty(str, notify=statusChanged)
def status(self):
return self._network_status

Loading…
Cancel
Save