Browse Source

QML: auto-delete expired requests. Add action to Qt menu

master
ThomasV 3 years ago
parent
commit
8cc610298b
  1. 7
      electrum/gui/qml/qewallet.py
  2. 1
      electrum/gui/qt/receive_tab.py
  3. 9
      electrum/gui/qt/request_list.py
  4. 11
      electrum/wallet.py

7
electrum/gui/qml/qewallet.py

@ -611,11 +611,17 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
return req_key, addr
def _delete_expired_requests(self):
keys = self.wallet.delete_expired_requests()
for key in keys:
self.requestModel.delete_invoice(key)
@pyqtSlot(QEAmount, str, int)
@pyqtSlot(QEAmount, str, int, bool)
@pyqtSlot(QEAmount, str, int, bool, bool)
@pyqtSlot(QEAmount, str, int, bool, bool, bool)
def createRequest(self, amount: QEAmount, message: str, expiration: int, ignore_gap: bool = False, reuse_address: bool = False):
self._delete_expired_requests()
try:
if self.wallet.lnworker and self.wallet.lnworker.channels:
# TODO maybe show a warning if amount exceeds lnworker.num_sats_can_receive (as in kivy)
@ -639,6 +645,7 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
@pyqtSlot(bool)
@pyqtSlot(bool, bool)
def createDefaultRequest(self, ignore_gap: bool = False, reuse_address: bool = False):
self._delete_expired_requests()
try:
default_expiry = self.wallet.config.get('request_expiry', PR_DEFAULT_EXPIRATION_WHEN_CREATING)
if self.wallet.lnworker and self.wallet.lnworker.channels:

1
electrum/gui/qt/receive_tab.py

@ -158,6 +158,7 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
self.qr_menu_action = menu.addToggle(_("Show QR code window"), self.window.toggle_qr_window)
menu.addAction(_("Import requests"), self.window.import_requests)
menu.addAction(_("Export requests"), self.window.export_requests)
menu.addAction(_("Delete expired requests"), self.request_list.delete_expired_requests)
# layout
vbox_g = QVBoxLayout()

9
electrum/gui/qt/request_list.py

@ -208,10 +208,15 @@ class RequestList(MyTreeView):
menu.exec_(self.viewport().mapToGlobal(position))
def delete_requests(self, keys):
self.wallet.delete_requests(keys)
for key in keys:
self.delete_item(key)
self.receive_tab.do_clear()
def delete_expired_requests(self):
keys = self.wallet.delete_expired_requests()
for key in keys:
self.wallet.delete_request(key, write_to_disk=False)
self.delete_item(key)
self.wallet.save_db()
self.receive_tab.do_clear()
def set_visibility_of_columns(self):

11
electrum/wallet.py

@ -2611,6 +2611,17 @@ class Abstract_Wallet(ABC, Logger, EventListener):
out.sort(key=lambda x: x.time)
return out
def delete_expired_requests(self):
keys = [k for k, v in self._receive_requests.items() if self.get_invoice_status(v) == PR_EXPIRED]
self.delete_requests(keys)
return keys
def delete_requests(self, keys):
for key in keys:
self.delete_request(key, write_to_disk=False)
if keys:
self.save_db()
@abstractmethod
def get_fingerprint(self) -> str:
"""Returns a string that can be used to identify this wallet.

Loading…
Cancel
Save