mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-04 04:45:16 +00:00
qt history: fixes for tx context-menu "View invoice" if more than one
fixes #6516 coalesce "View invoice" options into submenu if there are multiple; also make sure lambda uses bound argument
This commit is contained in:
parent
72950bf379
commit
6b4edc650a
2 changed files with 17 additions and 10 deletions
|
@ -675,7 +675,6 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
|
||||||
tx_URL = block_explorer_URL(self.config, 'tx', tx_hash)
|
tx_URL = block_explorer_URL(self.config, 'tx', tx_hash)
|
||||||
tx_details = self.wallet.get_tx_info(tx)
|
tx_details = self.wallet.get_tx_info(tx)
|
||||||
is_unconfirmed = tx_details.tx_mined_status.height <= 0
|
is_unconfirmed = tx_details.tx_mined_status.height <= 0
|
||||||
invoice_keys = self.wallet.get_relevant_invoice_keys_for_tx(tx)
|
|
||||||
menu = QMenu()
|
menu = QMenu()
|
||||||
if tx_details.can_remove:
|
if tx_details.can_remove:
|
||||||
menu.addAction(_("Remove"), lambda: self.remove_local_tx(tx_hash))
|
menu.addAction(_("Remove"), lambda: self.remove_local_tx(tx_hash))
|
||||||
|
@ -699,10 +698,13 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
|
||||||
child_tx = self.wallet.cpfp(tx, 0)
|
child_tx = self.wallet.cpfp(tx, 0)
|
||||||
if child_tx:
|
if child_tx:
|
||||||
menu.addAction(_("Child pays for parent"), lambda: self.parent.cpfp(tx, child_tx))
|
menu.addAction(_("Child pays for parent"), lambda: self.parent.cpfp(tx, child_tx))
|
||||||
for key in invoice_keys:
|
invoices = self.wallet.get_relevant_invoices_for_tx(tx)
|
||||||
invoice = self.parent.wallet.get_invoice(key)
|
if len(invoices) == 1:
|
||||||
if invoice:
|
menu.addAction(_("View invoice"), lambda inv=invoices[0]: self.parent.show_onchain_invoice(inv))
|
||||||
menu.addAction(_("View invoice"), lambda: self.parent.show_onchain_invoice(invoice))
|
elif len(invoices) > 1:
|
||||||
|
menu_invs = menu.addMenu(_("Related invoices"))
|
||||||
|
for inv in invoices:
|
||||||
|
menu_invs.addAction(_("View invoice"), lambda inv=inv: self.parent.show_onchain_invoice(inv))
|
||||||
if tx_URL:
|
if tx_URL:
|
||||||
menu.addAction(_("View on block explorer"), lambda: webopen(tx_URL))
|
menu.addAction(_("View on block explorer"), lambda: webopen(tx_URL))
|
||||||
menu.exec_(self.viewport().mapToGlobal(position))
|
menu.exec_(self.viewport().mapToGlobal(position))
|
||||||
|
|
|
@ -764,7 +764,7 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
|
||||||
def export_invoices(self, path):
|
def export_invoices(self, path):
|
||||||
write_json_file(path, list(self.invoices.values()))
|
write_json_file(path, list(self.invoices.values()))
|
||||||
|
|
||||||
def get_relevant_invoice_keys_for_tx(self, tx: Transaction) -> Set[str]:
|
def _get_relevant_invoice_keys_for_tx(self, tx: Transaction) -> Set[str]:
|
||||||
relevant_invoice_keys = set()
|
relevant_invoice_keys = set()
|
||||||
for txout in tx.outputs():
|
for txout in tx.outputs():
|
||||||
for invoice_key in self._invoices_from_scriptpubkey_map.get(txout.scriptpubkey, set()):
|
for invoice_key in self._invoices_from_scriptpubkey_map.get(txout.scriptpubkey, set()):
|
||||||
|
@ -773,6 +773,14 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
|
||||||
relevant_invoice_keys.add(invoice_key)
|
relevant_invoice_keys.add(invoice_key)
|
||||||
return relevant_invoice_keys
|
return relevant_invoice_keys
|
||||||
|
|
||||||
|
def get_relevant_invoices_for_tx(self, tx: Transaction) -> Sequence[OnchainInvoice]:
|
||||||
|
invoice_keys = self._get_relevant_invoice_keys_for_tx(tx)
|
||||||
|
invoices = [self.get_invoice(key) for key in invoice_keys]
|
||||||
|
invoices = [inv for inv in invoices if inv] # filter out None
|
||||||
|
for inv in invoices:
|
||||||
|
assert isinstance(inv, OnchainInvoice), f"unexpected type {type(inv)}"
|
||||||
|
return invoices
|
||||||
|
|
||||||
def _prepare_onchain_invoice_paid_detection(self):
|
def _prepare_onchain_invoice_paid_detection(self):
|
||||||
# scriptpubkey -> list(invoice_keys)
|
# scriptpubkey -> list(invoice_keys)
|
||||||
self._invoices_from_scriptpubkey_map = defaultdict(set) # type: Dict[bytes, Set[str]]
|
self._invoices_from_scriptpubkey_map = defaultdict(set) # type: Dict[bytes, Set[str]]
|
||||||
|
@ -811,10 +819,7 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
|
||||||
tx_hash = tx.txid()
|
tx_hash = tx.txid()
|
||||||
with self.transaction_lock:
|
with self.transaction_lock:
|
||||||
labels = []
|
labels = []
|
||||||
for invoice_key in self.get_relevant_invoice_keys_for_tx(tx):
|
for invoice in self.get_relevant_invoices_for_tx(tx):
|
||||||
invoice = self.invoices.get(invoice_key)
|
|
||||||
if invoice is None: continue
|
|
||||||
assert isinstance(invoice, OnchainInvoice)
|
|
||||||
if invoice.message:
|
if invoice.message:
|
||||||
labels.append(invoice.message)
|
labels.append(invoice.message)
|
||||||
if labels:
|
if labels:
|
||||||
|
|
Loading…
Add table
Reference in a new issue