Browse Source

network triggers: rm 'updated'; more fine-grained instead

rm 'interfaces'
add 'wallet_updated', add 'network_updated'
3.3.3.1
SomberNight 6 years ago
parent
commit
af63913189
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 11
      electrum/gui/kivy/main_window.py
  2. 13
      electrum/gui/qt/main_window.py
  3. 2
      electrum/gui/qt/network_dialog.py
  4. 4
      electrum/gui/stdio.py
  5. 2
      electrum/gui/text.py
  6. 8
      electrum/interface.py
  7. 15
      electrum/network.py
  8. 2
      electrum/synchronizer.py

11
electrum/gui/kivy/main_window.py

@ -490,7 +490,7 @@ class ElectrumWindow(App):
activity.bind(on_new_intent=self.on_new_intent)
# connect callbacks
if self.network:
interests = ['updated', 'status', 'new_transaction', 'verified', 'interfaces']
interests = ['wallet_updated', 'network_updated', 'status', 'new_transaction', 'verified']
self.network.register_callback(self.on_network_event, interests)
self.network.register_callback(self.on_fee, ['fee'])
self.network.register_callback(self.on_fee_histogram, ['fee_histogram'])
@ -669,17 +669,16 @@ class ElectrumWindow(App):
def on_network_event(self, event, *args):
Logger.info('network event: '+ event)
if event == 'interfaces':
if event == 'network_updated':
self._trigger_update_interfaces()
elif event == 'updated':
self._trigger_update_status()
elif event == 'wallet_updated':
self._trigger_update_wallet()
self._trigger_update_status()
elif event == 'status':
self._trigger_update_status()
elif event == 'new_transaction':
wallet, tx = args
if wallet == self.wallet:
self._trigger_update_wallet()
self._trigger_update_wallet()
elif event == 'verified':
self._trigger_update_wallet()

13
electrum/gui/qt/main_window.py

