Browse Source

Save user-entered amount in invoice. fixes #8252.

Note that this allows users to save invoices that have an empty
amount, which is not allowed by the Qt GUI. Qt will complain at
pay time about empty amount if a lightning invoice without amount
is saved. With onchain invoices, Qt will create an onchain tx with
a zero output.
master
ThomasV 3 years ago
parent
commit
d7c5c40c1d
  1. 15
      electrum/gui/qml/components/InvoiceDialog.qml
  2. 8
      electrum/gui/qml/qeinvoice.py

15
electrum/gui/qml/components/InvoiceDialog.qml

@ -435,6 +435,9 @@ ElDialog {
enabled: invoice.canSave enabled: invoice.canSave
onClicked: { onClicked: {
app.stack.push(Qt.resolvedUrl('Invoices.qml')) app.stack.push(Qt.resolvedUrl('Invoices.qml'))
if (invoice.amount.isEmpty) {
invoice.amount = amountMax.checked ? MAX : Config.unitsToSats(amountBtc.text)
}
invoice.save_invoice() invoice.save_invoice()
dialog.close() dialog.close()
} }
@ -446,8 +449,18 @@ ElDialog {
icon.source: '../../icons/confirmed.png' icon.source: '../../icons/confirmed.png'
enabled: invoice.invoiceType != Invoice.Invalid && invoice.canPay enabled: invoice.invoiceType != Invoice.Invalid && invoice.canPay
onClicked: { onClicked: {
if (invoice_key == '') // save invoice if not retrieved from key if (invoice.amount.isEmpty) {
invoice.amount = amountMax.checked ? MAX : Config.unitsToSats(amountBtc.text)
if (invoice_key != '') {
// delete the existing invoice because this affects get_id()
invoice.wallet.delete_invoice(invoice_key)
invoice_key = ''
}
}
if (invoice_key == '') {
// save invoice if new or modified
invoice.save_invoice() invoice.save_invoice()
}
dialog.close() dialog.close()
doPay() // only signal here doPay() // only signal here
} }

8
electrum/gui/qml/qeinvoice.py

@ -313,8 +313,6 @@ class QEInvoiceParser(QEInvoice):
self.set_lnprops() self.set_lnprops()
self.canSave = True
self.determine_can_pay() self.determine_can_pay()
self.invoiceChanged.emit() self.invoiceChanged.emit()
@ -339,6 +337,7 @@ class QEInvoiceParser(QEInvoice):
def determine_can_pay(self): def determine_can_pay(self):
self.canPay = False self.canPay = False
self.canSave = False
self.userinfo = '' self.userinfo = ''
if not self.amountOverride.isEmpty: if not self.amountOverride.isEmpty:
@ -346,6 +345,8 @@ class QEInvoiceParser(QEInvoice):
else: else:
amount = self.amount amount = self.amount
self.canSave = True
if amount.isEmpty: # unspecified amount if amount.isEmpty: # unspecified amount
return return
@ -652,6 +653,8 @@ class QEUserEnteredPayment(QEInvoice):
self.validationError.emit('recipient', _('Invalid Bitcoin address')) self.validationError.emit('recipient', _('Invalid Bitcoin address'))
return return
self.canSave = True
if self._amount.isEmpty: if self._amount.isEmpty:
self.validationError.emit('amount', _('Invalid amount')) self.validationError.emit('amount', _('Invalid amount'))
return return
@ -659,7 +662,6 @@ class QEUserEnteredPayment(QEInvoice):
if self._amount.isMax: if self._amount.isMax:
self.canPay = True self.canPay = True
else: else:
self.canSave = True
if self.get_max_spendable_onchain() >= self._amount.satsInt: if self.get_max_spendable_onchain() >= self._amount.satsInt:
self.canPay = True self.canPay = True

Loading…
Cancel
Save