qml: split updating userinfo from determine_can_pay, check determine_can_pay also in event handlers
This commit is contained in:
@@ -170,12 +170,14 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
def on_event_payment_succeeded(self, wallet, key):
|
||||
if wallet == self._wallet.wallet and key == self.key:
|
||||
self.statusChanged.emit()
|
||||
self.determine_can_pay()
|
||||
self.userinfo = _('Paid!')
|
||||
|
||||
@event_listener
|
||||
def on_event_payment_failed(self, wallet, key, reason):
|
||||
if wallet == self._wallet.wallet and key == self.key:
|
||||
self.statusChanged.emit()
|
||||
self.determine_can_pay()
|
||||
self.userinfo = _('Payment failed: ') + reason
|
||||
|
||||
@event_listener
|
||||
@@ -183,6 +185,7 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
if wallet == self._wallet.wallet and key == self.key:
|
||||
self.statusChanged.emit()
|
||||
if status in [PR_INFLIGHT, PR_ROUTING]:
|
||||
self.determine_can_pay()
|
||||
self.userinfo = _('In progress...')
|
||||
|
||||
@pyqtProperty(int, notify=invoiceChanged)
|
||||
@@ -231,6 +234,7 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
if self._effectiveInvoice:
|
||||
self._effectiveInvoice.amount_msat = '!' if new_amount.isMax else int(new_amount.satsInt * 1000)
|
||||
|
||||
self.update_userinfo()
|
||||
self.determine_can_pay()
|
||||
self.invoiceChanged.emit()
|
||||
|
||||
@@ -242,12 +246,11 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
def amountOverride(self, new_amount):
|
||||
self._logger.debug(f'set new override amount {repr(new_amount)}')
|
||||
self._amountOverride.copyFrom(new_amount)
|
||||
|
||||
self.determine_can_pay()
|
||||
self.amountOverrideChanged.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def _on_amountoverride_value_changed(self):
|
||||
self.update_userinfo()
|
||||
self.determine_can_pay()
|
||||
|
||||
@pyqtProperty('quint64', notify=invoiceChanged)
|
||||
@@ -338,6 +341,7 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
|
||||
self.set_lnprops()
|
||||
|
||||
self.update_userinfo()
|
||||
self.determine_can_pay()
|
||||
|
||||
self.invoiceChanged.emit()
|
||||
@@ -353,6 +357,7 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
self._timer.setInterval(interval) # msec
|
||||
self._timer.start()
|
||||
else:
|
||||
self.update_userinfo()
|
||||
self.determine_can_pay() # status went to PR_EXPIRED
|
||||
|
||||
@pyqtSlot()
|
||||
@@ -360,9 +365,7 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
self.statusChanged.emit()
|
||||
self.set_status_timer()
|
||||
|
||||
def determine_can_pay(self):
|
||||
self.canPay = False
|
||||
self.canSave = False
|
||||
def update_userinfo(self):
|
||||
self.userinfo = ''
|
||||
|
||||
if not self.amountOverride.isEmpty:
|
||||
@@ -370,8 +373,6 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
else:
|
||||
amount = self.amount
|
||||
|
||||
self.canSave = True
|
||||
|
||||
if self.amount.isEmpty:
|
||||
self.userinfo = _('Enter the amount you want to send')
|
||||
|
||||
@@ -384,13 +385,9 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
lnaddr = self._effectiveInvoice._lnaddr
|
||||
if lnaddr.amount and amount.satsInt < lnaddr.amount * COIN:
|
||||
self.userinfo = _('Cannot pay less than the amount specified in the invoice')
|
||||
else:
|
||||
self.canPay = True
|
||||
elif self.address and self.get_max_spendable_onchain() > amount.satsInt:
|
||||
elif self.address and self.get_max_spendable_onchain() < amount.satsInt:
|
||||
# TODO: validate address?
|
||||
# TODO: subtract fee?
|
||||
self.canPay = True
|
||||
else:
|
||||
self.userinfo = _('Insufficient balance')
|
||||
else:
|
||||
self.userinfo = {
|
||||
@@ -402,13 +399,7 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
}[self.status]
|
||||
elif self.invoiceType == QEInvoice.Type.OnchainInvoice:
|
||||
if self.status in [PR_UNPAID, PR_FAILED]:
|
||||
if amount.isMax and self.get_max_spendable_onchain() > 0:
|
||||
# TODO: dust limit?
|
||||
self.canPay = True
|
||||
elif self.get_max_spendable_onchain() >= amount.satsInt:
|
||||
# TODO: subtract fee?
|
||||
self.canPay = True
|
||||
else:
|
||||
if not ((amount.isMax and self.get_max_spendable_onchain() > 0) or (self.get_max_spendable_onchain() >= amount.satsInt)):
|
||||
self.userinfo = _('Insufficient balance')
|
||||
else:
|
||||
self.userinfo = {
|
||||
@@ -418,6 +409,39 @@ class QEInvoiceParser(QEInvoice, QtEventListener):
|
||||
PR_UNKNOWN: _('Invoice has unknown status'),
|
||||
}[self.status]
|
||||
|
||||
def determine_can_pay(self):
|
||||
self.canPay = False
|
||||
self.canSave = False
|
||||
|
||||
if not self.amountOverride.isEmpty:
|
||||
amount = self.amountOverride
|
||||
else:
|
||||
amount = self.amount
|
||||
|
||||
self.canSave = True
|
||||
|
||||
if amount.isEmpty and self.status == PR_UNPAID: # unspecified amount
|
||||
return
|
||||
|
||||
if self.invoiceType == QEInvoice.Type.LightningInvoice:
|
||||
if self.status in [PR_UNPAID, PR_FAILED]:
|
||||
if self.get_max_spendable_lightning() >= amount.satsInt:
|
||||
lnaddr = self._effectiveInvoice._lnaddr
|
||||
if not (lnaddr.amount and amount.satsInt < lnaddr.amount * COIN):
|
||||
self.canPay = True
|
||||
elif self.address and self.get_max_spendable_onchain() > amount.satsInt:
|
||||
# TODO: validate address?
|
||||
# TODO: subtract fee?
|
||||
self.canPay = True
|
||||
elif self.invoiceType == QEInvoice.Type.OnchainInvoice:
|
||||
if self.status in [PR_UNPAID, PR_FAILED]:
|
||||
if amount.isMax and self.get_max_spendable_onchain() > 0:
|
||||
# TODO: dust limit?
|
||||
self.canPay = True
|
||||
elif self.get_max_spendable_onchain() >= amount.satsInt:
|
||||
# TODO: subtract fee?
|
||||
self.canPay = True
|
||||
|
||||
def setValidOnchainInvoice(self, invoice: Invoice):
|
||||
self._logger.debug('setValidOnchainInvoice')
|
||||
if invoice.is_lightning():
|
||||
|
||||
Reference in New Issue
Block a user