qml: request details hooks to backend callback, not to QEWallet signal.
Also fix destructor issue
This commit is contained in:
@@ -32,6 +32,7 @@ ElDialog {
|
|||||||
padding: 0
|
padding: 0
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
|
visible: !_ispaid
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
spacing: 0
|
spacing: 0
|
||||||
|
|
||||||
@@ -50,7 +51,6 @@ ElDialog {
|
|||||||
id: rootLayout
|
id: rootLayout
|
||||||
width: parent.width
|
width: parent.width
|
||||||
spacing: constants.paddingMedium
|
spacing: constants.paddingMedium
|
||||||
visible: !_ispaid
|
|
||||||
|
|
||||||
states: [
|
states: [
|
||||||
State {
|
State {
|
||||||
@@ -361,7 +361,6 @@ ElDialog {
|
|||||||
RequestDetails {
|
RequestDetails {
|
||||||
id: request
|
id: request
|
||||||
wallet: Daemon.currentWallet
|
wallet: Daemon.currentWallet
|
||||||
key: dialog.key
|
|
||||||
onDetailsChanged: {
|
onDetailsChanged: {
|
||||||
if (bolt11) {
|
if (bolt11) {
|
||||||
rootLayout.state = 'bolt11'
|
rootLayout.state = 'bolt11'
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ from electrum.invoices import (PR_UNPAID, PR_EXPIRED, PR_UNKNOWN, PR_PAID, PR_IN
|
|||||||
|
|
||||||
from .qewallet import QEWallet
|
from .qewallet import QEWallet
|
||||||
from .qetypes import QEAmount
|
from .qetypes import QEAmount
|
||||||
|
from .util import QtEventListener, event_listener
|
||||||
|
|
||||||
class QERequestDetails(QObject):
|
class QERequestDetails(QObject, QtEventListener):
|
||||||
|
|
||||||
class Status:
|
class Status:
|
||||||
Unpaid = PR_UNPAID
|
Unpaid = PR_UNPAID
|
||||||
@@ -32,17 +33,25 @@ class QERequestDetails(QObject):
|
|||||||
_amount = None
|
_amount = None
|
||||||
|
|
||||||
detailsChanged = pyqtSignal() # generic request properties changed signal
|
detailsChanged = pyqtSignal() # generic request properties changed signal
|
||||||
|
statusChanged = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
self.register_callbacks()
|
||||||
|
self.destroyed.connect(lambda: self.on_destroy())
|
||||||
|
|
||||||
def __del__(self):
|
def on_destroy(self):
|
||||||
if self._wallet:
|
self.unregister_callbacks()
|
||||||
self._wallet.requestStatusChanged.disconnect(self.updateRequestStatus)
|
|
||||||
if self._timer:
|
if self._timer:
|
||||||
self._timer.stop()
|
self._timer.stop()
|
||||||
self._timer = None
|
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()
|
walletChanged = pyqtSignal()
|
||||||
@pyqtProperty(QEWallet, notify=walletChanged)
|
@pyqtProperty(QEWallet, notify=walletChanged)
|
||||||
def wallet(self):
|
def wallet(self):
|
||||||
@@ -51,13 +60,8 @@ class QERequestDetails(QObject):
|
|||||||
@wallet.setter
|
@wallet.setter
|
||||||
def wallet(self, wallet: QEWallet):
|
def wallet(self, wallet: QEWallet):
|
||||||
if self._wallet != wallet:
|
if self._wallet != wallet:
|
||||||
if self._wallet:
|
|
||||||
self._wallet.requestStatusChanged.disconnect(self.updateRequestStatus)
|
|
||||||
self._wallet = wallet
|
self._wallet = wallet
|
||||||
self.walletChanged.emit()
|
self.walletChanged.emit()
|
||||||
|
|
||||||
wallet.requestStatusChanged.connect(self.updateRequestStatus)
|
|
||||||
|
|
||||||
self.initRequest()
|
self.initRequest()
|
||||||
|
|
||||||
keyChanged = pyqtSignal()
|
keyChanged = pyqtSignal()
|
||||||
@@ -116,13 +120,6 @@ class QERequestDetails(QObject):
|
|||||||
return self._req.get_bip21_URI() if self._req else ''
|
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):
|
def initRequest(self):
|
||||||
if self._wallet is None or self._key is None:
|
if self._wallet is None or self._key is None:
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user