1
0

qml: invoicemodel and requestmodel update invoice status via event listener

This commit is contained in:
Sander van Grieken
2022-10-17 15:46:36 +02:00
parent 0c163a5322
commit 26534094db

View File

@@ -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'