URI: 
       tqt send tab: (regression) fix handling multiline fmt for single line - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 4bd4fc7697e118755af4d00579b1f2d1b08a63c9
   DIR parent 01fe443928ed81f950d5d3d53daffe570e167dca
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Wed, 25 Nov 2020 00:03:38 +0100
       
       qt send tab: (regression) fix handling multiline fmt for single line
       
       fixes #6761
       
       Diffstat:
         M electrum/gui/qt/paytoedit.py        |      37 +++++++++++++++++++++++--------
       
       1 file changed, 28 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/electrum/gui/qt/paytoedit.py b/electrum/gui/qt/paytoedit.py
       t@@ -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()
       t@@ -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:
       t@@ -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