qml: fix paying bip70 invoices
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import threading
|
||||
from typing import TYPE_CHECKING
|
||||
import asyncio
|
||||
from urllib.parse import urlparse
|
||||
|
||||
@@ -17,11 +18,13 @@ from electrum.util import (parse_URI, InvalidBitcoinURI, InvoiceError,
|
||||
maybe_extract_lightning_payment_identifier)
|
||||
from electrum.lnurl import decode_lnurl, request_lnurl, callback_lnurl
|
||||
from electrum.bitcoin import COIN
|
||||
from electrum.paymentrequest import PaymentRequest
|
||||
|
||||
from .qetypes import QEAmount
|
||||
from .qewallet import QEWallet
|
||||
from .util import status_update_timer_interval
|
||||
|
||||
|
||||
class QEInvoice(QObject):
|
||||
class Type:
|
||||
Invalid = -1
|
||||
@@ -131,6 +134,8 @@ class QEInvoiceParser(QEInvoice):
|
||||
lnurlRetrieved = pyqtSignal()
|
||||
lnurlError = pyqtSignal([str,str], arguments=['code', 'message'])
|
||||
|
||||
_bip70PrResolvedSignal = pyqtSignal([PaymentRequest], arguments=['request'])
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
@@ -144,6 +149,8 @@ class QEInvoiceParser(QEInvoice):
|
||||
self._timer.setSingleShot(True)
|
||||
self._timer.timeout.connect(self.updateStatusString)
|
||||
|
||||
self._bip70PrResolvedSignal.connect(self._bip70_payment_request_resolved)
|
||||
|
||||
self.clear()
|
||||
|
||||
@pyqtProperty(int, notify=invoiceChanged)
|
||||
@@ -364,6 +371,13 @@ class QEInvoiceParser(QEInvoice):
|
||||
URI=uri
|
||||
)
|
||||
|
||||
def _bip70_payment_request_resolved(self, request: 'PaymentRequest'):
|
||||
self._logger.debug('resolved payment request')
|
||||
outputs = request.get_outputs()
|
||||
invoice = self.create_onchain_invoice(outputs, None, request, None)
|
||||
self.setValidOnchainInvoice(invoice)
|
||||
self.validationSuccess.emit()
|
||||
|
||||
def validateRecipient(self, recipient):
|
||||
if not recipient:
|
||||
self.setInvoiceType(QEInvoice.Type.Invalid)
|
||||
@@ -371,14 +385,8 @@ class QEInvoiceParser(QEInvoice):
|
||||
|
||||
maybe_lightning_invoice = recipient
|
||||
|
||||
def _payment_request_resolved(request):
|
||||
self._logger.debug('resolved payment request')
|
||||
outputs = request.get_outputs()
|
||||
invoice = self.create_onchain_invoice(outputs, None, request, None)
|
||||
self.setValidOnchainInvoice(invoice)
|
||||
|
||||
try:
|
||||
self._bip21 = parse_URI(recipient, _payment_request_resolved)
|
||||
self._bip21 = parse_URI(recipient, lambda pr: self._bip70PrResolvedSignal.emit(pr))
|
||||
if self._bip21:
|
||||
if 'r' in self._bip21 or ('name' in self._bip21 and 'sig' in self._bip21): # TODO set flag in util?
|
||||
# let callback handle state
|
||||
|
||||
Reference in New Issue
Block a user