Browse Source

qml: request details hooks to backend callback, not to QEWallet signal.

Also fix destructor issue
master
Sander van Grieken 3 years ago
parent
commit
ad2b01716c
  1. 3
      electrum/gui/qml/components/ReceiveDialog.qml
  2. 29
      electrum/gui/qml/qerequestdetails.py

3
electrum/gui/qml/components/ReceiveDialog.qml

@ -32,6 +32,7 @@ ElDialog {
padding: 0
ColumnLayout {
visible: !_ispaid
anchors.fill: parent
spacing: 0
@ -50,7 +51,6 @@ ElDialog {
id: rootLayout
width: parent.width
spacing: constants.paddingMedium
visible: !_ispaid
states: [
State {
@ -361,7 +361,6 @@ ElDialog {
RequestDetails {
id: request
wallet: Daemon.currentWallet
key: dialog.key
onDetailsChanged: {
if (bolt11) {
rootLayout.state = 'bolt11'

29
electrum/gui/qml/qerequestdetails.py

@ -8,8 +8,9 @@ from electrum.invoices import (PR_UNPAID, PR_EXPIRED, PR_UNKNOWN, PR_PAID, PR_IN
from .qewallet import QEWallet
from .qetypes import QEAmount
from .util import QtEventListener, event_listener
class QERequestDetails(QObject):
class QERequestDetails(QObject, QtEventListener):
class Status:
Unpaid = PR_UNPAID
@ -32,17 +33,25 @@ class QERequestDetails(QObject):
_amount = None
detailsChanged = pyqtSignal() # generic request properties changed signal
statusChanged = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy())
def __del__(self):
if self._wallet:
self._wallet.requestStatusChanged.disconnect(self.updateRequestStatus)
def on_destroy(self):
self.unregister_callbacks()
if self._timer:
self._timer.stop()
self._timer = None
@event_listener
def on_event_request_status(self, wallet, key, status):
if wallet == self._wallet.wallet and key == self._key:
self._logger.debug('request status %d for key %s' % (status, key))
self.statusChanged.emit()
walletChanged = pyqtSignal()
@pyqtProperty(QEWallet, notify=walletChanged)
def wallet(self):
@ -51,13 +60,8 @@ class QERequestDetails(QObject):
@wallet.setter
def wallet(self, wallet: QEWallet):
if self._wallet != wallet:
if self._wallet:
self._wallet.requestStatusChanged.disconnect(self.updateRequestStatus)
self._wallet = wallet
self.walletChanged.emit()
wallet.requestStatusChanged.connect(self.updateRequestStatus)
self.initRequest()
keyChanged = pyqtSignal()
@ -116,13 +120,6 @@ class QERequestDetails(QObject):
return self._req.get_bip21_URI() if self._req else ''
@pyqtSlot(str, int)
def updateRequestStatus(self, key, status):
if key == self._key:
self._logger.debug(f'request with key {key} updated status ({status})')
self.statusChanged.emit()
def initRequest(self):
if self._wallet is None or self._key is None:
return

Loading…
Cancel
Save