Browse Source

qml: invoice/request list: flip sort order: newest on top

to be consistent with the History, and with other GUIs

(the model is the easiest place to do it. QSortFilterProxyModel/etc looks overkill)
master
SomberNight 3 years ago
parent
commit
bf41675d4c
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 25
      electrum/gui/qml/qeinvoicelistmodel.py
  2. 6
      electrum/wallet.py

25
electrum/gui/qml/qeinvoicelistmodel.py

@ -1,15 +1,20 @@
from abc import abstractmethod from abc import abstractmethod
from typing import TYPE_CHECKING, List, Dict, Any
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QTimer from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QTimer
from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex
from electrum.logging import get_logger from electrum.logging import get_logger
from electrum.util import Satoshis, format_time from electrum.util import Satoshis, format_time
from electrum.invoices import BaseInvoice, PR_EXPIRED, LN_EXPIRY_NEVER from electrum.invoices import BaseInvoice, PR_EXPIRED, LN_EXPIRY_NEVER, Invoice, Request
from .util import QtEventListener, qt_event_listener, status_update_timer_interval from .util import QtEventListener, qt_event_listener, status_update_timer_interval
from .qetypes import QEAmount from .qetypes import QEAmount
if TYPE_CHECKING:
from electrum.wallet import Abstract_Wallet
class QEAbstractInvoiceListModel(QAbstractListModel): class QEAbstractInvoiceListModel(QAbstractListModel):
_logger = get_logger(__name__) _logger = get_logger(__name__)
@ -21,7 +26,7 @@ class QEAbstractInvoiceListModel(QAbstractListModel):
_ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES])) _ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES]))
_ROLE_RMAP = dict(zip(_ROLE_NAMES, _ROLE_KEYS)) _ROLE_RMAP = dict(zip(_ROLE_NAMES, _ROLE_KEYS))
def __init__(self, wallet, parent=None): def __init__(self, wallet: 'Abstract_Wallet', parent=None):
super().__init__(parent) super().__init__(parent)
self.wallet = wallet self.wallet = wallet
@ -159,11 +164,11 @@ class QEAbstractInvoiceListModel(QAbstractListModel):
raise Exception('provide impl') raise Exception('provide impl')
@abstractmethod @abstractmethod
def get_invoice_list(self): def get_invoice_list(self) -> List[BaseInvoice]:
raise Exception('provide impl') raise Exception('provide impl')
@abstractmethod @abstractmethod
def get_invoice_as_dict(self, invoice: BaseInvoice): def get_invoice_as_dict(self, invoice: BaseInvoice) -> Dict[str, Any]:
raise Exception('provide impl') raise Exception('provide impl')
@ -191,12 +196,14 @@ class QEInvoiceListModel(QEAbstractInvoiceListModel, QtEventListener):
return item return item
def get_invoice_list(self): def get_invoice_list(self):
return self.wallet.get_unpaid_invoices() lst = self.wallet.get_unpaid_invoices()
lst.reverse()
return lst
def get_invoice_for_key(self, key: str): def get_invoice_for_key(self, key: str):
return self.wallet.get_invoice(key) return self.wallet.get_invoice(key)
def get_invoice_as_dict(self, invoice: BaseInvoice): def get_invoice_as_dict(self, invoice: Invoice):
return self.wallet.export_invoice(invoice) return self.wallet.export_invoice(invoice)
class QERequestListModel(QEAbstractInvoiceListModel, QtEventListener): class QERequestListModel(QEAbstractInvoiceListModel, QtEventListener):
@ -223,12 +230,14 @@ class QERequestListModel(QEAbstractInvoiceListModel, QtEventListener):
return item return item
def get_invoice_list(self): def get_invoice_list(self):
return self.wallet.get_unpaid_requests() lst = self.wallet.get_unpaid_requests()
lst.reverse()
return lst
def get_invoice_for_key(self, key: str): def get_invoice_for_key(self, key: str):
return self.wallet.get_request(key) return self.wallet.get_request(key)
def get_invoice_as_dict(self, invoice: BaseInvoice): def get_invoice_as_dict(self, invoice: Request):
return self.wallet.export_request(invoice) return self.wallet.export_request(invoice)
@pyqtSlot(str, int) @pyqtSlot(str, int)

6
electrum/wallet.py

@ -1090,12 +1090,12 @@ class Abstract_Wallet(ABC, Logger, EventListener):
self._requests_addr_to_key.clear() self._requests_addr_to_key.clear()
self.save_db() self.save_db()
def get_invoices(self): def get_invoices(self) -> List[Invoice]:
out = list(self._invoices.values()) out = list(self._invoices.values())
out.sort(key=lambda x:x.time) out.sort(key=lambda x:x.time)
return out return out
def get_unpaid_invoices(self): def get_unpaid_invoices(self) -> List[Invoice]:
invoices = self.get_invoices() invoices = self.get_invoices()
return [x for x in invoices if self.get_invoice_status(x) != PR_PAID] return [x for x in invoices if self.get_invoice_status(x) != PR_PAID]
@ -2638,7 +2638,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
out.sort(key=lambda x: x.time) out.sort(key=lambda x: x.time)
return out return out
def get_unpaid_requests(self): def get_unpaid_requests(self) -> List[Request]:
out = [x for x in self._receive_requests.values() if self.get_invoice_status(x) != PR_PAID] out = [x for x in self._receive_requests.values() if self.get_invoice_status(x) != PR_PAID]
out.sort(key=lambda x: x.time) out.sort(key=lambda x: x.time)
return out return out

Loading…
Cancel
Save