From 26534094dbc902ca3e831b95391133fca5a51c37 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Mon, 17 Oct 2022 15:46:36 +0200 Subject: [PATCH] qml: invoicemodel and requestmodel update invoice status via event listener --- electrum/gui/qml/qeinvoicelistmodel.py | 34 +++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/electrum/gui/qml/qeinvoicelistmodel.py b/electrum/gui/qml/qeinvoicelistmodel.py index a56d24479..2727d4aba 100644 --- a/electrum/gui/qml/qeinvoicelistmodel.py +++ b/electrum/gui/qml/qeinvoicelistmodel.py @@ -7,6 +7,7 @@ from electrum.logging import get_logger from electrum.util import Satoshis, format_time from electrum.invoices import Invoice +from .util import QtEventListener, qt_event_listener from .qetypes import QEAmount class QEAbstractInvoiceListModel(QAbstractListModel): @@ -52,7 +53,6 @@ class QEAbstractInvoiceListModel(QAbstractListModel): invoices = [] for invoice in self.get_invoice_list(): item = self.invoice_to_model(invoice) - #self._logger.debug(str(item)) invoices.append(item) self.clear() @@ -128,12 +128,29 @@ class QEAbstractInvoiceListModel(QAbstractListModel): raise Exception('provide impl') -class QEInvoiceListModel(QEAbstractInvoiceListModel): +class QEInvoiceListModel(QEAbstractInvoiceListModel, QtEventListener): def __init__(self, wallet, parent=None): super().__init__(wallet, parent) + self.register_callbacks() + self.destroyed.connect(lambda: self.on_destroy()) _logger = get_logger(__name__) + def on_destroy(self): + self.unregister_callbacks() + + @qt_event_listener + def on_event_invoice_status(self, wallet, key): + if wallet == self.wallet: + self._logger.debug('invoice status update for key %s' % key) + # FIXME event doesn't pass the new status, so we need to retrieve + invoice = self.wallet.get_invoice(key) + if invoice: + status = self.wallet.get_invoice_status(invoice) + self.updateInvoice(key, status) + else: + self._logger.debug(f'No invoice found for key {key}') + def invoice_to_model(self, invoice: Invoice): item = super().invoice_to_model(invoice) item['type'] = 'invoice' @@ -150,12 +167,23 @@ class QEInvoiceListModel(QEAbstractInvoiceListModel): def get_invoice_as_dict(self, invoice: Invoice): return self.wallet.export_invoice(invoice) -class QERequestListModel(QEAbstractInvoiceListModel): +class QERequestListModel(QEAbstractInvoiceListModel, QtEventListener): def __init__(self, wallet, parent=None): super().__init__(wallet, parent) + self.register_callbacks() + self.destroyed.connect(lambda: self.on_destroy()) _logger = get_logger(__name__) + def on_destroy(self): + self.unregister_callbacks() + + @qt_event_listener + def on_event_request_status(self, wallet, key, status): + if wallet == self.wallet: + self._logger.debug('request status update for key %s' % key) + self.updateRequest(key, status) + def invoice_to_model(self, invoice: Invoice): item = super().invoice_to_model(invoice) item['type'] = 'request'