Merge pull request #7923 from SomberNight/202208_wallet_labels
wallet: add get_label_for_address, and make get_label private
This commit is contained in:
@@ -836,7 +836,7 @@ class Commands:
|
|||||||
if balance:
|
if balance:
|
||||||
item += (format_satoshis(sum(wallet.get_addr_balance(addr))),)
|
item += (format_satoshis(sum(wallet.get_addr_balance(addr))),)
|
||||||
if labels:
|
if labels:
|
||||||
item += (repr(wallet.get_label(addr)),)
|
item += (repr(wallet.get_label_for_address(addr)),)
|
||||||
out.append(item)
|
out.append(item)
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ class ElectrumWindow(App, Logger, EventListener):
|
|||||||
def on_event_payment_succeeded(self, wallet, key):
|
def on_event_payment_succeeded(self, wallet, key):
|
||||||
if wallet != self.wallet:
|
if wallet != self.wallet:
|
||||||
return
|
return
|
||||||
description = self.wallet.get_label(key)
|
description = self.wallet.get_label_for_rhash(key)
|
||||||
self.show_info(_('Payment succeeded') + '\n\n' + description)
|
self.show_info(_('Payment succeeded') + '\n\n' + description)
|
||||||
self._trigger_update_history()
|
self._trigger_update_history()
|
||||||
|
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ class AddressesDialog(Factory.Popup):
|
|||||||
n = 0
|
n = 0
|
||||||
cards = []
|
cards = []
|
||||||
for address in _list:
|
for address in _list:
|
||||||
label = wallet.get_label(address)
|
label = wallet.get_label_for_address(address)
|
||||||
balance = sum(wallet.get_addr_balance(address))
|
balance = sum(wallet.get_addr_balance(address))
|
||||||
is_used_and_empty = wallet.adb.is_used(address) and balance == 0
|
is_used_and_empty = wallet.adb.is_used(address) and balance == 0
|
||||||
if self.show_used == 1 and (balance or is_used_and_empty):
|
if self.show_used == 1 and (balance or is_used_and_empty):
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ class QEAddressDetails(QObject):
|
|||||||
self.frozenChanged.emit()
|
self.frozenChanged.emit()
|
||||||
|
|
||||||
self._scriptType = self._wallet.wallet.get_txin_type(self._address)
|
self._scriptType = self._wallet.wallet.get_txin_type(self._address)
|
||||||
self._label = self._wallet.wallet.get_label(self._address)
|
self._label = self._wallet.wallet.get_label_for_address(self._address)
|
||||||
c, u, x = self._wallet.wallet.get_addr_balance(self._address)
|
c, u, x = self._wallet.wallet.get_addr_balance(self._address)
|
||||||
self._balance = QEAmount(amount_sat=c + u + x)
|
self._balance = QEAmount(amount_sat=c + u + x)
|
||||||
self._pubkeys = self._wallet.wallet.get_public_keys(self._address)
|
self._pubkeys = self._wallet.wallet.get_public_keys(self._address)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
|
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
|
||||||
from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex
|
from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex
|
||||||
|
|
||||||
@@ -6,8 +8,12 @@ from electrum.util import Satoshis
|
|||||||
|
|
||||||
from .qetypes import QEAmount
|
from .qetypes import QEAmount
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from electrum.wallet import Abstract_Wallet
|
||||||
|
|
||||||
|
|
||||||
class QEAddressListModel(QAbstractListModel):
|
class QEAddressListModel(QAbstractListModel):
|
||||||
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
|
||||||
self.init_model()
|
self.init_model()
|
||||||
@@ -48,7 +54,7 @@ class QEAddressListModel(QAbstractListModel):
|
|||||||
item = {}
|
item = {}
|
||||||
item['address'] = address
|
item['address'] = address
|
||||||
item['numtx'] = self.wallet.adb.get_address_history_len(address)
|
item['numtx'] = self.wallet.adb.get_address_history_len(address)
|
||||||
item['label'] = self.wallet.get_label(address)
|
item['label'] = self.wallet.get_label_for_address(address)
|
||||||
c, u, x = self.wallet.get_addr_balance(address)
|
c, u, x = self.wallet.get_addr_balance(address)
|
||||||
item['balance'] = QEAmount(amount_sat=c + u + x)
|
item['balance'] = QEAmount(amount_sat=c + u + x)
|
||||||
item['held'] = self.wallet.is_frozen_address(address)
|
item['held'] = self.wallet.is_frozen_address(address)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import asyncio
|
|||||||
import queue
|
import queue
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
from typing import Optional
|
from typing import Optional, TYPE_CHECKING
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QTimer
|
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QTimer
|
||||||
|
|
||||||
@@ -22,6 +22,10 @@ from .qetransactionlistmodel import QETransactionListModel
|
|||||||
from .qetypes import QEAmount
|
from .qetypes import QEAmount
|
||||||
from .util import QtEventListener, qt_event_listener
|
from .util import QtEventListener, qt_event_listener
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from electrum.wallet import Abstract_Wallet
|
||||||
|
|
||||||
|
|
||||||
class QEWallet(AuthMixin, QObject, QtEventListener):
|
class QEWallet(AuthMixin, QObject, QtEventListener):
|
||||||
__instances = []
|
__instances = []
|
||||||
|
|
||||||
@@ -62,7 +66,7 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
|
|||||||
_synchronizing = False
|
_synchronizing = False
|
||||||
_synchronizing_progress = ''
|
_synchronizing_progress = ''
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ class AddressList(MyTreeView):
|
|||||||
def refresh_row(self, key, row):
|
def refresh_row(self, key, row):
|
||||||
assert row is not None
|
assert row is not None
|
||||||
address = key
|
address = key
|
||||||
label = self.wallet.get_label(address)
|
label = self.wallet.get_label_for_address(address)
|
||||||
num = self.wallet.adb.get_address_history_len(address)
|
num = self.wallet.adb.get_address_history_len(address)
|
||||||
c, u, x = self.wallet.get_addr_balance(address)
|
c, u, x = self.wallet.get_addr_balance(address)
|
||||||
balance = c + u + x
|
balance = c + u + x
|
||||||
|
|||||||
@@ -1169,7 +1169,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
|||||||
# sent by lnworker, redundant with invoice_status
|
# sent by lnworker, redundant with invoice_status
|
||||||
if wallet != self.wallet:
|
if wallet != self.wallet:
|
||||||
return
|
return
|
||||||
description = self.wallet.get_label(key)
|
description = self.wallet.get_label_for_rhash(key)
|
||||||
self.notify(_('Payment sent') + '\n\n' + description)
|
self.notify(_('Payment sent') + '\n\n' + description)
|
||||||
self.need_update.set()
|
self.need_update.set()
|
||||||
|
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ class UTXOList(MyTreeView):
|
|||||||
utxo = self._utxo_dict[key]
|
utxo = self._utxo_dict[key]
|
||||||
utxo_item = [self.std_model.item(row, col) for col in self.Columns]
|
utxo_item = [self.std_model.item(row, col) for col in self.Columns]
|
||||||
address = utxo.address
|
address = utxo.address
|
||||||
label = self.wallet.get_label_for_txid(utxo.prevout.txid.hex()) or self.wallet.get_label(address)
|
label = self.wallet.get_label_for_txid(utxo.prevout.txid.hex()) or self.wallet.get_label_for_address(address)
|
||||||
utxo_item[self.Columns.LABEL].setText(label)
|
utxo_item[self.Columns.LABEL].setText(label)
|
||||||
SELECTED_TO_SPEND_TOOLTIP = _('Coin selected to be spent')
|
SELECTED_TO_SPEND_TOOLTIP = _('Coin selected to be spent')
|
||||||
if key in (self._spend_set or set()):
|
if key in (self._spend_set or set()):
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ class ElectrumGui(BaseElectrumGui, EventListener):
|
|||||||
self.print_list(messages, "%19s %25s "%("Key", "Value"))
|
self.print_list(messages, "%19s %25s "%("Key", "Value"))
|
||||||
|
|
||||||
def print_addresses(self):
|
def print_addresses(self):
|
||||||
messages = map(lambda addr: "%30s %30s "%(addr, self.wallet.get_label(addr)), self.wallet.get_addresses())
|
messages = map(lambda addr: "%30s %30s "%(addr, self.wallet.get_label_for_address(addr)), self.wallet.get_addresses())
|
||||||
self.print_list(messages, "%19s %25s "%("Address", "Label"))
|
self.print_list(messages, "%19s %25s "%("Address", "Label"))
|
||||||
|
|
||||||
def print_order(self):
|
def print_order(self):
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ class ElectrumGui(BaseElectrumGui, EventListener):
|
|||||||
fmt = self.format_column_width(x, [-50, '*', 15])
|
fmt = self.format_column_width(x, [-50, '*', 15])
|
||||||
messages = [ fmt % (
|
messages = [ fmt % (
|
||||||
addr,
|
addr,
|
||||||
self.wallet.get_label(addr),
|
self.wallet.get_label_for_address(addr),
|
||||||
self.config.format_amount(sum(self.wallet.get_addr_balance(addr)), whitespaces=True)
|
self.config.format_amount(sum(self.wallet.get_addr_balance(addr)), whitespaces=True)
|
||||||
) for addr in self.wallet.get_addresses() ]
|
) for addr in self.wallet.get_addresses() ]
|
||||||
self.print_list(2, x, messages, fmt % ("Address", "Description", "Balance"))
|
self.print_list(2, x, messages, fmt % ("Address", "Description", "Balance"))
|
||||||
@@ -321,7 +321,7 @@ class ElectrumGui(BaseElectrumGui, EventListener):
|
|||||||
utxos = self.wallet.get_utxos()
|
utxos = self.wallet.get_utxos()
|
||||||
messages = [ fmt % (
|
messages = [ fmt % (
|
||||||
utxo.prevout.to_str(),
|
utxo.prevout.to_str(),
|
||||||
self.wallet.get_label(utxo.prevout.txid.hex()),
|
self.wallet.get_label_for_txid(utxo.prevout.txid.hex()),
|
||||||
self.config.format_amount(utxo.value_sats(), whitespaces=True)
|
self.config.format_amount(utxo.value_sats(), whitespaces=True)
|
||||||
) for utxo in utxos]
|
) for utxo in utxos]
|
||||||
self.print_list(2, x, sorted(messages), fmt % ("Outpoint", "Description", "Balance"))
|
self.print_list(2, x, sorted(messages), fmt % ("Outpoint", "Description", "Balance"))
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ class LabelsPlugin(BasePlugin):
|
|||||||
result[key] = value
|
result[key] = value
|
||||||
|
|
||||||
for key, value in result.items():
|
for key, value in result.items():
|
||||||
if force or not wallet.get_label(key):
|
if force or not wallet._get_label(key):
|
||||||
wallet._set_label(key, value)
|
wallet._set_label(key, value)
|
||||||
|
|
||||||
self.logger.info(f"received {len(response)} labels")
|
self.logger.info(f"received {len(response)} labels")
|
||||||
|
|||||||
@@ -1337,10 +1337,16 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
item['capital_gain'] = Fiat(cg, fx.ccy)
|
item['capital_gain'] = Fiat(cg, fx.ccy)
|
||||||
return item
|
return item
|
||||||
|
|
||||||
def get_label(self, key: str) -> str:
|
def _get_label(self, key: str) -> str:
|
||||||
# key is typically: address / txid / LN-payment-hash-hex
|
# key is typically: address / txid / LN-payment-hash-hex
|
||||||
return self._labels.get(key) or ''
|
return self._labels.get(key) or ''
|
||||||
|
|
||||||
|
def get_label_for_address(self, addr: str) -> str:
|
||||||
|
label = self._labels.get(addr) or ''
|
||||||
|
if not label and (request := self.get_request_by_address(addr)):
|
||||||
|
label = request.get_message()
|
||||||
|
return label
|
||||||
|
|
||||||
def get_label_for_txid(self, tx_hash: str) -> str:
|
def get_label_for_txid(self, tx_hash: str) -> str:
|
||||||
return self._labels.get(tx_hash) or self._get_default_label_for_txid(tx_hash)
|
return self._labels.get(tx_hash) or self._get_default_label_for_txid(tx_hash)
|
||||||
|
|
||||||
@@ -1349,7 +1355,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
if not self.db.get_txi_addresses(tx_hash):
|
if not self.db.get_txi_addresses(tx_hash):
|
||||||
labels = []
|
labels = []
|
||||||
for addr in self.db.get_txo_addresses(tx_hash):
|
for addr in self.db.get_txo_addresses(tx_hash):
|
||||||
label = self._labels.get(addr)
|
label = self.get_label_for_address(addr)
|
||||||
if label:
|
if label:
|
||||||
labels.append(label)
|
labels.append(label)
|
||||||
return ', '.join(labels)
|
return ', '.join(labels)
|
||||||
@@ -1357,7 +1363,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
|
|
||||||
def _get_default_label_for_rhash(self, rhash: str) -> str:
|
def _get_default_label_for_rhash(self, rhash: str) -> str:
|
||||||
req = self.get_request(rhash)
|
req = self.get_request(rhash)
|
||||||
return req.message if req else ''
|
return req.get_message() if req else ''
|
||||||
|
|
||||||
def get_label_for_rhash(self, rhash: str) -> str:
|
def get_label_for_rhash(self, rhash: str) -> str:
|
||||||
return self._labels.get(rhash) or self._get_default_label_for_rhash(rhash)
|
return self._labels.get(rhash) or self._get_default_label_for_rhash(rhash)
|
||||||
@@ -2287,7 +2293,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
def get_request_URI(self, req: Invoice) -> str:
|
def get_request_URI(self, req: Invoice) -> str:
|
||||||
# todo: should be a method of invoice?
|
# todo: should be a method of invoice?
|
||||||
addr = req.get_address()
|
addr = req.get_address()
|
||||||
message = self.get_label(addr)
|
message = self.get_label_for_address(addr)
|
||||||
amount = req.get_amount_sat()
|
amount = req.get_amount_sat()
|
||||||
extra_query_params = {}
|
extra_query_params = {}
|
||||||
if req.time and req.exp:
|
if req.time and req.exp:
|
||||||
|
|||||||
Reference in New Issue
Block a user