1
0

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

This commit is contained in:
ThomasV
2023-03-18 09:59:18 +01:00
parent d8abab34d8
commit 8cc610298b
4 changed files with 26 additions and 2 deletions

View File

@@ -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:

View File

@@ -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()

View File

@@ -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):

View File

@@ -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.