network: use IntEnum for connection states. Export user-visible strings in get_connection_status_for_GUI
This commit is contained in:
@@ -38,7 +38,7 @@ Pane {
|
||||
InfoTextArea {
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: constants.paddingLarge
|
||||
visible: Daemon.currentWallet.synchronizing || Network.server_status != 'connected'
|
||||
visible: Daemon.currentWallet.synchronizing || !Network.is_connected
|
||||
text: Daemon.currentWallet.synchronizing
|
||||
? qsTr('Your wallet is not synchronized. The displayed balance may be inaccurate.')
|
||||
: qsTr('Your wallet is not connected to an Electrum server. The displayed balance may be outdated.')
|
||||
|
||||
@@ -31,7 +31,7 @@ Item {
|
||||
GridLayout {
|
||||
id: balanceLayout
|
||||
columns: 3
|
||||
opacity: Daemon.currentWallet.synchronizing || Network.server_status != 'connected' ? 0 : 1
|
||||
opacity: Daemon.currentWallet.synchronizing || !Network.is_connected ? 0 : 1
|
||||
|
||||
Label {
|
||||
font.pixelSize: constants.fontSizeXLarge
|
||||
@@ -129,7 +129,7 @@ Item {
|
||||
}
|
||||
|
||||
Label {
|
||||
opacity: Daemon.currentWallet.synchronizing && Network.server_status == 'connected' ? 1 : 0
|
||||
opacity: Daemon.currentWallet.synchronizing && Network.is_connected ? 1 : 0
|
||||
anchors.centerIn: balancePane
|
||||
text: Daemon.currentWallet.synchronizingProgress
|
||||
color: Material.accentColor
|
||||
@@ -137,9 +137,9 @@ Item {
|
||||
}
|
||||
|
||||
Label {
|
||||
opacity: Network.server_status != 'connected' ? 1 : 0
|
||||
opacity: !Network.is_connected ? 1 : 0
|
||||
anchors.centerIn: balancePane
|
||||
text: qsTr('Disconnected')
|
||||
text: Network.server_status
|
||||
color: Material.accentColor
|
||||
font.pixelSize: constants.fontSizeLarge
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ Image {
|
||||
sourceSize.width: constants.iconSizeMedium
|
||||
sourceSize.height: constants.iconSizeMedium
|
||||
|
||||
property bool connected: Network.server_status == 'connected'
|
||||
property bool connected: Network.is_connected
|
||||
property bool lagging: connected && Network.isLagging
|
||||
property bool fork: connected && Network.chaintips > 1
|
||||
property bool syncing: connected && Daemon.currentWallet && Daemon.currentWallet.synchronizing
|
||||
|
||||
@@ -35,6 +35,7 @@ class QENetwork(QObject, QtEventListener):
|
||||
|
||||
_height = 0
|
||||
_server = ""
|
||||
_is_connected = False
|
||||
_server_status = ""
|
||||
_network_status = ""
|
||||
_chaintips = 1
|
||||
@@ -95,7 +96,11 @@ class QENetwork(QObject, QtEventListener):
|
||||
self._logger.debug('network_status updated: %s' % network_status)
|
||||
self._network_status = network_status
|
||||
self.statusChanged.emit()
|
||||
server_status = self.network.connection_status
|
||||
is_connected = self.network.is_connected()
|
||||
if self._is_connected != is_connected:
|
||||
self._is_connected = is_connected
|
||||
self.statusChanged.emit()
|
||||
server_status = self.network.get_connection_status_for_GUI()
|
||||
if self._server_status != server_status:
|
||||
self._logger.debug('server_status updated: %s' % server_status)
|
||||
self._server_status = server_status
|
||||
@@ -209,7 +214,7 @@ class QENetwork(QObject, QtEventListener):
|
||||
@pyqtProperty(str, notify=statusChanged)
|
||||
def serverWithStatus(self):
|
||||
server = self._server
|
||||
if self._server_status != "connected": # connecting or disconnected
|
||||
if not self.network.is_connected(): # connecting or disconnected
|
||||
return f"{server} (connecting...)"
|
||||
return server
|
||||
|
||||
@@ -219,7 +224,11 @@ class QENetwork(QObject, QtEventListener):
|
||||
|
||||
@pyqtProperty(str, notify=statusChanged)
|
||||
def server_status(self):
|
||||
return self._server_status
|
||||
return self.network.get_connection_status_for_GUI()
|
||||
|
||||
@pyqtProperty(bool, notify=statusChanged)
|
||||
def is_connected(self):
|
||||
return self._is_connected
|
||||
|
||||
@pyqtProperty(int, notify=chaintipsChanged)
|
||||
def chaintips(self):
|
||||
|
||||
@@ -37,6 +37,7 @@ import concurrent
|
||||
from concurrent import futures
|
||||
import copy
|
||||
import functools
|
||||
from enum import IntEnum
|
||||
|
||||
import aiorpcx
|
||||
from aiorpcx import ignore_after
|
||||
@@ -82,6 +83,12 @@ NUM_RECENT_SERVERS = 20
|
||||
T = TypeVar('T')
|
||||
|
||||
|
||||
class ConnectionState(IntEnum):
|
||||
DISCONNECTED = 0
|
||||
CONNECTING = 1
|
||||
CONNECTED = 2
|
||||
|
||||
|
||||
def parse_servers(result: Sequence[Tuple[str, str, List[str]]]) -> Dict[str, dict]:
|
||||
"""Convert servers list (from protocol method "server.peers.subscribe") into dict format.
|
||||
Also validate values, such as IP addresses and ports.
|
||||
@@ -330,7 +337,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
|
||||
# Dump network messages (all interfaces). Set at runtime from the console.
|
||||
self.debug = False
|
||||
|
||||
self._set_status('disconnected')
|
||||
self._set_status(ConnectionState.DISCONNECTED)
|
||||
self._has_ever_managed_to_connect_to_server = False
|
||||
self._was_started = False
|
||||
|
||||
@@ -432,7 +439,15 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
|
||||
return interface is not None and interface.is_connected_and_ready()
|
||||
|
||||
def is_connecting(self):
|
||||
return self.connection_status == 'connecting'
|
||||
return self.connection_status == ConnectionState.CONNECTING
|
||||
|
||||
def get_connection_status_for_GUI(self):
|
||||
ConnectionStates = {
|
||||
ConnectionState.DISCONNECTED: _('Disconnected'),
|
||||
ConnectionState.CONNECTING: _('Connecting'),
|
||||
ConnectionState.CONNECTED: _('Connected'),
|
||||
}
|
||||
return ConnectionStates[self.connection_status]
|
||||
|
||||
async def _request_server_info(self, interface: 'Interface'):
|
||||
await interface.ready
|
||||
@@ -731,7 +746,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
|
||||
util.trigger_callback('default_server_changed')
|
||||
self.default_server_changed_event.set()
|
||||
self.default_server_changed_event.clear()
|
||||
self._set_status('connected')
|
||||
self._set_status(ConnectionState.CONNECTED)
|
||||
util.trigger_callback('network_updated')
|
||||
if blockchain_updated:
|
||||
util.trigger_callback('blockchain_updated')
|
||||
@@ -769,7 +784,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
|
||||
We distinguish by whether it is in self.interfaces.'''
|
||||
if not interface: return
|
||||
if interface.server == self.default_server:
|
||||
self._set_status('disconnected')
|
||||
self._set_status(ConnectionState.DISCONNECTED)
|
||||
await self._close_interface(interface)
|
||||
util.trigger_callback('network_updated')
|
||||
|
||||
@@ -792,7 +807,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
|
||||
self._connecting_ifaces.add(server)
|
||||
if server == self.default_server:
|
||||
self.logger.info(f"connecting to {server} as new interface")
|
||||
self._set_status('connecting')
|
||||
self._set_status(ConnectionState.CONNECTING)
|
||||
self._trying_addr_now(server)
|
||||
|
||||
interface = Interface(network=self, server=server, proxy=self.proxy)
|
||||
|
||||
Reference in New Issue
Block a user