Browse Source

Merge pull request #8741 from accumulator/labels_update

add labels_received callback and update labels even when set for item
master
ThomasV 2 years ago committed by GitHub
parent
commit
14ec36dba1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      electrum/gui/qml/qeaddresslistmodel.py
  2. 5
      electrum/gui/qml/qetransactionlistmodel.py
  3. 1
      electrum/gui/qml/qewallet.py
  4. 9
      electrum/plugins/labels/labels.py
  5. 3
      electrum/plugins/labels/qml.py

19
electrum/gui/qml/qeaddresslistmodel.py

@ -7,6 +7,7 @@ from electrum.logging import get_logger
from electrum.util import Satoshis
from .qetypes import QEAmount
from .util import qt_event_listener, QtEventListener
if TYPE_CHECKING:
from electrum.wallet import Abstract_Wallet
@ -102,7 +103,7 @@ class QEAddressCoinFilterProxyModel(QSortFilterProxyModel):
self.filterTextChanged.emit()
class QEAddressCoinListModel(QAbstractListModel):
class QEAddressCoinListModel(QAbstractListModel, QtEventListener):
_logger = get_logger(__name__)
# define listmodel rolemap
@ -118,9 +119,20 @@ class QEAddressCoinListModel(QAbstractListModel):
self._items = []
self._filterModel = None
self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy())
self._dirty = True
self.initModel()
def on_destroy(self):
self.unregister_callbacks()
@qt_event_listener
def on_event_labels_received(self, wallet, labels):
if wallet == self.wallet:
self.setDirty()
def rowCount(self, index):
return len(self._items)
@ -185,8 +197,9 @@ class QEAddressCoinListModel(QAbstractListModel):
# initial model data
@pyqtSlot()
def initModel(self):
if not self._dirty:
@pyqtSlot(bool)
def initModel(self, force: bool = False):
if not self._dirty and not force:
return
r_addresses = self.wallet.get_receiving_addresses()

5
electrum/gui/qml/qetransactionlistmodel.py

@ -81,6 +81,11 @@ class QETransactionListModel(QAbstractListModel, QtEventListener):
roles = [self._ROLE_RMAP['date']]
self.dataChanged.emit(index, index, roles)
@qt_event_listener
def on_event_labels_received(self, wallet, labels):
if wallet == self.wallet:
self.initModel(True) # TODO: be less dramatic
def rowCount(self, index):
return len(self.tx_history)

1
electrum/gui/qml/qewallet.py

@ -72,7 +72,6 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
saveTxSuccess = pyqtSignal([str], arguments=['txid'])
saveTxError = pyqtSignal([str, str, str], arguments=['txid', 'code', 'message'])
importChannelBackupFailed = pyqtSignal([str], arguments=['message'])
labelsUpdated = pyqtSignal()
otpRequested = pyqtSignal()
otpSuccess = pyqtSignal()
otpFailed = pyqtSignal([str, str], arguments=['code', 'message'])

9
electrum/plugins/labels/labels.py

@ -7,6 +7,7 @@ from typing import Union, TYPE_CHECKING
import base64
from electrum import util
from electrum.plugin import BasePlugin, hook
from electrum.crypto import aes_encrypt_with_iv, aes_decrypt_with_iv
from electrum.i18n import _
@ -140,7 +141,7 @@ class LabelsPlugin(BasePlugin):
if response["labels"] is None or len(response["labels"]) == 0:
self.logger.info('no new labels')
return
#self.logger.debug(f"labels received {response!r}")
self.logger.info(f'received {len(response["labels"])} labels')
result = {}
for label in response["labels"]:
@ -159,14 +160,14 @@ class LabelsPlugin(BasePlugin):
result[key] = value
for key, value in result.items():
if force or not wallet._get_label(key):
wallet._set_label(key, value)
wallet._set_label(key, value)
self.set_nonce(wallet, response["nonce"] + 1)
util.trigger_callback('labels_received', wallet, result)
self.on_pulled(wallet)
def on_pulled(self, wallet: 'Abstract_Wallet') -> None:
raise NotImplementedError()
pass
@ignore_exceptions
@log_exceptions

3
electrum/plugins/labels/qml.py

@ -113,11 +113,8 @@ class Plugin(LabelsPlugin):
threading.Thread(target=pull_thread, args=[wallet]).start()
def on_pulled(self, wallet):
self.logger.info('on pulled')
_wallet = QEWallet.getInstanceFor(wallet)
self.logger.debug('wallet ' + ('found' if _wallet else 'not found'))
if _wallet:
_wallet.labelsUpdated.emit()
@hook
def init_qml(self, app):

Loading…
Cancel
Save