@ -188,7 +188,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
# network callbacks
if self.network:
self.network_signal.connect(self.on_network_qt)
interests = ['updated', 'new_transaction', 'status',
interests = ['wallet_updated', 'network_updated', 'new_transaction', 'status',
'banner', 'verified', 'fee', 'fee_histogram']
# To avoid leaking references to "self" that prevent the
# window from being GC-ed when closed, callbacks should be
@ -295,10 +295,15 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
self.show_error(str(exc_info[1]))
def on_network(self, event, *args):
if event == 'updated':
self.need_update.set()
if event == 'wallet_updated':
wallet = args[0]
if wallet == self.wallet:
self.need_update.set()
self.network_signal.emit('status', None)
elif event == 'network_updated':
self.gui_object.network_updated_signal_obj.network_updated_signal \
.emit(event, args)
self.network_signal.emit('status', None)
elif event == 'new_transaction':
wallet, tx = args
if wallet == self.wallet:
@ -766,9 +771,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
self.balance_label.setText(text)
self.status_button.setIcon( icon )
def update_wallet(self):
self.update_status()
if self.wallet.up_to_date or not self.network or not self.network.is_connected():
self.update_tabs()

2
electrum/gui/qt/network_dialog.py

@ -52,7 +52,7 @@ class NetworkDialog(QDialog):
vbox.addLayout(Buttons(CloseButton(self)))
self.network_updated_signal_obj.network_updated_signal.connect(
self.on_update)
network.register_callback(self.on_network, ['updated', 'interfaces'])
network.register_callback(self.on_network, ['network_updated'])
def on_network(self, event, *args):
self.network_updated_signal_obj.network_updated_signal.emit(event, args)

4
electrum/gui/stdio.py

@ -37,7 +37,7 @@ class ElectrumGui:
self.wallet.start_network(self.network)
self.contacts = self.wallet.contacts
self.network.register_callback(self.on_network, ['updated', 'banner'])
self.network.register_callback(self.on_network, ['wallet_updated', 'network_updated', 'banner'])
self.commands = [_("[h] - displays this help text"), \
_("[i] - display transaction history"), \
_("[o] - enter payment order"), \
@ -50,7 +50,7 @@ class ElectrumGui:
self.num_commands = len(self.commands)
def on_network(self, event, *args):
if event == 'updated':
if event in ['wallet_updated', 'network_updated']:
self.updated()
elif event == 'banner':
self.print_banner()

2
electrum/gui/text.py

@ -62,7 +62,7 @@ class ElectrumGui:
self.history = None
if self.network:
self.network.register_callback(self.update, ['updated'])
self.network.register_callback(self.update, ['wallet_updated', 'network_updated'])
self.tab_names = [_("History"), _("Send"), _("Receive"), _("Addresses"), _("Contacts"), _("Banner")]
self.num_tabs = len(self.tab_names)

8
electrum/interface.py

@ -375,7 +375,6 @@ class Interface(PrintError):
header_queue = asyncio.Queue()
await self.session.subscribe('blockchain.headers.subscribe', [], header_queue)
while True:
self.network.notify('updated')
item = await header_queue.get()
raw_header = item[0]
height = raw_header['height']
@ -394,6 +393,7 @@ class Interface(PrintError):
# in the simple case, height == self.tip+1
if height <= self.tip:
await self.sync_until(height)
self.network.trigger_callback('network_updated')
self.network.switch_lagging_interface()
async def sync_until(self, height, next_height=None):
@ -406,10 +406,10 @@ class Interface(PrintError):
could_connect, num_headers = await self.request_chunk(height, next_height)
if not could_connect:
if height <= constants.net.max_checkpoint():
raise Exception('server chain conflicts with checkpoints or genesis')
raise GracefulDisconnect('server chain conflicts with checkpoints or genesis')
last, height = await self.step(height)
continue
self.network.notify('updated')
self.network.trigger_callback('network_updated')
height = (height // 2016 * 2016) + num_headers
assert height <= next_height+1, (height, self.tip)
last = 'catchup'
@ -536,7 +536,7 @@ class Interface(PrintError):
if chain or can_connect:
return False
if checkp:
raise Exception("server chain conflicts with checkpoints")
raise GracefulDisconnect("server chain conflicts with checkpoints")
return True
bad, bad_header = height, header

15
electrum/network.py

@ -367,12 +367,10 @@ class Network(PrintError):
value = self.config.fee_estimates
elif key == 'fee_histogram':
value = self.config.mempool_fees
elif key == 'updated':
value = (self.get_local_height(), self.get_server_height())
elif key == 'servers':
value = self.get_servers()
elif key == 'interfaces':
value = self.get_interfaces()
else:
raise Exception('unexpected trigger key {}'.format(key))
return value
def notify(self, key):
@ -547,7 +545,7 @@ class Network(PrintError):
self.switch_to_interface(server_str)
else:
self.switch_lagging_interface()
self.notify('updated')
self.trigger_callback('network_updated')
def switch_to_random_interface(self):
'''Switch to a random connected server other than the current one'''
@ -603,8 +601,7 @@ class Network(PrintError):
i.group.spawn(self.request_server_info(i)))
self.trigger_callback('default_server_changed')
self.set_status('connected')
self.notify('updated')
self.notify('interfaces')
self.trigger_callback('network_updated')
@with_interface_lock
def close_interface(self, interface):
@ -633,7 +630,7 @@ class Network(PrintError):
self.set_status('disconnected')
if server in self.interfaces:
self.close_interface(self.interfaces[server])
self.notify('interfaces')
self.trigger_callback('network_updated')
@aiosafe
async def new_interface(self, server):
@ -664,7 +661,7 @@ class Network(PrintError):
self.switch_to_interface(server)
self.add_recent_server(server)
self.notify('interfaces')
self.trigger_callback('network_updated')
def init_headers_file(self):
b = blockchain.blockchains[0]

2
electrum/synchronizer.py

@ -177,4 +177,4 @@ class Synchronizer(PrintError):
up_to_date = self.is_up_to_date()
if up_to_date != self.wallet.is_up_to_date():
self.wallet.set_up_to_date(up_to_date)
self.wallet.network.trigger_callback('updated')
self.wallet.network.trigger_callback('wallet_updated', self.wallet)

Loading…
Cancel
Save