1
0

qml: add expiry timers to update status string in InvoiceDialog and ReceiveDialog

This commit is contained in:
Sander van Grieken
2023-02-14 11:36:13 +01:00
parent 292ce35945
commit 995754e523
4 changed files with 67 additions and 29 deletions

View File

@@ -2,14 +2,14 @@ import threading
import asyncio
from urllib.parse import urlparse
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, Q_ENUMS
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, Q_ENUMS, QTimer
from electrum import bitcoin
from electrum import lnutil
from electrum.i18n import _
from electrum.invoices import Invoice
from electrum.invoices import (PR_UNPAID, PR_EXPIRED, PR_UNKNOWN, PR_PAID, PR_INFLIGHT,
PR_FAILED, PR_ROUTING, PR_UNCONFIRMED)
PR_FAILED, PR_ROUTING, PR_UNCONFIRMED, LN_EXPIRY_NEVER)
from electrum.lnaddr import LnInvoiceException
from electrum.logging import get_logger
from electrum.transaction import PartialTxOutput
@@ -20,6 +20,7 @@ from electrum.bitcoin import COIN
from .qetypes import QEAmount
from .qewallet import QEWallet
from .util import status_update_timer_interval
class QEInvoice(QObject):
class Type:
@@ -140,6 +141,10 @@ class QEInvoiceParser(QEInvoice):
self._amount = QEAmount()
self._userinfo = ''
self._timer = QTimer(self)
self._timer.setSingleShot(True)
self._timer.timeout.connect(self.updateStatusString)
self.clear()
@pyqtProperty(int, notify=invoiceChanged)
@@ -190,6 +195,10 @@ class QEInvoiceParser(QEInvoice):
self.determine_can_pay()
self.invoiceChanged.emit()
@pyqtProperty('quint64', notify=invoiceChanged)
def time(self):
return self._effectiveInvoice.time if self._effectiveInvoice else 0
@pyqtProperty('quint64', notify=invoiceChanged)
def expiration(self):
return self._effectiveInvoice.exp if self._effectiveInvoice else 0
@@ -268,6 +277,21 @@ class QEInvoiceParser(QEInvoice):
self.invoiceChanged.emit()
self.statusChanged.emit()
self.set_status_timer()
def set_status_timer(self):
if self.status != PR_EXPIRED:
if self.expiration > 0 and self.expiration != LN_EXPIRY_NEVER:
interval = status_update_timer_interval(self.time + self.expiration)
if interval > 0:
self._timer.setInterval(interval) # msec
self._timer.start()
@pyqtSlot()
def updateStatusString(self):
self.statusChanged.emit()
self.set_status_timer()
def determine_can_pay(self):
self.canPay = False
self.userinfo = ''