mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-03 02:35:20 +00:00
network triggers: rm 'updated'; more fine-grained instead
rm 'interfaces' add 'wallet_updated', add 'network_updated'
This commit is contained in:
parent
fef15f9c02
commit
af63913189
8 changed files with 28 additions and 29 deletions
|
@ -490,7 +490,7 @@ class ElectrumWindow(App):
|
||||||
activity.bind(on_new_intent=self.on_new_intent)
|
activity.bind(on_new_intent=self.on_new_intent)
|
||||||
# connect callbacks
|
# connect callbacks
|
||||||
if self.network:
|
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_network_event, interests)
|
||||||
self.network.register_callback(self.on_fee, ['fee'])
|
self.network.register_callback(self.on_fee, ['fee'])
|
||||||
self.network.register_callback(self.on_fee_histogram, ['fee_histogram'])
|
self.network.register_callback(self.on_fee_histogram, ['fee_histogram'])
|
||||||
|
@ -669,17 +669,16 @@ class ElectrumWindow(App):
|
||||||
|
|
||||||
def on_network_event(self, event, *args):
|
def on_network_event(self, event, *args):
|
||||||
Logger.info('network event: '+ event)
|
Logger.info('network event: '+ event)
|
||||||
if event == 'interfaces':
|
if event == 'network_updated':
|
||||||
self._trigger_update_interfaces()
|
self._trigger_update_interfaces()
|
||||||
elif event == 'updated':
|
self._trigger_update_status()
|
||||||
|
elif event == 'wallet_updated':
|
||||||
self._trigger_update_wallet()
|
self._trigger_update_wallet()
|
||||||
self._trigger_update_status()
|
self._trigger_update_status()
|
||||||
elif event == 'status':
|
elif event == 'status':
|
||||||
self._trigger_update_status()
|
self._trigger_update_status()
|
||||||
elif event == 'new_transaction':
|
elif event == 'new_transaction':
|
||||||
wallet, tx = args
|
self._trigger_update_wallet()
|
||||||
if wallet == self.wallet:
|
|
||||||
self._trigger_update_wallet()
|
|
||||||
elif event == 'verified':
|
elif event == 'verified':
|
||||||
self._trigger_update_wallet()
|
self._trigger_update_wallet()
|
||||||
|
|
||||||
|
|
|
@ -188,7 +188,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
||||||
# network callbacks
|
# network callbacks
|
||||||
if self.network:
|
if self.network:
|
||||||
self.network_signal.connect(self.on_network_qt)
|
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']
|
'banner', 'verified', 'fee', 'fee_histogram']
|
||||||
# To avoid leaking references to "self" that prevent the
|
# To avoid leaking references to "self" that prevent the
|
||||||
# window from being GC-ed when closed, callbacks should be
|
# 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]))
|
self.show_error(str(exc_info[1]))
|
||||||
|
|
||||||
def on_network(self, event, *args):
|
def on_network(self, event, *args):
|
||||||
if event == 'updated':
|
if event == 'wallet_updated':
|
||||||
self.need_update.set()
|
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 \
|
self.gui_object.network_updated_signal_obj.network_updated_signal \
|
||||||
.emit(event, args)
|
.emit(event, args)
|
||||||
|
self.network_signal.emit('status', None)
|
||||||
elif event == 'new_transaction':
|
elif event == 'new_transaction':
|
||||||
wallet, tx = args
|
wallet, tx = args
|
||||||
if wallet == self.wallet:
|
if wallet == self.wallet:
|
||||||
|
@ -766,9 +771,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
||||||
self.balance_label.setText(text)
|
self.balance_label.setText(text)
|
||||||
self.status_button.setIcon( icon )
|
self.status_button.setIcon( icon )
|
||||||
|
|
||||||
|
|
||||||
def update_wallet(self):
|
def update_wallet(self):
|
||||||
self.update_status()
|
|
||||||
if self.wallet.up_to_date or not self.network or not self.network.is_connected():
|
if self.wallet.up_to_date or not self.network or not self.network.is_connected():
|
||||||
self.update_tabs()
|
self.update_tabs()
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ class NetworkDialog(QDialog):
|
||||||
vbox.addLayout(Buttons(CloseButton(self)))
|
vbox.addLayout(Buttons(CloseButton(self)))
|
||||||
self.network_updated_signal_obj.network_updated_signal.connect(
|
self.network_updated_signal_obj.network_updated_signal.connect(
|
||||||
self.on_update)
|
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):
|
def on_network(self, event, *args):
|
||||||
self.network_updated_signal_obj.network_updated_signal.emit(event, args)
|
self.network_updated_signal_obj.network_updated_signal.emit(event, args)
|
||||||
|
|
|
@ -37,7 +37,7 @@ class ElectrumGui:
|
||||||
self.wallet.start_network(self.network)
|
self.wallet.start_network(self.network)
|
||||||
self.contacts = self.wallet.contacts
|
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"), \
|
self.commands = [_("[h] - displays this help text"), \
|
||||||
_("[i] - display transaction history"), \
|
_("[i] - display transaction history"), \
|
||||||
_("[o] - enter payment order"), \
|
_("[o] - enter payment order"), \
|
||||||
|
@ -50,7 +50,7 @@ class ElectrumGui:
|
||||||
self.num_commands = len(self.commands)
|
self.num_commands = len(self.commands)
|
||||||
|
|
||||||
def on_network(self, event, *args):
|
def on_network(self, event, *args):
|
||||||
if event == 'updated':
|
if event in ['wallet_updated', 'network_updated']:
|
||||||
self.updated()
|
self.updated()
|
||||||
elif event == 'banner':
|
elif event == 'banner':
|
||||||
self.print_banner()
|
self.print_banner()
|
||||||
|
|
|
@ -62,7 +62,7 @@ class ElectrumGui:
|
||||||
self.history = None
|
self.history = None
|
||||||
|
|
||||||
if self.network:
|
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.tab_names = [_("History"), _("Send"), _("Receive"), _("Addresses"), _("Contacts"), _("Banner")]
|
||||||
self.num_tabs = len(self.tab_names)
|
self.num_tabs = len(self.tab_names)
|
||||||
|
|
|
@ -375,7 +375,6 @@ class Interface(PrintError):
|
||||||
header_queue = asyncio.Queue()
|
header_queue = asyncio.Queue()
|
||||||
await self.session.subscribe('blockchain.headers.subscribe', [], header_queue)
|
await self.session.subscribe('blockchain.headers.subscribe', [], header_queue)
|
||||||
while True:
|
while True:
|
||||||
self.network.notify('updated')
|
|
||||||
item = await header_queue.get()
|
item = await header_queue.get()
|
||||||
raw_header = item[0]
|
raw_header = item[0]
|
||||||
height = raw_header['height']
|
height = raw_header['height']
|
||||||
|
@ -394,6 +393,7 @@ class Interface(PrintError):
|
||||||
# in the simple case, height == self.tip+1
|
# in the simple case, height == self.tip+1
|
||||||
if height <= self.tip:
|
if height <= self.tip:
|
||||||
await self.sync_until(height)
|
await self.sync_until(height)
|
||||||
|
self.network.trigger_callback('network_updated')
|
||||||
self.network.switch_lagging_interface()
|
self.network.switch_lagging_interface()
|
||||||
|
|
||||||
async def sync_until(self, height, next_height=None):
|
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)
|
could_connect, num_headers = await self.request_chunk(height, next_height)
|
||||||
if not could_connect:
|
if not could_connect:
|
||||||
if height <= constants.net.max_checkpoint():
|
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)
|
last, height = await self.step(height)
|
||||||
continue
|
continue
|
||||||
self.network.notify('updated')
|
self.network.trigger_callback('network_updated')
|
||||||
height = (height // 2016 * 2016) + num_headers
|
height = (height // 2016 * 2016) + num_headers
|
||||||
assert height <= next_height+1, (height, self.tip)
|
assert height <= next_height+1, (height, self.tip)
|
||||||
last = 'catchup'
|
last = 'catchup'
|
||||||
|
@ -536,7 +536,7 @@ class Interface(PrintError):
|
||||||
if chain or can_connect:
|
if chain or can_connect:
|
||||||
return False
|
return False
|
||||||
if checkp:
|
if checkp:
|
||||||
raise Exception("server chain conflicts with checkpoints")
|
raise GracefulDisconnect("server chain conflicts with checkpoints")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
bad, bad_header = height, header
|
bad, bad_header = height, header
|
||||||
|
|
|
@ -367,12 +367,10 @@ class Network(PrintError):
|
||||||
value = self.config.fee_estimates
|
value = self.config.fee_estimates
|
||||||
elif key == 'fee_histogram':
|
elif key == 'fee_histogram':
|
||||||
value = self.config.mempool_fees
|
value = self.config.mempool_fees
|
||||||
elif key == 'updated':
|
|
||||||
value = (self.get_local_height(), self.get_server_height())
|
|
||||||
elif key == 'servers':
|
elif key == 'servers':
|
||||||
value = self.get_servers()
|
value = self.get_servers()
|
||||||
elif key == 'interfaces':
|
else:
|
||||||
value = self.get_interfaces()
|
raise Exception('unexpected trigger key {}'.format(key))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def notify(self, key):
|
def notify(self, key):
|
||||||
|
@ -547,7 +545,7 @@ class Network(PrintError):
|
||||||
self.switch_to_interface(server_str)
|
self.switch_to_interface(server_str)
|
||||||
else:
|
else:
|
||||||
self.switch_lagging_interface()
|
self.switch_lagging_interface()
|
||||||
self.notify('updated')
|
self.trigger_callback('network_updated')
|
||||||
|
|
||||||
def switch_to_random_interface(self):
|
def switch_to_random_interface(self):
|
||||||
'''Switch to a random connected server other than the current one'''
|
'''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)))
|
i.group.spawn(self.request_server_info(i)))
|
||||||
self.trigger_callback('default_server_changed')
|
self.trigger_callback('default_server_changed')
|
||||||
self.set_status('connected')
|
self.set_status('connected')
|
||||||
self.notify('updated')
|
self.trigger_callback('network_updated')
|
||||||
self.notify('interfaces')
|
|
||||||
|
|
||||||
@with_interface_lock
|
@with_interface_lock
|
||||||
def close_interface(self, interface):
|
def close_interface(self, interface):
|
||||||
|
@ -633,7 +630,7 @@ class Network(PrintError):
|
||||||
self.set_status('disconnected')
|
self.set_status('disconnected')
|
||||||
if server in self.interfaces:
|
if server in self.interfaces:
|
||||||
self.close_interface(self.interfaces[server])
|
self.close_interface(self.interfaces[server])
|
||||||
self.notify('interfaces')
|
self.trigger_callback('network_updated')
|
||||||
|
|
||||||
@aiosafe
|
@aiosafe
|
||||||
async def new_interface(self, server):
|
async def new_interface(self, server):
|
||||||
|
@ -664,7 +661,7 @@ class Network(PrintError):
|
||||||
self.switch_to_interface(server)
|
self.switch_to_interface(server)
|
||||||
|
|
||||||
self.add_recent_server(server)
|
self.add_recent_server(server)
|
||||||
self.notify('interfaces')
|
self.trigger_callback('network_updated')
|
||||||
|
|
||||||
def init_headers_file(self):
|
def init_headers_file(self):
|
||||||
b = blockchain.blockchains[0]
|
b = blockchain.blockchains[0]
|
||||||
|
|
|
@ -177,4 +177,4 @@ class Synchronizer(PrintError):
|
||||||
up_to_date = self.is_up_to_date()
|
up_to_date = self.is_up_to_date()
|
||||||
if up_to_date != self.wallet.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.set_up_to_date(up_to_date)
|
||||||
self.wallet.network.trigger_callback('updated')
|
self.wallet.network.trigger_callback('wallet_updated', self.wallet)
|
||||||
|
|
Loading…
Add table
Reference in a new issue