1
0

EventListener class to handle callbacks

and QtEventListener for Qt
This commit is contained in:
ThomasV
2022-06-16 12:05:05 +02:00
committed by SomberNight
parent 55f46fb61e
commit dbf055de9a
14 changed files with 293 additions and 248 deletions

View File

@@ -19,6 +19,7 @@ from electrum import util
from electrum.util import (profiler, InvalidPassword, send_exception_to_crash_reporter,
format_satoshis, format_satoshis_plain, format_fee_satoshis,
maybe_extract_bolt11_invoice, parse_max_spend)
from electrum.util import EventListener, event_listener
from electrum.invoices import PR_PAID, PR_FAILED, Invoice
from electrum import blockchain
from electrum.network import Network, TxBroadcastError, BestEffortRequestFailed
@@ -99,7 +100,7 @@ if TYPE_CHECKING:
from electrum.paymentrequest import PaymentRequest
class ElectrumWindow(App, Logger):
class ElectrumWindow(App, Logger, EventListener):
electrum_config = ObjectProperty(None)
language = StringProperty('en')
@@ -252,21 +253,25 @@ class ElectrumWindow(App, Logger):
if self.history_screen:
self.history_screen.update()
def on_quotes(self, d):
@event_listener
def on_event_on_quotes(self):
self.logger.info("on_quotes")
self._trigger_update_status()
self._trigger_update_history()
def on_history(self, d):
@event_listener
def on_event_on_history(self):
self.logger.info("on_history")
if self.wallet:
self.wallet.clear_coin_price_cache()
self._trigger_update_history()
def on_fee_histogram(self, *args):
@event_listener
def on_event_fee_histogram(self, *args):
self._trigger_update_history()
def on_request_status(self, event, wallet, key, status):
@event_listener
def on_event_request_status(self, wallet, key, status):
if wallet != self.wallet:
return
req = self.wallet.receive_requests.get(key)
@@ -283,7 +288,8 @@ class ElectrumWindow(App, Logger):
self.show_info(_('Payment Received') + '\n' + key)
self._trigger_update_history()
def on_invoice_status(self, event, wallet, key):
@event_listener
def on_event_invoice_status(self, wallet, key):
if wallet != self.wallet:
return
req = self.wallet.get_invoice(key)
@@ -299,14 +305,16 @@ class ElectrumWindow(App, Logger):
if self.invoice_popup and self.invoice_popup.key == key:
self.invoice_popup.update_status()
def on_payment_succeeded(self, event, wallet, key):
@event_listener
def on_event_payment_succeeded(self, wallet, key):
if wallet != self.wallet:
return
description = self.wallet.get_label(key)
self.show_info(_('Payment succeeded') + '\n\n' + description)
self._trigger_update_history()
def on_payment_failed(self, event, wallet, key, reason):
@event_listener
def on_event_payment_failed(self, wallet, key, reason):
if wallet != self.wallet:
return
self.show_info(_('Payment failed') + '\n\n' + reason)
@@ -647,25 +655,7 @@ class ElectrumWindow(App, Logger):
mactivity = PythonActivity.mActivity
self.on_new_intent(mactivity.getIntent())
activity.bind(on_new_intent=self.on_new_intent)
# connect callbacks
if self.network:
interests = ['wallet_updated', 'network_updated', 'blockchain_updated',
'status', 'new_transaction', 'verified']
util.register_callback(self.on_network_event, interests)
util.register_callback(self.on_fee, ['fee'])
util.register_callback(self.on_fee_histogram, ['fee_histogram'])
util.register_callback(self.on_quotes, ['on_quotes'])
util.register_callback(self.on_history, ['on_history'])
util.register_callback(self.on_channels, ['channels_updated'])
util.register_callback(self.on_channel, ['channel'])
util.register_callback(self.on_invoice_status, ['invoice_status'])
util.register_callback(self.on_request_status, ['request_status'])
util.register_callback(self.on_payment_failed, ['payment_failed'])
util.register_callback(self.on_payment_succeeded, ['payment_succeeded'])
util.register_callback(self.on_channel_db, ['channel_db'])
util.register_callback(self.set_num_peers, ['gossip_peers'])
util.register_callback(self.set_unknown_channels, ['unknown_channels'])
self.register_callbacks()
if self.network and self.electrum_config.get('auto_connect') is None:
self.popup_dialog("first_screen")
# load_wallet_on_start will be called later, after initial network setup is completed
@@ -677,14 +667,17 @@ class ElectrumWindow(App, Logger):
if uri:
self.set_URI(uri)
def on_channel_db(self, event, num_nodes, num_channels, num_policies):
@event_listener
def on_event_channel_db(self, num_nodes, num_channels, num_policies):
self.lightning_gossip_num_nodes = num_nodes
self.lightning_gossip_num_channels = num_channels
def set_num_peers(self, event, num_peers):
@event_listener
def on_event_gossip_peers(self, num_peers):
self.lightning_gossip_num_peers = num_peers
def set_unknown_channels(self, event, unknown):
@event_listener
def on_event_unknown_channels(self, unknown):
self.lightning_gossip_num_queries = unknown
def get_wallet_path(self):
@@ -818,11 +811,13 @@ class ElectrumWindow(App, Logger):
delete_gossip)
d.open()
def on_channel(self, evt, wallet, chan):
@event_listener
def on_event_channel(self, wallet, chan):
if self._channels_dialog:
Clock.schedule_once(lambda dt: self._channels_dialog.update())
def on_channels(self, evt, wallet):
@event_listener
def on_event_channels(self, wallet):
if self._channels_dialog:
Clock.schedule_once(lambda dt: self._channels_dialog.update())
@@ -904,23 +899,32 @@ class ElectrumWindow(App, Logger):
self.proxy_config = net_params.proxy or {}
self.update_proxy_str(self.proxy_config)
def on_network_event(self, event, *args):
self.logger.info('network event: '+ event)
if event == 'network_updated':
self._trigger_update_interfaces()
self._trigger_update_status()
elif event == 'wallet_updated':
self._trigger_update_wallet()
self._trigger_update_status()
elif event == 'blockchain_updated':
# to update number of confirmations in history
self._trigger_update_wallet()
elif event == 'status':
self._trigger_update_status()
elif event == 'new_transaction':
self._trigger_update_wallet()
elif event == 'verified':
self._trigger_update_wallet()
@event_listener
def on_event_network_updated(self):
self._trigger_update_interfaces()
self._trigger_update_status()
@event_listener
def on_event_wallet_updated(self, *args):
self._trigger_update_wallet()
self._trigger_update_status()
@event_listener
def on_event_blockchain_updated(self, *args):
# to update number of confirmations in history
self._trigger_update_wallet()
@event_listener
def on_event_status(self, *args):
self._trigger_update_status()
@event_listener
def on_event_new_transaction(self, *args):
self._trigger_update_wallet()
@event_listener
def on_event_verified(self, *args):
self._trigger_update_wallet()
@profiler
def load_wallet(self, wallet: 'Abstract_Wallet'):
@@ -1265,7 +1269,8 @@ class ElectrumWindow(App, Logger):
target, tooltip, dyn = self.electrum_config.get_fee_target()
self.fee_status = target
def on_fee(self, event, *arg):
@event_listener
def on_event_fee(self, *arg):
self.set_fee_status()
def protected(self, msg, f, args):