Browse Source

lnwatcher: use generic callbacks

master
ThomasV 6 years ago
parent
commit
782f9ed273
  1. 20
      electrum/lnwatcher.py

20
electrum/lnwatcher.py

@ -138,7 +138,7 @@ class LNWatcher(AddressSynchronizer):
def __init__(self, network: 'Network'): def __init__(self, network: 'Network'):
AddressSynchronizer.__init__(self, WalletDB({}, manual_upgrades=False)) AddressSynchronizer.__init__(self, WalletDB({}, manual_upgrades=False))
self.config = network.config self.config = network.config
self.channels = {} self.callbacks = {} # address -> lambda: coroutine
self.network = network self.network = network
util.register_callback( util.register_callback(
self.on_network_update, self.on_network_update,
@ -157,12 +157,19 @@ class LNWatcher(AddressSynchronizer):
def add_channel(self, outpoint: str, address: str) -> None: def add_channel(self, outpoint: str, address: str) -> None:
assert isinstance(outpoint, str) assert isinstance(outpoint, str)
assert isinstance(address, str) assert isinstance(address, str)
self.add_address(address) cb = lambda: self.check_onchain_situation(address, outpoint)
self.channels[address] = outpoint self.add_callback(address, cb)
async def unwatch_channel(self, address, funding_outpoint): async def unwatch_channel(self, address, funding_outpoint):
self.logger.info(f'unwatching {funding_outpoint}') self.logger.info(f'unwatching {funding_outpoint}')
self.channels.pop(address, None) self.remove_callback(address)
def remove_callback(self, address):
self.callbacks.pop(address, None)
def add_callback(self, address, callback):
self.add_address(address)
self.callbacks[address] = callback
@log_exceptions @log_exceptions
async def on_network_update(self, event, *args): async def on_network_update(self, event, *args):
@ -172,9 +179,8 @@ class LNWatcher(AddressSynchronizer):
if not self.synchronizer: if not self.synchronizer:
self.logger.info("synchronizer not set yet") self.logger.info("synchronizer not set yet")
return return
channels_items = list(self.channels.items()) # copy for address, callback in list(self.callbacks.items()):
for address, outpoint in channels_items: await callback()
await self.check_onchain_situation(address, outpoint)
async def check_onchain_situation(self, address, funding_outpoint): async def check_onchain_situation(self, address, funding_outpoint):
# early return if address has not been added yet # early return if address has not been added yet

Loading…
Cancel
Save