Browse Source

Qt: do not filter out paid invoices/requests. let user delete multiple items

master
ThomasV 6 years ago
parent
commit
f67011d477
  1. 12
      electrum/gui/qt/invoice_list.py
  2. 6
      electrum/gui/qt/main_window.py
  3. 15
      electrum/gui/qt/request_list.py

12
electrum/gui/qt/invoice_list.py

@ -92,14 +92,9 @@ class InvoiceList(MyTreeView):
def update(self): def update(self):
# not calling maybe_defer_update() as it interferes with conditional-visibility # not calling maybe_defer_update() as it interferes with conditional-visibility
_list = self.parent.wallet.get_invoices()
# filter out paid invoices unless we have the log
lnworker_logs = self.parent.wallet.lnworker.logs if self.parent.wallet.lnworker else {}
_list = [x for x in _list
if x and (x.get('status') != PR_PAID or x.get('rhash') in lnworker_logs)]
self.model().clear() self.model().clear()
self.update_headers(self.__class__.headers) self.update_headers(self.__class__.headers)
for idx, item in enumerate(_list): for idx, item in enumerate(self.parent.wallet.get_invoices()):
invoice_type = item['type'] invoice_type = item['type']
if invoice_type == PR_TYPE_LN: if invoice_type == PR_TYPE_LN:
key = item['rhash'] key = item['rhash']
@ -148,9 +143,10 @@ class InvoiceList(MyTreeView):
keys = [ item.data(ROLE_REQUEST_ID) for item in items] keys = [ item.data(ROLE_REQUEST_ID) for item in items]
invoices = [ self.parent.wallet.get_invoice(key) for key in keys] invoices = [ self.parent.wallet.get_invoice(key) for key in keys]
invoices = [ invoice for invoice in invoices if invoice['status'] == PR_UNPAID and invoice['type'] == PR_TYPE_ONCHAIN] invoices = [ invoice for invoice in invoices if invoice['status'] == PR_UNPAID and invoice['type'] == PR_TYPE_ONCHAIN]
if len(invoices) > 1:
menu = QMenu(self) menu = QMenu(self)
if len(invoices) > 1:
menu.addAction(_("Pay multiple invoices"), lambda: self.parent.pay_multiple_invoices(invoices)) menu.addAction(_("Pay multiple invoices"), lambda: self.parent.pay_multiple_invoices(invoices))
menu.addAction(_("Delete"), lambda: self.parent.delete_invoices(keys))
menu.exec_(self.viewport().mapToGlobal(position)) menu.exec_(self.viewport().mapToGlobal(position))
return return
idx = self.indexAt(position) idx = self.indexAt(position)
@ -172,7 +168,7 @@ class InvoiceList(MyTreeView):
log = self.parent.wallet.lnworker.logs.get(key) log = self.parent.wallet.lnworker.logs.get(key)
if log: if log:
menu.addAction(_("View log"), lambda: self.show_log(key, log)) menu.addAction(_("View log"), lambda: self.show_log(key, log))
menu.addAction(_("Delete"), lambda: self.parent.delete_invoice(key)) menu.addAction(_("Delete invoices"), lambda: self.parent.delete_invoices([key]))
menu.exec_(self.viewport().mapToGlobal(position)) menu.exec_(self.viewport().mapToGlobal(position))
def show_log(self, key, log: Sequence[PaymentAttemptLog]): def show_log(self, key, log: Sequence[PaymentAttemptLog]):

6
electrum/gui/qt/main_window.py

@ -1103,7 +1103,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
return w return w
def delete_request(self, key): def delete_requests(self, keys):
for key in keys:
self.wallet.delete_request(key) self.wallet.delete_request(key)
self.request_list.update() self.request_list.update()
self.clear_receive_tab() self.clear_receive_tab()
@ -1713,7 +1714,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
self.payto_e.setText(_("please wait...")) self.payto_e.setText(_("please wait..."))
return True return True
def delete_invoice(self, key): def delete_invoices(self, keys):
for key in keys:
self.wallet.delete_invoice(key) self.wallet.delete_invoice(key)
self.invoice_list.update() self.invoice_list.update()

15
electrum/gui/qt/request_list.py

@ -29,6 +29,7 @@ from typing import Optional
from PyQt5.QtGui import QStandardItemModel, QStandardItem from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QMenu from PyQt5.QtWidgets import QMenu
from PyQt5.QtCore import Qt, QItemSelectionModel, QModelIndex from PyQt5.QtCore import Qt, QItemSelectionModel, QModelIndex
from PyQt5.QtWidgets import QAbstractItemView
from electrum.i18n import _ from electrum.i18n import _
from electrum.util import format_time, get_request_status from electrum.util import format_time, get_request_status
@ -65,8 +66,9 @@ class RequestList(MyTreeView):
self.wallet = self.parent.wallet self.wallet = self.parent.wallet
self.setModel(QStandardItemModel(self)) self.setModel(QStandardItemModel(self))
self.setSortingEnabled(True) self.setSortingEnabled(True)
self.update()
self.selectionModel().currentRowChanged.connect(self.item_changed) self.selectionModel().currentRowChanged.connect(self.item_changed)
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.update()
def select_key(self, key): def select_key(self, key):
for i in range(self.model().rowCount()): for i in range(self.model().rowCount()):
@ -124,8 +126,6 @@ class RequestList(MyTreeView):
self.update_headers(self.__class__.headers) self.update_headers(self.__class__.headers)
for req in self.wallet.get_sorted_requests(): for req in self.wallet.get_sorted_requests():
status, status_str = get_request_status(req) status, status_str = get_request_status(req)
if status == PR_PAID:
continue
request_type = req['type'] request_type = req['type']
timestamp = req.get('time', 0) timestamp = req.get('time', 0)
amount = req.get('amount') amount = req.get('amount')
@ -162,6 +162,13 @@ class RequestList(MyTreeView):
self.item_changed(None) self.item_changed(None)
def create_menu(self, position): def create_menu(self, position):
items = self.selected_in_column(0)
if len(items)>1:
keys = [ item.data(ROLE_KEY) for item in items]
menu = QMenu(self)
menu.addAction(_("Delete requests"), lambda: self.parent.delete_requests(keys))
menu.exec_(self.viewport().mapToGlobal(position))
return
idx = self.indexAt(position) idx = self.indexAt(position)
item = self.model().itemFromIndex(idx) item = self.model().itemFromIndex(idx)
# TODO use siblingAtColumn when min Qt version is >=5.11 # TODO use siblingAtColumn when min Qt version is >=5.11
@ -183,6 +190,6 @@ class RequestList(MyTreeView):
menu.addAction(_("Copy Address"), lambda: self.parent.do_copy(req['address'], title='Bitcoin Address')) menu.addAction(_("Copy Address"), lambda: self.parent.do_copy(req['address'], title='Bitcoin Address'))
if 'view_url' in req: if 'view_url' in req:
menu.addAction(_("View in web browser"), lambda: webopen(req['view_url'])) menu.addAction(_("View in web browser"), lambda: webopen(req['view_url']))
menu.addAction(_("Delete"), lambda: self.parent.delete_request(key)) menu.addAction(_("Delete"), lambda: self.parent.delete_requests([key]))
run_hook('receive_list_menu', menu, key) run_hook('receive_list_menu', menu, key)
menu.exec_(self.viewport().mapToGlobal(position)) menu.exec_(self.viewport().mapToGlobal(position))

Loading…
Cancel
Save