From e3b3f04afe4452ba0cbbc59aea69e32df120ca57 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Tue, 25 Oct 2022 16:45:27 +0200 Subject: [PATCH] qml: refresh address list on new transaction by setting dirty flag --- electrum/gui/qml/components/Addresses.qml | 3 +++ electrum/gui/qml/qeaddresslistmodel.py | 10 ++++++++++ electrum/gui/qml/qewallet.py | 2 ++ 3 files changed, 15 insertions(+) diff --git a/electrum/gui/qml/components/Addresses.qml b/electrum/gui/qml/components/Addresses.qml index daef18775..6da4040c7 100644 --- a/electrum/gui/qml/components/Addresses.qml +++ b/electrum/gui/qml/components/Addresses.qml @@ -169,4 +169,7 @@ Pane { } } + Component.onCompleted: { + Daemon.currentWallet.addressModel.init_model() + } } diff --git a/electrum/gui/qml/qeaddresslistmodel.py b/electrum/gui/qml/qeaddresslistmodel.py index 1a8881bad..d6f508de5 100644 --- a/electrum/gui/qml/qeaddresslistmodel.py +++ b/electrum/gui/qml/qeaddresslistmodel.py @@ -16,6 +16,7 @@ class QEAddressListModel(QAbstractListModel): def __init__(self, wallet: 'Abstract_Wallet', parent=None): super().__init__(parent) self.wallet = wallet + self.setDirty() self.init_model() _logger = get_logger(__name__) @@ -60,9 +61,16 @@ class QEAddressListModel(QAbstractListModel): item['held'] = self.wallet.is_frozen_address(address) return item + @pyqtSlot() + def setDirty(self): + self._dirty = True + # initial model data @pyqtSlot() def init_model(self): + if not self._dirty: + return + r_addresses = self.wallet.get_receiving_addresses() c_addresses = self.wallet.get_change_addresses() n_addresses = len(r_addresses) + len(c_addresses) if self.wallet.use_change else 0 @@ -85,6 +93,8 @@ class QEAddressListModel(QAbstractListModel): i = i + 1 self.endInsertRows() + self._dirty = False + @pyqtSlot(str) def update_address(self, address): i = 0 diff --git a/electrum/gui/qml/qewallet.py b/electrum/gui/qml/qewallet.py index 8448cdae5..a24b115e5 100644 --- a/electrum/gui/qml/qewallet.py +++ b/electrum/gui/qml/qewallet.py @@ -171,7 +171,9 @@ class QEWallet(AuthMixin, QObject, QtEventListener): @qt_event_listener def on_event_new_transaction(self, wallet, tx): if wallet == self.wallet: + self._logger.info(f'new transaction {tx.txid()}') self.add_tx_notification(tx) + self.addressModel.setDirty() self.historyModel.init_model() # TODO: be less dramatic @qt_event_listener