|
@ -25,12 +25,12 @@ |
|
|
|
|
|
|
|
|
import re |
|
|
import re |
|
|
from decimal import Decimal |
|
|
from decimal import Decimal |
|
|
from typing import NamedTuple, Sequence, Optional, List |
|
|
from typing import NamedTuple, Sequence, Optional, List, TYPE_CHECKING |
|
|
|
|
|
|
|
|
from PyQt5.QtGui import QFontMetrics |
|
|
from PyQt5.QtGui import QFontMetrics |
|
|
|
|
|
|
|
|
from electrum import bitcoin |
|
|
from electrum import bitcoin |
|
|
from electrum.util import bfh |
|
|
from electrum.util import bfh, maybe_extract_bolt11_invoice |
|
|
from electrum.transaction import push_script, PartialTxOutput |
|
|
from electrum.transaction import push_script, PartialTxOutput |
|
|
from electrum.bitcoin import opcodes |
|
|
from electrum.bitcoin import opcodes |
|
|
from electrum.logging import Logger |
|
|
from electrum.logging import Logger |
|
@ -40,6 +40,10 @@ from .qrtextedit import ScanQRTextEdit |
|
|
from .completion_text_edit import CompletionTextEdit |
|
|
from .completion_text_edit import CompletionTextEdit |
|
|
from . import util |
|
|
from . import util |
|
|
|
|
|
|
|
|
|
|
|
if TYPE_CHECKING: |
|
|
|
|
|
from .main_window import ElectrumWindow |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RE_ALIAS = r'(.*?)\s*\<([0-9A-Za-z]{1,})\>' |
|
|
RE_ALIAS = r'(.*?)\s*\<([0-9A-Za-z]{1,})\>' |
|
|
|
|
|
|
|
|
frozen_style = "QWidget {border:none;}" |
|
|
frozen_style = "QWidget {border:none;}" |
|
@ -54,7 +58,7 @@ class PayToLineError(NamedTuple): |
|
|
|
|
|
|
|
|
class PayToEdit(CompletionTextEdit, ScanQRTextEdit, Logger): |
|
|
class PayToEdit(CompletionTextEdit, ScanQRTextEdit, Logger): |
|
|
|
|
|
|
|
|
def __init__(self, win): |
|
|
def __init__(self, win: 'ElectrumWindow'): |
|
|
CompletionTextEdit.__init__(self) |
|
|
CompletionTextEdit.__init__(self) |
|
|
ScanQRTextEdit.__init__(self) |
|
|
ScanQRTextEdit.__init__(self) |
|
|
Logger.__init__(self) |
|
|
Logger.__init__(self) |
|
@ -140,16 +144,14 @@ class PayToEdit(CompletionTextEdit, ScanQRTextEdit, Logger): |
|
|
if data.startswith("bitcoin:"): |
|
|
if data.startswith("bitcoin:"): |
|
|
self.win.pay_to_URI(data) |
|
|
self.win.pay_to_URI(data) |
|
|
return |
|
|
return |
|
|
lower = data.lower() |
|
|
bolt11_invoice = maybe_extract_bolt11_invoice(data) |
|
|
if lower.startswith("lightning:ln"): |
|
|
if bolt11_invoice is not None: |
|
|
lower = lower[10:] |
|
|
|
|
|
if lower.startswith("ln"): |
|
|
|
|
|
try: |
|
|
try: |
|
|
self.win.parse_lightning_invoice(lower) |
|
|
self.win.parse_lightning_invoice(bolt11_invoice) |
|
|
except LnDecodeException as e: |
|
|
except LnDecodeException as e: |
|
|
self.errors.append(PayToLineError(idx=0, line_content=data, exc=e)) |
|
|
self.errors.append(PayToLineError(idx=0, line_content=data, exc=e)) |
|
|
else: |
|
|
else: |
|
|
self.lightning_invoice = lower |
|
|
self.lightning_invoice = bolt11_invoice |
|
|
return |
|
|
return |
|
|
try: |
|
|
try: |
|
|
self.payto_scriptpubkey = self.parse_output(data) |
|
|
self.payto_scriptpubkey = self.parse_output(data) |
|
|