refactor QEAddressListModel and QETransactionListModel to their own files
This commit is contained in:
72
electrum/gui/qml/qeaddresslistmodel.py
Normal file
72
electrum/gui/qml/qeaddresslistmodel.py
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
|
||||||
|
from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex
|
||||||
|
|
||||||
|
from electrum.logging import get_logger
|
||||||
|
from electrum.util import Satoshis
|
||||||
|
|
||||||
|
class QEAddressListModel(QAbstractListModel):
|
||||||
|
def __init__(self, wallet, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.wallet = wallet
|
||||||
|
self.receive_addresses = []
|
||||||
|
self.change_addresses = []
|
||||||
|
|
||||||
|
|
||||||
|
_logger = get_logger(__name__)
|
||||||
|
|
||||||
|
# define listmodel rolemap
|
||||||
|
_ROLE_NAMES=('type','address','label','balance','numtx', 'held')
|
||||||
|
_ROLE_KEYS = range(Qt.UserRole + 1, Qt.UserRole + 1 + len(_ROLE_NAMES))
|
||||||
|
_ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES]))
|
||||||
|
|
||||||
|
def rowCount(self, index):
|
||||||
|
return len(self.receive_addresses) + len(self.change_addresses)
|
||||||
|
|
||||||
|
def roleNames(self):
|
||||||
|
return self._ROLE_MAP
|
||||||
|
|
||||||
|
def data(self, index, role):
|
||||||
|
if index.row() > len(self.receive_addresses) - 1:
|
||||||
|
address = self.change_addresses[index.row() - len(self.receive_addresses)]
|
||||||
|
else:
|
||||||
|
address = self.receive_addresses[index.row()]
|
||||||
|
role_index = role - (Qt.UserRole + 1)
|
||||||
|
value = address[self._ROLE_NAMES[role_index]]
|
||||||
|
if isinstance(value, bool) or isinstance(value, list) or isinstance(value, int) or value is None:
|
||||||
|
return value
|
||||||
|
if isinstance(value, Satoshis):
|
||||||
|
return value.value
|
||||||
|
return str(value)
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
self.beginResetModel()
|
||||||
|
self.receive_addresses = []
|
||||||
|
self.change_addresses = []
|
||||||
|
self.endResetModel()
|
||||||
|
|
||||||
|
# initial model data
|
||||||
|
@pyqtSlot()
|
||||||
|
def init_model(self):
|
||||||
|
r_addresses = self.wallet.get_receiving_addresses()
|
||||||
|
c_addresses = self.wallet.get_change_addresses()
|
||||||
|
n_addresses = len(r_addresses) + len(c_addresses)
|
||||||
|
|
||||||
|
def insert_row(atype, alist, address):
|
||||||
|
item = {}
|
||||||
|
item['type'] = atype
|
||||||
|
item['address'] = address
|
||||||
|
item['numtx'] = self.wallet.get_address_history_len(address)
|
||||||
|
item['label'] = self.wallet.get_label(address)
|
||||||
|
c, u, x = self.wallet.get_addr_balance(address)
|
||||||
|
item['balance'] = c + u + x
|
||||||
|
item['held'] = self.wallet.is_frozen_address(address)
|
||||||
|
alist.append(item)
|
||||||
|
|
||||||
|
self.clear()
|
||||||
|
self.beginInsertRows(QModelIndex(), 0, n_addresses - 1)
|
||||||
|
for address in r_addresses:
|
||||||
|
insert_row('receive', self.receive_addresses, address)
|
||||||
|
for address in c_addresses:
|
||||||
|
insert_row('change', self.change_addresses, address)
|
||||||
|
self.endInsertRows()
|
||||||
|
|
||||||
56
electrum/gui/qml/qetransactionlistmodel.py
Normal file
56
electrum/gui/qml/qetransactionlistmodel.py
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
|
||||||
|
from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex
|
||||||
|
|
||||||
|
from electrum.logging import get_logger
|
||||||
|
from electrum.util import Satoshis
|
||||||
|
|
||||||
|
class QETransactionListModel(QAbstractListModel):
|
||||||
|
def __init__(self, wallet, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.wallet = wallet
|
||||||
|
self.tx_history = []
|
||||||
|
|
||||||
|
_logger = get_logger(__name__)
|
||||||
|
|
||||||
|
# define listmodel rolemap
|
||||||
|
_ROLE_NAMES=('txid','fee_sat','height','confirmations','timestamp','monotonic_timestamp','incoming','bc_value',
|
||||||
|
'bc_balance','date','label','txpos_in_block','fee','inputs','outputs')
|
||||||
|
_ROLE_KEYS = range(Qt.UserRole + 1, Qt.UserRole + 1 + len(_ROLE_NAMES))
|
||||||
|
_ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES]))
|
||||||
|
|
||||||
|
def rowCount(self, index):
|
||||||
|
return len(self.tx_history)
|
||||||
|
|
||||||
|
def roleNames(self):
|
||||||
|
return self._ROLE_MAP
|
||||||
|
|
||||||
|
def data(self, index, role):
|
||||||
|
tx = self.tx_history[index.row()]
|
||||||
|
role_index = role - (Qt.UserRole + 1)
|
||||||
|
value = tx[self._ROLE_NAMES[role_index]]
|
||||||
|
if isinstance(value, bool) or isinstance(value, list) or isinstance(value, int) or value is None:
|
||||||
|
return value
|
||||||
|
if isinstance(value, Satoshis):
|
||||||
|
return value.value
|
||||||
|
return str(value)
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
self.beginResetModel()
|
||||||
|
self.tx_history = []
|
||||||
|
self.endResetModel()
|
||||||
|
|
||||||
|
# initial model data
|
||||||
|
def init_model(self):
|
||||||
|
history = self.wallet.get_detailed_history(show_addresses = True)
|
||||||
|
txs = history['transactions']
|
||||||
|
# use primitives
|
||||||
|
for tx in txs:
|
||||||
|
for output in tx['outputs']:
|
||||||
|
output['value'] = output['value'].value
|
||||||
|
|
||||||
|
self.clear()
|
||||||
|
self.beginInsertRows(QModelIndex(), 0, len(txs) - 1)
|
||||||
|
self.tx_history = txs
|
||||||
|
self.tx_history.reverse()
|
||||||
|
self.endInsertRows()
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl
|
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl
|
||||||
from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex, QByteArray
|
|
||||||
|
|
||||||
from typing import Optional, TYPE_CHECKING, Sequence, List, Union
|
from typing import Optional, TYPE_CHECKING, Sequence, List, Union
|
||||||
|
|
||||||
@@ -8,127 +7,13 @@ from electrum.util import register_callback, Satoshis, format_time
|
|||||||
from electrum.logging import get_logger
|
from electrum.logging import get_logger
|
||||||
from electrum.wallet import Wallet, Abstract_Wallet
|
from electrum.wallet import Wallet, Abstract_Wallet
|
||||||
from electrum import bitcoin
|
from electrum import bitcoin
|
||||||
from electrum.transaction import Transaction, tx_from_any, PartialTransaction, PartialTxOutput
|
from electrum.transaction import PartialTxOutput
|
||||||
from electrum.invoices import (Invoice, InvoiceError, PR_TYPE_ONCHAIN, PR_TYPE_LN,
|
from electrum.invoices import (Invoice, InvoiceError, PR_TYPE_ONCHAIN, PR_TYPE_LN,
|
||||||
PR_DEFAULT_EXPIRATION_WHEN_CREATING, PR_PAID, PR_UNPAID, PR_UNKNOWN, PR_EXPIRED, PR_UNCONFIRMED, PR_TYPE_ONCHAIN, PR_TYPE_LN)
|
PR_DEFAULT_EXPIRATION_WHEN_CREATING, PR_PAID, PR_UNPAID, PR_UNKNOWN, PR_EXPIRED, PR_UNCONFIRMED, PR_TYPE_ONCHAIN, PR_TYPE_LN)
|
||||||
|
|
||||||
from .qerequestlistmodel import QERequestListModel
|
from .qerequestlistmodel import QERequestListModel
|
||||||
|
from .qetransactionlistmodel import QETransactionListModel
|
||||||
class QETransactionListModel(QAbstractListModel):
|
from .qeaddresslistmodel import QEAddressListModel
|
||||||
def __init__(self, wallet, parent=None):
|
|
||||||
super().__init__(parent)
|
|
||||||
self.wallet = wallet
|
|
||||||
self.tx_history = []
|
|
||||||
|
|
||||||
_logger = get_logger(__name__)
|
|
||||||
|
|
||||||
# define listmodel rolemap
|
|
||||||
_ROLE_NAMES=('txid','fee_sat','height','confirmations','timestamp','monotonic_timestamp','incoming','bc_value',
|
|
||||||
'bc_balance','date','label','txpos_in_block','fee','inputs','outputs')
|
|
||||||
_ROLE_KEYS = range(Qt.UserRole + 1, Qt.UserRole + 1 + len(_ROLE_NAMES))
|
|
||||||
_ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES]))
|
|
||||||
|
|
||||||
def rowCount(self, index):
|
|
||||||
return len(self.tx_history)
|
|
||||||
|
|
||||||
def roleNames(self):
|
|
||||||
return self._ROLE_MAP
|
|
||||||
|
|
||||||
def data(self, index, role):
|
|
||||||
tx = self.tx_history[index.row()]
|
|
||||||
role_index = role - (Qt.UserRole + 1)
|
|
||||||
value = tx[self._ROLE_NAMES[role_index]]
|
|
||||||
if isinstance(value, bool) or isinstance(value, list) or isinstance(value, int) or value is None:
|
|
||||||
return value
|
|
||||||
if isinstance(value, Satoshis):
|
|
||||||
return value.value
|
|
||||||
return str(value)
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
self.beginResetModel()
|
|
||||||
self.tx_history = []
|
|
||||||
self.endResetModel()
|
|
||||||
|
|
||||||
# initial model data
|
|
||||||
def init_model(self):
|
|
||||||
history = self.wallet.get_detailed_history(show_addresses = True)
|
|
||||||
txs = history['transactions']
|
|
||||||
# use primitives
|
|
||||||
for tx in txs:
|
|
||||||
for output in tx['outputs']:
|
|
||||||
output['value'] = output['value'].value
|
|
||||||
|
|
||||||
self.clear()
|
|
||||||
self.beginInsertRows(QModelIndex(), 0, len(txs) - 1)
|
|
||||||
self.tx_history = txs
|
|
||||||
self.tx_history.reverse()
|
|
||||||
self.endInsertRows()
|
|
||||||
|
|
||||||
class QEAddressListModel(QAbstractListModel):
|
|
||||||
def __init__(self, wallet, parent=None):
|
|
||||||
super().__init__(parent)
|
|
||||||
self.wallet = wallet
|
|
||||||
self.receive_addresses = []
|
|
||||||
self.change_addresses = []
|
|
||||||
|
|
||||||
|
|
||||||
_logger = get_logger(__name__)
|
|
||||||
|
|
||||||
# define listmodel rolemap
|
|
||||||
_ROLE_NAMES=('type','address','label','balance','numtx', 'held')
|
|
||||||
_ROLE_KEYS = range(Qt.UserRole + 1, Qt.UserRole + 1 + len(_ROLE_NAMES))
|
|
||||||
_ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES]))
|
|
||||||
|
|
||||||
def rowCount(self, index):
|
|
||||||
return len(self.receive_addresses) + len(self.change_addresses)
|
|
||||||
|
|
||||||
def roleNames(self):
|
|
||||||
return self._ROLE_MAP
|
|
||||||
|
|
||||||
def data(self, index, role):
|
|
||||||
if index.row() > len(self.receive_addresses) - 1:
|
|
||||||
address = self.change_addresses[index.row() - len(self.receive_addresses)]
|
|
||||||
else:
|
|
||||||
address = self.receive_addresses[index.row()]
|
|
||||||
role_index = role - (Qt.UserRole + 1)
|
|
||||||
value = address[self._ROLE_NAMES[role_index]]
|
|
||||||
if isinstance(value, bool) or isinstance(value, list) or isinstance(value, int) or value is None:
|
|
||||||
return value
|
|
||||||
if isinstance(value, Satoshis):
|
|
||||||
return value.value
|
|
||||||
return str(value)
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
self.beginResetModel()
|
|
||||||
self.receive_addresses = []
|
|
||||||
self.change_addresses = []
|
|
||||||
self.endResetModel()
|
|
||||||
|
|
||||||
# initial model data
|
|
||||||
@pyqtSlot()
|
|
||||||
def init_model(self):
|
|
||||||
r_addresses = self.wallet.get_receiving_addresses()
|
|
||||||
c_addresses = self.wallet.get_change_addresses()
|
|
||||||
n_addresses = len(r_addresses) + len(c_addresses)
|
|
||||||
|
|
||||||
def insert_row(atype, alist, address):
|
|
||||||
item = {}
|
|
||||||
item['type'] = atype
|
|
||||||
item['address'] = address
|
|
||||||
item['numtx'] = self.wallet.get_address_history_len(address)
|
|
||||||
item['label'] = self.wallet.get_label(address)
|
|
||||||
c, u, x = self.wallet.get_addr_balance(address)
|
|
||||||
item['balance'] = c + u + x
|
|
||||||
item['held'] = self.wallet.is_frozen_address(address)
|
|
||||||
alist.append(item)
|
|
||||||
|
|
||||||
self.clear()
|
|
||||||
self.beginInsertRows(QModelIndex(), 0, n_addresses - 1)
|
|
||||||
for address in r_addresses:
|
|
||||||
insert_row('receive', self.receive_addresses, address)
|
|
||||||
for address in c_addresses:
|
|
||||||
insert_row('change', self.change_addresses, address)
|
|
||||||
self.endInsertRows()
|
|
||||||
|
|
||||||
class QEWallet(QObject):
|
class QEWallet(QObject):
|
||||||
def __init__(self, wallet, parent=None):
|
def __init__(self, wallet, parent=None):
|
||||||
|
|||||||
Reference in New Issue
Block a user