1
0

qml: network status improvements

create NetworkStatusIndicator component
add forks/chaintips and lagging property to qenetwork
add synchronizing and synchronizing progress properties to qewallet
Note: new wallet synchronizing is not picked up in UI yet, missing
an is_up_to_date event at the start still..
This commit is contained in:
Sander van Grieken
2022-07-21 19:41:26 +02:00
parent 9b48a97f65
commit 623de58b7b
5 changed files with 140 additions and 31 deletions

View File

@@ -10,6 +10,7 @@ class QENetwork(QObject, QtEventListener):
def __init__(self, network, parent=None):
super().__init__(parent)
self.network = network
self._height = network.get_local_height() # init here, update event can take a while
self.register_callbacks()
_logger = get_logger(__name__)
@@ -22,12 +23,16 @@ class QENetwork(QObject, QtEventListener):
proxyChanged = pyqtSignal()
statusChanged = pyqtSignal()
feeHistogramUpdated = pyqtSignal()
chaintipsChanged = pyqtSignal()
isLaggingChanged = pyqtSignal()
# shared signal for static properties
dataChanged = pyqtSignal()
_height = 0
_status = ""
_chaintips = 1
_islagging = False
_fee_histogram = []
@event_listener
@@ -35,7 +40,7 @@ class QENetwork(QObject, QtEventListener):
self.networkUpdated.emit()
@event_listener
def on_event_blockchain_updated(self, *args):
def on_event_blockchain_updated(self):
if self._height != self.network.get_local_height():
self._height = self.network.get_local_height()
self._logger.debug('new height: %d' % self._height)
@@ -57,6 +62,16 @@ class QENetwork(QObject, QtEventListener):
if self._status != self.network.connection_status:
self._status = self.network.connection_status
self.statusChanged.emit()
chains = len(self.network.get_blockchains())
if chains != self._chaintips:
self._logger.debug('chain tips # changed: ' + chains)
self._chaintips = chains
self.chaintipsChanged.emit()
server_lag = self.network.get_local_height() - self.network.get_server_height()
if self._islagging ^ (server_lag > 1):
self._logger.debug('lagging changed: ' + (server_lag > 1))
self._islagging = server_lag > 1
self.isLaggingChanged.emit()
@event_listener
def on_event_fee_histogram(self, histogram):
@@ -68,7 +83,7 @@ class QENetwork(QObject, QtEventListener):
def height(self):
return self._height
@pyqtProperty('QString', notify=defaultServerChanged)
@pyqtProperty(str, notify=defaultServerChanged)
def server(self):
return str(self.network.get_parameters().server)
@@ -83,15 +98,23 @@ class QENetwork(QObject, QtEventListener):
net_params = net_params._replace(server=server)
self.network.run_from_another_thread(self.network.set_parameters(net_params))
@pyqtProperty('QString', notify=statusChanged)
@pyqtProperty(str, notify=statusChanged)
def status(self):
return self._status
@pyqtProperty(int, notify=chaintipsChanged)
def chaintips(self):
return self._chaintips
@pyqtProperty(bool, notify=isLaggingChanged)
def isLagging(self):
return self._islagging
@pyqtProperty(bool, notify=dataChanged)
def isTestNet(self):
return constants.net.TESTNET
@pyqtProperty('QString', notify=dataChanged)
@pyqtProperty(str, notify=dataChanged)
def networkName(self):
return constants.net.__name__.replace('Bitcoin','')