Browse Source

qt send tab: (regression) fix handling multiline fmt for single line

fixes #6761
patch-4
SomberNight 4 years ago
parent
commit
4bd4fc7697
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 37
      electrum/gui/qt/paytoedit.py

37
electrum/gui/qt/paytoedit.py

@ -73,7 +73,7 @@ class PayToEdit(CompletionTextEdit, ScanQRTextEdit, Logger):
self.c = None
self.textChanged.connect(self.check_text)
self.outputs = [] # type: List[PartialTxOutput]
self.errors = [] # type: Sequence[PayToLineError]
self.errors = [] # type: List[PayToLineError]
self.is_pr = False
self.is_alias = False
self.update_size()
@ -145,15 +145,18 @@ class PayToEdit(CompletionTextEdit, ScanQRTextEdit, Logger):
return
# filter out empty lines
lines = [i for i in self.lines() if i]
outputs = [] # type: List[PartialTxOutput]
total = 0
self.payto_scriptpubkey = None
self.lightning_invoice = None
self.outputs = []
if len(lines) == 1:
data = lines[0]
# try bip21 URI
if data.startswith("bitcoin:"):
self.win.pay_to_URI(data)
return
# try LN invoice
bolt11_invoice = maybe_extract_bolt11_invoice(data)
if bolt11_invoice is not None:
try:
@ -163,24 +166,40 @@ class PayToEdit(CompletionTextEdit, ScanQRTextEdit, Logger):
else:
self.lightning_invoice = bolt11_invoice
return
# try "address, amount" on-chain format
try:
self._parse_as_multiline(lines, raise_errors=True)
except Exception as e:
pass
else:
return
# try address/script
try:
self.payto_scriptpubkey = self.parse_output(data)
except Exception as e:
self.errors.append(PayToLineError(line_content=data, exc=e))
if self.payto_scriptpubkey:
else:
self.win.set_onchain(True)
self.win.lock_amount(False)
return
return
else:
# there are multiple lines
self._parse_as_multiline(lines, raise_errors=False)
# there are multiple lines
def _parse_as_multiline(self, lines, *, raise_errors: bool):
outputs = [] # type: List[PartialTxOutput]
total = 0
is_max = False
for i, line in enumerate(lines):
try:
output = self.parse_address_and_amount(line)
except Exception as e:
self.errors.append(PayToLineError(
idx=i, line_content=line.strip(), exc=e, is_multiline=True))
continue
if raise_errors:
raise
else:
self.errors.append(PayToLineError(
idx=i, line_content=line.strip(), exc=e, is_multiline=True))
continue
outputs.append(output)
if output.value == '!':
is_max = True

Loading…
Cancel
Save