Browse Source

payment_identifier: fix _on_finalize params, fix lnurlp send comment instead of description,

refactor payment_identifier.get_invoice to standalone invoice_from_payment_identifier
master
Sander van Grieken 2 years ago
parent
commit
d15050a2bf
  1. 10
      electrum/gui/qt/send_tab.py
  2. 46
      electrum/payment_identifier.py

10
electrum/gui/qt/send_tab.py

@ -17,7 +17,8 @@ from electrum.util import NotEnoughFunds, NoDynamicFeeEstimates, parse_max_spend
from electrum.invoices import PR_PAID, Invoice, PR_BROADCASTING, PR_BROADCAST from electrum.invoices import PR_PAID, Invoice, PR_BROADCASTING, PR_BROADCAST
from electrum.transaction import Transaction, PartialTxInput, PartialTxOutput from electrum.transaction import Transaction, PartialTxInput, PartialTxOutput
from electrum.network import TxBroadcastError, BestEffortRequestFailed from electrum.network import TxBroadcastError, BestEffortRequestFailed
from electrum.payment_identifier import PaymentIdentifierState, PaymentIdentifierType, PaymentIdentifier from electrum.payment_identifier import PaymentIdentifierState, PaymentIdentifierType, PaymentIdentifier, \
invoice_from_payment_identifier
from .amountedit import AmountEdit, BTCAmountEdit, SizedFreezableLineEdit from .amountedit import AmountEdit, BTCAmountEdit, SizedFreezableLineEdit
from .paytoedit import InvalidPaymentIdentifier from .paytoedit import InvalidPaymentIdentifier
@ -25,6 +26,7 @@ from .util import (WaitingDialog, HelpLabel, MessageBoxMixin, EnterButton,
char_width_in_lineedit, get_iconname_camera, get_iconname_qrcode, char_width_in_lineedit, get_iconname_camera, get_iconname_qrcode,
read_QIcon, ColorScheme, icon_path) read_QIcon, ColorScheme, icon_path)
from .confirm_tx_dialog import ConfirmTxDialog from .confirm_tx_dialog import ConfirmTxDialog
from .invoice_list import InvoiceList
if TYPE_CHECKING: if TYPE_CHECKING:
from .main_window import ElectrumWindow from .main_window import ElectrumWindow
@ -161,7 +163,6 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
self.fiat_send_e.textEdited.connect(reset_max) self.fiat_send_e.textEdited.connect(reset_max)
self.invoices_label = QLabel(_('Invoices')) self.invoices_label = QLabel(_('Invoices'))
from .invoice_list import InvoiceList
self.invoice_list = InvoiceList(self) self.invoice_list = InvoiceList(self)
self.toolbar, menu = self.invoice_list.create_toolbar_with_menu('') self.toolbar, menu = self.invoice_list.create_toolbar_with_menu('')
@ -469,7 +470,8 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
self.show_error(_('No amount')) self.show_error(_('No amount'))
return return
invoice = self.payto_e.payment_identifier.get_invoice(amount_sat, self.get_message()) invoice = invoice_from_payment_identifier(
self.payto_e.payment_identifier, self.wallet, amount_sat, self.get_message())
if not invoice: if not invoice:
self.show_error('error getting invoice' + self.payto_e.payment_identifier.error) self.show_error('error getting invoice' + self.payto_e.payment_identifier.error)
return return
@ -517,7 +519,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
pi = self.payto_e.payment_identifier pi = self.payto_e.payment_identifier
if pi.need_finalize(): if pi.need_finalize():
self.prepare_for_send_tab_network_lookup() self.prepare_for_send_tab_network_lookup()
pi.finalize(amount_sat=self.get_amount(), comment=self.message_e.text(), pi.finalize(amount_sat=self.get_amount(), comment=self.comment_e.text(),
on_finished=self.finalize_done_signal.emit) on_finished=self.finalize_done_signal.emit)
return return
self.pending_invoice = self.read_invoice() self.pending_invoice = self.read_invoice()

46
electrum/payment_identifier.py

@ -370,7 +370,7 @@ class PaymentIdentifier(Logger):
on_finished: Callable[['PaymentIdentifier'], None] = None, on_finished: Callable[['PaymentIdentifier'], None] = None,
): ):
assert self._state == PaymentIdentifierState.LNURLP_FINALIZE assert self._state == PaymentIdentifierState.LNURLP_FINALIZE
coro = self._do_finalize(amount_sat, comment, on_finished=on_finished) coro = self._do_finalize(amount_sat=amount_sat, comment=comment, on_finished=on_finished)
asyncio.run_coroutine_threadsafe(coro, get_asyncio_loop()) asyncio.run_coroutine_threadsafe(coro, get_asyncio_loop())
@log_exceptions @log_exceptions
@ -665,22 +665,28 @@ class PaymentIdentifier(Logger):
return bool(expires) and expires < time.time() return bool(expires) and expires < time.time()
return False return False
def get_invoice(self, amount_sat, message):
# FIXME: this should not be a PI method def invoice_from_payment_identifier(
# ideally, PI should not have a reference to wallet. pi: 'PaymentIdentifier',
if self.is_lightning(): wallet: 'Abstract_Wallet',
invoice = self.bolt11 amount_sat: int,
if not invoice: message: str = None
return ):
if invoice.amount_msat is None: # FIXME: this should not be a PI method
invoice.amount_msat = int(amount_sat * 1000) # ideally, PI should not have a reference to wallet.
return invoice if pi.is_lightning():
else: invoice = pi.bolt11
outputs = self.get_onchain_outputs(amount_sat) if not invoice:
message = self.bip21.get('message') if self.bip21 else message return
bip70_data = self.bip70_data if self.bip70 else None if invoice.amount_msat is None:
return self.wallet.create_invoice( invoice.amount_msat = int(amount_sat * 1000)
outputs=outputs, return invoice
message=message, else:
pr=bip70_data, outputs = pi.get_onchain_outputs(amount_sat)
URI=self.bip21) message = pi.bip21.get('message') if pi.bip21 else message
bip70_data = self.bip70_data if self.bip70 else None
return wallet.create_invoice(
outputs=outputs,
message=message,
pr=bip70_data,
URI=pi.bip21)

Loading…
Cancel
Save