From: ThomasV Date: Fri, 4 Oct 2013 17:27:50 +0000 (+0200) Subject: handle network.interface being None when network is disconnected X-Git-Url: https://git.novaco.in/?a=commitdiff_plain;h=a38298c5ee583625318ce72f0e6d13254c62a88c;p=electrum-nvc.git handle network.interface being None when network is disconnected --- diff --git a/gui/qt/network_dialog.py b/gui/qt/network_dialog.py index f2d2f26..415b511 100644 --- a/gui/qt/network_dialog.py +++ b/gui/qt/network_dialog.py @@ -50,18 +50,16 @@ class NetworkDialog(QDialog): else: status = _("Not connected") - if interface.is_connected: + if network.is_connected(): status += "\n" + _("Main server:") + " %s"%(interface.host) else: status += "\n" + _("Disconnected from main server") - - server = interface.server else: import random status = _("Please choose a server.") + "\n" + _("Select 'Cancel' if you are offline.") - server = interface.server + server = network.default_server self.servers = network.get_servers() @@ -148,7 +146,7 @@ class NetworkDialog(QDialog): if not self.config.is_modifiable('proxy'): for w in [self.proxy_host, self.proxy_port, self.proxy_mode]: w.setEnabled(False) - proxy_config = interface.proxy if interface.proxy else { "mode":"none", "host":"localhost", "port":"8080"} + proxy_config = network.proxy if network.proxy else { "mode":"none", "host":"localhost", "port":"8080"} self.proxy_mode.setCurrentIndex(self.proxy_mode.findText(str(proxy_config.get("mode").upper()))) self.proxy_host.setText(proxy_config.get("host")) self.proxy_port.setText(proxy_config.get("port")) diff --git a/lib/blockchain.py b/lib/blockchain.py index ee6d99e..2c8337d 100644 --- a/lib/blockchain.py +++ b/lib/blockchain.py @@ -92,7 +92,11 @@ class Blockchain(threading.Thread): print_error("error", i.server) # todo: dismiss that server - h = self.servers_height.get(self.network.interface.server) + if self.network.is_connected(): + h = self.servers_height.get(self.network.interface.server) + else: + h = None + if h is not None and h < height - 1: print_error( "Server is lagging", height, h) if self.config.get('auto_cycle'): diff --git a/lib/network.py b/lib/network.py index 5bd505f..bdeb6a8 100644 --- a/lib/network.py +++ b/lib/network.py @@ -166,6 +166,11 @@ class Network(threading.Thread): return self.interface.is_connected + def wait_until_connected(self): + while not self.interface: + time.sleep(1) + self.interface.connect_event.wait() + def set_proxy(self, proxy): self.proxy = proxy @@ -175,7 +180,9 @@ class Network(threading.Thread): return # stop the interface in order to terminate subscriptions - self.interface.stop() + if self.interface: + self.interface.stop() + # notify gui self.trigger_callback('disconnecting') # start interface diff --git a/lib/wallet.py b/lib/wallet.py index e5a07db..d11eae7 100644 --- a/lib/wallet.py +++ b/lib/wallet.py @@ -1510,12 +1510,12 @@ class WalletSynchronizer(threading.Thread): self.running = True while self.is_running(): - interface = self.network.interface - if not interface.is_connected: + + if not self.network.is_connected(): print_error("synchronizer: waiting for interface") - interface.connect_event.wait() + self.network.wait_until_connected() - self.run_interface(interface) + self.run_interface(self.network.interface) def run_interface(self, interface):