Merge pull request #8741 from accumulator/labels_update
add labels_received callback and update labels even when set for item
This commit is contained in:
@@ -7,6 +7,7 @@ from electrum.logging import get_logger
|
|||||||
from electrum.util import Satoshis
|
from electrum.util import Satoshis
|
||||||
|
|
||||||
from .qetypes import QEAmount
|
from .qetypes import QEAmount
|
||||||
|
from .util import qt_event_listener, QtEventListener
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from electrum.wallet import Abstract_Wallet
|
from electrum.wallet import Abstract_Wallet
|
||||||
@@ -102,7 +103,7 @@ class QEAddressCoinFilterProxyModel(QSortFilterProxyModel):
|
|||||||
self.filterTextChanged.emit()
|
self.filterTextChanged.emit()
|
||||||
|
|
||||||
|
|
||||||
class QEAddressCoinListModel(QAbstractListModel):
|
class QEAddressCoinListModel(QAbstractListModel, QtEventListener):
|
||||||
_logger = get_logger(__name__)
|
_logger = get_logger(__name__)
|
||||||
|
|
||||||
# define listmodel rolemap
|
# define listmodel rolemap
|
||||||
@@ -118,9 +119,20 @@ class QEAddressCoinListModel(QAbstractListModel):
|
|||||||
self._items = []
|
self._items = []
|
||||||
self._filterModel = None
|
self._filterModel = None
|
||||||
|
|
||||||
|
self.register_callbacks()
|
||||||
|
self.destroyed.connect(lambda: self.on_destroy())
|
||||||
|
|
||||||
self._dirty = True
|
self._dirty = True
|
||||||
self.initModel()
|
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):
|
def rowCount(self, index):
|
||||||
return len(self._items)
|
return len(self._items)
|
||||||
|
|
||||||
@@ -185,8 +197,9 @@ class QEAddressCoinListModel(QAbstractListModel):
|
|||||||
|
|
||||||
# initial model data
|
# initial model data
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def initModel(self):
|
@pyqtSlot(bool)
|
||||||
if not self._dirty:
|
def initModel(self, force: bool = False):
|
||||||
|
if not self._dirty and not force:
|
||||||
return
|
return
|
||||||
|
|
||||||
r_addresses = self.wallet.get_receiving_addresses()
|
r_addresses = self.wallet.get_receiving_addresses()
|
||||||
|
|||||||
@@ -81,6 +81,11 @@ class QETransactionListModel(QAbstractListModel, QtEventListener):
|
|||||||
roles = [self._ROLE_RMAP['date']]
|
roles = [self._ROLE_RMAP['date']]
|
||||||
self.dataChanged.emit(index, index, roles)
|
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):
|
def rowCount(self, index):
|
||||||
return len(self.tx_history)
|
return len(self.tx_history)
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
|
|||||||
saveTxSuccess = pyqtSignal([str], arguments=['txid'])
|
saveTxSuccess = pyqtSignal([str], arguments=['txid'])
|
||||||
saveTxError = pyqtSignal([str, str, str], arguments=['txid', 'code', 'message'])
|
saveTxError = pyqtSignal([str, str, str], arguments=['txid', 'code', 'message'])
|
||||||
importChannelBackupFailed = pyqtSignal([str], arguments=['message'])
|
importChannelBackupFailed = pyqtSignal([str], arguments=['message'])
|
||||||
labelsUpdated = pyqtSignal()
|
|
||||||
otpRequested = pyqtSignal()
|
otpRequested = pyqtSignal()
|
||||||
otpSuccess = pyqtSignal()
|
otpSuccess = pyqtSignal()
|
||||||
otpFailed = pyqtSignal([str, str], arguments=['code', 'message'])
|
otpFailed = pyqtSignal([str, str], arguments=['code', 'message'])
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from typing import Union, TYPE_CHECKING
|
|||||||
|
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
|
from electrum import util
|
||||||
from electrum.plugin import BasePlugin, hook
|
from electrum.plugin import BasePlugin, hook
|
||||||
from electrum.crypto import aes_encrypt_with_iv, aes_decrypt_with_iv
|
from electrum.crypto import aes_encrypt_with_iv, aes_decrypt_with_iv
|
||||||
from electrum.i18n import _
|
from electrum.i18n import _
|
||||||
@@ -140,7 +141,7 @@ class LabelsPlugin(BasePlugin):
|
|||||||
if response["labels"] is None or len(response["labels"]) == 0:
|
if response["labels"] is None or len(response["labels"]) == 0:
|
||||||
self.logger.info('no new labels')
|
self.logger.info('no new labels')
|
||||||
return
|
return
|
||||||
#self.logger.debug(f"labels received {response!r}")
|
|
||||||
self.logger.info(f'received {len(response["labels"])} labels')
|
self.logger.info(f'received {len(response["labels"])} labels')
|
||||||
result = {}
|
result = {}
|
||||||
for label in response["labels"]:
|
for label in response["labels"]:
|
||||||
@@ -159,14 +160,14 @@ class LabelsPlugin(BasePlugin):
|
|||||||
result[key] = value
|
result[key] = value
|
||||||
|
|
||||||
for key, value in result.items():
|
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)
|
self.set_nonce(wallet, response["nonce"] + 1)
|
||||||
|
util.trigger_callback('labels_received', wallet, result)
|
||||||
self.on_pulled(wallet)
|
self.on_pulled(wallet)
|
||||||
|
|
||||||
def on_pulled(self, wallet: 'Abstract_Wallet') -> None:
|
def on_pulled(self, wallet: 'Abstract_Wallet') -> None:
|
||||||
raise NotImplementedError()
|
pass
|
||||||
|
|
||||||
@ignore_exceptions
|
@ignore_exceptions
|
||||||
@log_exceptions
|
@log_exceptions
|
||||||
|
|||||||
@@ -113,11 +113,8 @@ class Plugin(LabelsPlugin):
|
|||||||
threading.Thread(target=pull_thread, args=[wallet]).start()
|
threading.Thread(target=pull_thread, args=[wallet]).start()
|
||||||
|
|
||||||
def on_pulled(self, wallet):
|
def on_pulled(self, wallet):
|
||||||
self.logger.info('on pulled')
|
|
||||||
_wallet = QEWallet.getInstanceFor(wallet)
|
_wallet = QEWallet.getInstanceFor(wallet)
|
||||||
self.logger.debug('wallet ' + ('found' if _wallet else 'not found'))
|
self.logger.debug('wallet ' + ('found' if _wallet else 'not found'))
|
||||||
if _wallet:
|
|
||||||
_wallet.labelsUpdated.emit()
|
|
||||||
|
|
||||||
@hook
|
@hook
|
||||||
def init_qml(self, app):
|
def init_qml(self, app):
|
||||||
|
|||||||
Reference in New Issue
Block a user