URI: 
       tfix paying bip70 payment request with Qt GUI - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 1d0aa4042a74136e85929edbfe683432ef00591d
   DIR parent 787ac5fe994086b994524201fec4b63f876c7c85
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Tue, 31 Dec 2019 03:08:47 +0100
       
       fix paying bip70 payment request with Qt GUI
       
       Diffstat:
         M electrum/gui/qt/history_list.py     |       6 +++---
         M electrum/gui/qt/main_window.py      |      34 ++++++++++++-------------------
       
       2 files changed, 16 insertions(+), 24 deletions(-)
       ---
   DIR diff --git a/electrum/gui/qt/history_list.py b/electrum/gui/qt/history_list.py
       t@@ -621,7 +621,7 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
                height = self.wallet.get_tx_height(tx_hash).height
                is_relevant, is_mine, v, fee = self.wallet.get_wallet_delta(tx)
                is_unconfirmed = height <= 0
       -        #pr_key = self.wallet.invoices.paid.get(tx_hash)
       +        invoice_keys = self.wallet._get_relevant_invoice_keys_for_tx(tx)
                menu = QMenu()
                if height in [TX_HEIGHT_FUTURE, TX_HEIGHT_LOCAL]:
                    menu.addAction(_("Remove"), lambda: self.remove_local_tx(tx_hash))
       t@@ -643,8 +643,8 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
                        child_tx = self.wallet.cpfp(tx, 0)
                        if child_tx:
                            menu.addAction(_("Child pays for parent"), lambda: self.parent.cpfp(tx, child_tx))
       -        #if pr_key:
       -        #    menu.addAction(read_QIcon("seal"), _("View invoice"), lambda: self.parent.show_invoice(pr_key))
       +        if invoice_keys:
       +           menu.addAction(read_QIcon("seal"), _("View invoice"), lambda: [self.parent.show_invoice(key) for key in invoice_keys])
                if tx_URL:
                    menu.addAction(_("View on block explorer"), lambda: webopen(tx_URL))
                menu.exec_(self.viewport().mapToGlobal(position))
   DIR diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py
       t@@ -1745,7 +1745,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                self.payment_request = None
                self.do_clear()
        
       -    def on_pr(self, request):
       +    def on_pr(self, request: 'paymentrequest.PaymentRequest'):
       +        self.set_onchain(True)
                self.payment_request = request
                if self.payment_request.verify(self.contacts):
                    self.payment_request_ok_signal.emit()
       t@@ -1922,7 +1923,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                    pr.verify(self.contacts)
                    self.show_bip70_details(pr)
        
       -    def show_bip70_details(self, pr):
       +    def show_bip70_details(self, pr: 'paymentrequest.PaymentRequest'):
                key = pr.get_id()
                d = WindowModalDialog(self, _("BIP70 Invoice"))
                vbox = QVBoxLayout(d)
       t@@ -1930,7 +1931,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                grid.addWidget(QLabel(_("Requestor") + ':'), 0, 0)
                grid.addWidget(QLabel(pr.get_requestor()), 0, 1)
                grid.addWidget(QLabel(_("Amount") + ':'), 1, 0)
       -        outputs_str = '\n'.join(map(lambda x: self.format_amount(x[2])+ self.base_unit() + ' @ ' + x[1], pr.get_outputs()))
       +        outputs_str = '\n'.join(map(lambda x: self.format_amount(x.value)+ self.base_unit() + ' @ ' + x.address, pr.get_outputs()))
                grid.addWidget(QLabel(outputs_str), 1, 1)
                expires = pr.get_expiration_date()
                grid.addWidget(QLabel(_("Memo") + ':'), 2, 0)
       t@@ -1950,26 +1951,17 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                        data = f.write(pr.raw)
                    self.show_message(_('Invoice saved as' + ' ' + fn))
                exportButton = EnterButton(_('Save'), do_export)
       -        def do_delete():
       -            if self.question(_('Delete invoice?')):
       -                self.wallet.delete_invoices(key)
       -                self.history_list.update()
       -                self.invoice_list.update()
       -                d.close()
       -        deleteButton = EnterButton(_('Delete'), do_delete)
       -        vbox.addLayout(Buttons(exportButton, deleteButton, CloseButton(d)))
       +        # note: "delete" disabled as invoice is saved with a different key in wallet.invoices that we do not have here
       +        # def do_delete():
       +        #     if self.question(_('Delete invoice?')):
       +        #         self.wallet.delete_invoice(key)
       +        #         self.history_list.update()
       +        #         self.invoice_list.update()
       +        #         d.close()
       +        # deleteButton = EnterButton(_('Delete'), do_delete)
       +        vbox.addLayout(Buttons(exportButton, CloseButton(d)))
                d.exec_()
        
       -    def pay_bip70_invoice(self, key):
       -        pr = self.wallet.get_invoice(key)
       -        self.payment_request = pr
       -        self.prepare_for_payment_request()
       -        pr.error = None  # this forces verify() to re-run
       -        if pr.verify(self.contacts):
       -            self.payment_request_ok()
       -        else:
       -            self.payment_request_error()
       -
            def create_console_tab(self):
                from .console import Console
                self.console = console = Console()