1
0

Display and refresh the status of incoming payment requests:

- All requests have an expiration date
 - Paid requests are automatically removed from the list
 - Unpaid, unconfirmed and expired requests are displayed
 - Fix a bug in get_payment_status, conf was off by one
This commit is contained in:
ThomasV
2019-08-21 18:25:36 +02:00
parent 336cf81a6d
commit 8010123c08
9 changed files with 137 additions and 124 deletions

View File

@@ -30,7 +30,7 @@ from PyQt5.QtWidgets import QMenu, QHeaderView
from PyQt5.QtCore import Qt, QItemSelectionModel
from electrum.i18n import _
from electrum.util import format_time, age
from electrum.util import format_time, age, get_request_status
from electrum.util import PR_UNPAID, PR_EXPIRED, PR_PAID, PR_UNKNOWN, PR_INFLIGHT, pr_tooltips
from electrum.lnutil import SENT, RECEIVED
from electrum.plugin import run_hook
@@ -85,20 +85,28 @@ class RequestList(MyTreeView):
item = self.model().itemFromIndex(idx.sibling(idx.row(), self.Columns.DATE))
request_type = item.data(ROLE_REQUEST_TYPE)
key = item.data(ROLE_RHASH_OR_ADDR)
if request_type == REQUEST_TYPE_BITCOIN:
req = self.wallet.receive_requests.get(key)
if req is None:
self.update()
return
req = self.wallet.get_request_URI(key)
elif request_type == REQUEST_TYPE_LN:
req, direction, is_paid = self.wallet.lnworker.invoices.get(key) or (None, None, None)
if req is None:
self.update()
return
else:
raise Exception(f"unknown request type: {request_type}")
self.parent.receive_address_e.setText(req)
is_lightning = request_type == REQUEST_TYPE_LN
req = self.wallet.get_request(key, is_lightning)
if req is None:
self.update()
return
text = req.get('invoice') if is_lightning else req.get('URI')
self.parent.receive_address_e.setText(text)
def refresh_status(self):
m = self.model()
for r in range(m.rowCount()):
idx = m.index(r, self.Columns.STATUS)
date_idx = idx.sibling(idx.row(), self.Columns.DATE)
date_item = m.itemFromIndex(date_idx)
status_item = m.itemFromIndex(idx)
key = date_item.data(ROLE_RHASH_OR_ADDR)
is_lightning = date_item.data(ROLE_REQUEST_TYPE) == REQUEST_TYPE_LN
req = self.wallet.get_request(key, is_lightning)
if req:
status_str = get_request_status(req)
status_item.setText(status_str)
status_item.setIcon(read_QIcon(pr_icons.get(req['status'])))
def update(self):
self.wallet = self.parent.wallet
@@ -116,7 +124,8 @@ class RequestList(MyTreeView):
message = req['memo']
date = format_time(timestamp)
amount_str = self.parent.format_amount(amount) if amount else ""
labels = [date, message, amount_str, pr_tooltips.get(status,'')]
status_str = get_request_status(req)
labels = [date, message, amount_str, status_str]
items = [QStandardItem(e) for e in labels]
self.set_editability(items)
items[self.Columns.DATE].setData(request_type, ROLE_REQUEST_TYPE)