Browse Source

qml: don't initialize instance variables on class scope for non-singletons

(this somehow escaped attention before, as most objects usually don't have multiple instances,
unless multiple wallets are open at the same time.)
Also, move all signal declarations, class constants and variables to the top of class definitions.
master
Sander van Grieken 3 years ago
parent
commit
0bc8460005
  1. 5
      electrum/gui/qml/plugins.py
  2. 32
      electrum/gui/qml/qeaddressdetails.py
  3. 12
      electrum/gui/qml/qeaddresslistmodel.py
  4. 8
      electrum/gui/qml/qebitcoin.py
  5. 9
      electrum/gui/qml/qechanneldetails.py
  6. 20
      electrum/gui/qml/qechannelopener.py
  7. 4
      electrum/gui/qml/qeconfig.py
  8. 15
      electrum/gui/qml/qedaemon.py
  9. 8
      electrum/gui/qml/qefx.py
  10. 24
      electrum/gui/qml/qeinvoice.py
  11. 10
      electrum/gui/qml/qeinvoicelistmodel.py
  12. 14
      electrum/gui/qml/qelnpaymentdetails.py
  13. 21
      electrum/gui/qml/qenetwork.py
  14. 19
      electrum/gui/qml/qeqr.py
  15. 13
      electrum/gui/qml/qerequestdetails.py
  16. 4
      electrum/gui/qml/qeserverlistmodel.py
  17. 36
      electrum/gui/qml/qeswaphelper.py
  18. 24
      electrum/gui/qml/qetransactionlistmodel.py
  19. 70
      electrum/gui/qml/qetxdetails.py
  20. 99
      electrum/gui/qml/qetxfinalizer.py
  21. 27
      electrum/gui/qml/qewallet.py
  22. 16
      electrum/gui/qml/qewalletdb.py

5
electrum/gui/qml/plugins.py

@ -10,10 +10,11 @@ class PluginQObject(QObject):
busyChanged = pyqtSignal() busyChanged = pyqtSignal()
pluginEnabledChanged = pyqtSignal() pluginEnabledChanged = pyqtSignal()
_busy = False
def __init__(self, plugin, parent): def __init__(self, plugin, parent):
super().__init__(parent) super().__init__(parent)
self._busy = False
self.plugin = plugin self.plugin = plugin
self.app = parent self.app = parent

32
electrum/gui/qml/qeaddressdetails.py

@ -8,27 +8,27 @@ from .qewallet import QEWallet
class QEAddressDetails(QObject): class QEAddressDetails(QObject):
def __init__(self, parent=None):
super().__init__(parent)
_logger = get_logger(__name__) _logger = get_logger(__name__)
_wallet = None detailsChanged = pyqtSignal()
_address = None
def __init__(self, parent=None):
super().__init__(parent)
_label = None self._wallet = None
_frozen = False self._address = None
_scriptType = None
_status = None
_balance = QEAmount()
_pubkeys = None
_privkey = None
_derivationPath = None
_numtx = 0
_historyModel = None self._label = None
self._frozen = False
self._scriptType = None
self._status = None
self._balance = QEAmount()
self._pubkeys = None
self._privkey = None
self._derivationPath = None
self._numtx = 0
detailsChanged = pyqtSignal() self._historyModel = None
walletChanged = pyqtSignal() walletChanged = pyqtSignal()
@pyqtProperty(QEWallet, notify=walletChanged) @pyqtProperty(QEWallet, notify=walletChanged)

12
electrum/gui/qml/qeaddresslistmodel.py

@ -13,12 +13,6 @@ if TYPE_CHECKING:
class QEAddressListModel(QAbstractListModel): class QEAddressListModel(QAbstractListModel):
def __init__(self, wallet: 'Abstract_Wallet', parent=None):
super().__init__(parent)
self.wallet = wallet
self.setDirty()
self.init_model()
_logger = get_logger(__name__) _logger = get_logger(__name__)
# define listmodel rolemap # define listmodel rolemap
@ -26,6 +20,12 @@ class QEAddressListModel(QAbstractListModel):
_ROLE_KEYS = range(Qt.UserRole, Qt.UserRole + len(_ROLE_NAMES)) _ROLE_KEYS = range(Qt.UserRole, Qt.UserRole + len(_ROLE_NAMES))
_ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES])) _ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES]))
def __init__(self, wallet: 'Abstract_Wallet', parent=None):
super().__init__(parent)
self.wallet = wallet
self.setDirty()
self.init_model()
def rowCount(self, index): def rowCount(self, index):
return len(self.receive_addresses) + len(self.change_addresses) return len(self.receive_addresses) + len(self.change_addresses)

8
electrum/gui/qml/qebitcoin.py

@ -15,10 +15,6 @@ from electrum.mnemonic import is_any_2fa_seed_type
from .qetypes import QEAmount from .qetypes import QEAmount
class QEBitcoin(QObject): class QEBitcoin(QObject):
def __init__(self, config, parent=None):
super().__init__(parent)
self.config = config
_logger = get_logger(__name__) _logger = get_logger(__name__)
generatedSeedChanged = pyqtSignal() generatedSeedChanged = pyqtSignal()
@ -30,6 +26,10 @@ class QEBitcoin(QObject):
validationMessageChanged = pyqtSignal() validationMessageChanged = pyqtSignal()
_validationMessage = '' _validationMessage = ''
def __init__(self, config, parent=None):
super().__init__(parent)
self.config = config
@pyqtProperty('QString', notify=generatedSeedChanged) @pyqtProperty('QString', notify=generatedSeedChanged)
def generated_seed(self): def generated_seed(self):
return self.generatedSeed return self.generatedSeed

9
electrum/gui/qml/qechanneldetails.py

@ -21,16 +21,17 @@ class QEChannelDetails(QObject, QtEventListener):
Q_ENUMS(State) Q_ENUMS(State)
_wallet = None
_channelid = None
_channel = None
channelChanged = pyqtSignal() channelChanged = pyqtSignal()
channelCloseSuccess = pyqtSignal() channelCloseSuccess = pyqtSignal()
channelCloseFailed = pyqtSignal([str], arguments=['message']) channelCloseFailed = pyqtSignal([str], arguments=['message'])
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._wallet = None
self._channelid = None
self._channel = None
self.register_callbacks() self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy()) self.destroyed.connect(lambda: self.on_destroy())

20
electrum/gui/qml/qechannelopener.py

@ -19,18 +19,8 @@ from .qewallet import QEWallet
class QEChannelOpener(QObject, AuthMixin): class QEChannelOpener(QObject, AuthMixin):
def __init__(self, parent=None):
super().__init__(parent)
_logger = get_logger(__name__) _logger = get_logger(__name__)
_wallet = None
_nodeid = None
_amount = QEAmount()
_valid = False
_opentx = None
_txdetails = None
validationError = pyqtSignal([str,str], arguments=['code','message']) validationError = pyqtSignal([str,str], arguments=['code','message'])
conflictingBackup = pyqtSignal([str], arguments=['message']) conflictingBackup = pyqtSignal([str], arguments=['message'])
channelOpening = pyqtSignal([str], arguments=['peer']) channelOpening = pyqtSignal([str], arguments=['peer'])
@ -39,6 +29,16 @@ class QEChannelOpener(QObject, AuthMixin):
dataChanged = pyqtSignal() # generic notify signal dataChanged = pyqtSignal() # generic notify signal
def __init__(self, parent=None):
super().__init__(parent)
self._wallet = None
self._nodeid = None
self._amount = QEAmount()
self._valid = False
self._opentx = None
self._txdetails = None
walletChanged = pyqtSignal() walletChanged = pyqtSignal()
@pyqtProperty(QEWallet, notify=walletChanged) @pyqtProperty(QEWallet, notify=walletChanged)
def wallet(self): def wallet(self):

4
electrum/gui/qml/qeconfig.py

@ -10,12 +10,12 @@ from .qetypes import QEAmount
from .auth import AuthMixin, auth_protect from .auth import AuthMixin, auth_protect
class QEConfig(AuthMixin, QObject): class QEConfig(AuthMixin, QObject):
_logger = get_logger(__name__)
def __init__(self, config, parent=None): def __init__(self, config, parent=None):
super().__init__(parent) super().__init__(parent)
self.config = config self.config = config
_logger = get_logger(__name__)
autoConnectChanged = pyqtSignal() autoConnectChanged = pyqtSignal()
@pyqtProperty(bool, notify=autoConnectChanged) @pyqtProperty(bool, notify=autoConnectChanged)
def autoConnect(self): def autoConnect(self):

15
electrum/gui/qml/qedaemon.py

@ -107,14 +107,8 @@ class QEWalletListModel(QAbstractListModel):
i += 1 i += 1
class QEDaemon(AuthMixin, QObject): class QEDaemon(AuthMixin, QObject):
def __init__(self, daemon, parent=None):
super().__init__(parent)
self.daemon = daemon
self.qefx = QEFX(daemon.fx, daemon.config)
self._walletdb = QEWalletDB()
self._walletdb.validPasswordChanged.connect(self.passwordValidityCheck)
_logger = get_logger(__name__) _logger = get_logger(__name__)
_available_wallets = None _available_wallets = None
_current_wallet = None _current_wallet = None
_new_wallet_wizard = None _new_wallet_wizard = None
@ -133,6 +127,13 @@ class QEDaemon(AuthMixin, QObject):
walletOpenError = pyqtSignal([str], arguments=["error"]) walletOpenError = pyqtSignal([str], arguments=["error"])
walletDeleteError = pyqtSignal([str,str], arguments=['code', 'message']) walletDeleteError = pyqtSignal([str,str], arguments=['code', 'message'])
def __init__(self, daemon, parent=None):
super().__init__(parent)
self.daemon = daemon
self.qefx = QEFX(daemon.fx, daemon.config)
self._walletdb = QEWalletDB()
self._walletdb.validPasswordChanged.connect(self.passwordValidityCheck)
@pyqtSlot() @pyqtSlot()
def passwordValidityCheck(self): def passwordValidityCheck(self):
if not self._walletdb._validPassword: if not self._walletdb._validPassword:

8
electrum/gui/qml/qefx.py

@ -12,6 +12,10 @@ from .qetypes import QEAmount
from .util import QtEventListener, event_listener from .util import QtEventListener, event_listener
class QEFX(QObject, QtEventListener): class QEFX(QObject, QtEventListener):
_logger = get_logger(__name__)
quotesUpdated = pyqtSignal()
def __init__(self, fxthread: FxThread, config: SimpleConfig, parent=None): def __init__(self, fxthread: FxThread, config: SimpleConfig, parent=None):
super().__init__(parent) super().__init__(parent)
self.fx = fxthread self.fx = fxthread
@ -19,10 +23,6 @@ class QEFX(QObject, QtEventListener):
self.register_callbacks() self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy()) self.destroyed.connect(lambda: self.on_destroy())
_logger = get_logger(__name__)
quotesUpdated = pyqtSignal()
def on_destroy(self): def on_destroy(self):
self.unregister_callbacks() self.unregister_callbacks()

24
electrum/gui/qml/qeinvoice.py

@ -44,14 +44,14 @@ class QEInvoice(QObject):
_logger = get_logger(__name__) _logger = get_logger(__name__)
_wallet = None
_canSave = False
_canPay = False
_key = None
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._wallet = None
self._canSave = False
self._canPay = False
self._key = None
walletChanged = pyqtSignal() walletChanged = pyqtSignal()
@pyqtProperty(QEWallet, notify=walletChanged) @pyqtProperty(QEWallet, notify=walletChanged)
def wallet(self): def wallet(self):
@ -117,15 +117,8 @@ class QEInvoice(QObject):
return self._wallet.wallet.lnworker.num_sats_can_send() return self._wallet.wallet.lnworker.num_sats_can_send()
class QEInvoiceParser(QEInvoice): class QEInvoiceParser(QEInvoice):
_logger = get_logger(__name__) _logger = get_logger(__name__)
_invoiceType = QEInvoice.Type.Invalid
_recipient = ''
_effectiveInvoice = None
_amount = QEAmount()
_userinfo = ''
invoiceChanged = pyqtSignal() invoiceChanged = pyqtSignal()
invoiceSaved = pyqtSignal([str], arguments=['key']) invoiceSaved = pyqtSignal([str], arguments=['key'])
@ -140,6 +133,13 @@ class QEInvoiceParser(QEInvoice):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._invoiceType = QEInvoice.Type.Invalid
self._recipient = ''
self._effectiveInvoice = None
self._amount = QEAmount()
self._userinfo = ''
self.clear() self.clear()
@pyqtProperty(int, notify=invoiceChanged) @pyqtProperty(int, notify=invoiceChanged)

10
electrum/gui/qml/qeinvoicelistmodel.py

@ -13,11 +13,6 @@ from .qetypes import QEAmount
class QEAbstractInvoiceListModel(QAbstractListModel): class QEAbstractInvoiceListModel(QAbstractListModel):
_logger = get_logger(__name__) _logger = get_logger(__name__)
def __init__(self, wallet, parent=None):
super().__init__(parent)
self.wallet = wallet
self.init_model()
# define listmodel rolemap # define listmodel rolemap
_ROLE_NAMES=('key', 'is_lightning', 'timestamp', 'date', 'message', 'amount', _ROLE_NAMES=('key', 'is_lightning', 'timestamp', 'date', 'message', 'amount',
'status', 'status_str', 'address', 'expiration', 'type', 'onchain_fallback', 'status', 'status_str', 'address', 'expiration', 'type', 'onchain_fallback',
@ -26,6 +21,11 @@ class QEAbstractInvoiceListModel(QAbstractListModel):
_ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES])) _ROLE_MAP = dict(zip(_ROLE_KEYS, [bytearray(x.encode()) for x in _ROLE_NAMES]))
_ROLE_RMAP = dict(zip(_ROLE_NAMES, _ROLE_KEYS)) _ROLE_RMAP = dict(zip(_ROLE_NAMES, _ROLE_KEYS))
def __init__(self, wallet, parent=None):
super().__init__(parent)
self.wallet = wallet
self.init_model()
def rowCount(self, index): def rowCount(self, index):
return len(self.invoices) return len(self.invoices)

14
electrum/gui/qml/qelnpaymentdetails.py

@ -7,17 +7,17 @@ from .qetypes import QEAmount
from .qewallet import QEWallet from .qewallet import QEWallet
class QELnPaymentDetails(QObject): class QELnPaymentDetails(QObject):
def __init__(self, parent=None):
super().__init__(parent)
_logger = get_logger(__name__) _logger = get_logger(__name__)
_wallet = None
_key = None
_date = None
detailsChanged = pyqtSignal() detailsChanged = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self._wallet = None
self._key = None
self._date = None
walletChanged = pyqtSignal() walletChanged = pyqtSignal()
@pyqtProperty(QEWallet, notify=walletChanged) @pyqtProperty(QEWallet, notify=walletChanged)
def wallet(self): def wallet(self):

21
electrum/gui/qml/qenetwork.py

@ -8,17 +8,6 @@ from .util import QtEventListener, event_listener
from .qeserverlistmodel import QEServerListModel from .qeserverlistmodel import QEServerListModel
class QENetwork(QObject, QtEventListener): class QENetwork(QObject, QtEventListener):
def __init__(self, network, qeconfig, parent=None):
super().__init__(parent)
self.network = network
self._qeconfig = qeconfig
self._serverListModel = None
self._height = network.get_local_height() # init here, update event can take a while
self.register_callbacks()
self._qeconfig.useGossipChanged.connect(self.on_gossip_setting_changed)
_logger = get_logger(__name__) _logger = get_logger(__name__)
networkUpdated = pyqtSignal() networkUpdated = pyqtSignal()
@ -47,6 +36,16 @@ class QENetwork(QObject, QtEventListener):
_gossipDbChannels = 0 _gossipDbChannels = 0
_gossipDbPolicies = 0 _gossipDbPolicies = 0
def __init__(self, network, qeconfig, parent=None):
super().__init__(parent)
self.network = network
self._qeconfig = qeconfig
self._serverListModel = None
self._height = network.get_local_height() # init here, update event can take a while
self.register_callbacks()
self._qeconfig.useGossipChanged.connect(self.on_gossip_setting_changed)
@event_listener @event_listener
def on_event_network_updated(self, *args): def on_event_network_updated(self, *args):
self.networkUpdated.emit() self.networkUpdated.emit()

19
electrum/gui/qml/qeqr.py

@ -15,21 +15,22 @@ from electrum.i18n import _
from electrum.util import profiler, get_asyncio_loop from electrum.util import profiler, get_asyncio_loop
class QEQRParser(QObject): class QEQRParser(QObject):
def __init__(self, text=None, parent=None):
super().__init__(parent)
self._text = text
self.qrreader = get_qr_reader()
if not self.qrreader:
raise Exception(_("The platform QR detection library is not available."))
_logger = get_logger(__name__) _logger = get_logger(__name__)
busyChanged = pyqtSignal() busyChanged = pyqtSignal()
dataChanged = pyqtSignal() dataChanged = pyqtSignal()
imageChanged = pyqtSignal() imageChanged = pyqtSignal()
_busy = False def __init__(self, text=None, parent=None):
_image = None super().__init__(parent)
self._busy = False
self._image = None
self._text = text
self.qrreader = get_qr_reader()
if not self.qrreader:
raise Exception(_("The platform QR detection library is not available."))
@pyqtSlot('QImage') @pyqtSlot('QImage')
def scanImage(self, image=None): def scanImage(self, image=None):

13
electrum/gui/qml/qerequestdetails.py

@ -26,17 +26,18 @@ class QERequestDetails(QObject, QtEventListener):
_logger = get_logger(__name__) _logger = get_logger(__name__)
_wallet = None
_key = None
_req = None
_timer = None
_amount = None
detailsChanged = pyqtSignal() # generic request properties changed signal detailsChanged = pyqtSignal() # generic request properties changed signal
statusChanged = pyqtSignal() statusChanged = pyqtSignal()
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._wallet = None
self._key = None
self._req = None
self._timer = None
self._amount = None
self.register_callbacks() self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy()) self.destroyed.connect(lambda: self.on_destroy())

4
electrum/gui/qml/qeserverlistmodel.py

@ -13,7 +13,6 @@ from .util import QtEventListener, qt_event_listener, event_listener
class QEServerListModel(QAbstractListModel, QtEventListener): class QEServerListModel(QAbstractListModel, QtEventListener):
_logger = get_logger(__name__) _logger = get_logger(__name__)
_chaintips = 0
# define listmodel rolemap # define listmodel rolemap
_ROLE_NAMES=('name', 'address', 'is_connected', 'is_primary', 'is_tor', 'chain', 'height') _ROLE_NAMES=('name', 'address', 'is_connected', 'is_primary', 'is_tor', 'chain', 'height')
@ -23,6 +22,9 @@ class QEServerListModel(QAbstractListModel, QtEventListener):
def __init__(self, network, parent=None): def __init__(self, network, parent=None):
super().__init__(parent) super().__init__(parent)
self._chaintips = 0
self.network = network self.network = network
self.init_model() self.init_model()
self.register_callbacks() self.register_callbacks()

36
electrum/gui/qml/qeswaphelper.py

@ -18,30 +18,30 @@ from .qewallet import QEWallet
class QESwapHelper(AuthMixin, QObject): class QESwapHelper(AuthMixin, QObject):
_logger = get_logger(__name__) _logger = get_logger(__name__)
_wallet = None
_sliderPos = 0
_rangeMin = 0
_rangeMax = 0
_tx = None
_valid = False
_userinfo = ''
_tosend = QEAmount()
_toreceive = QEAmount()
_serverfeeperc = ''
_serverfee = QEAmount()
_miningfee = QEAmount()
_isReverse = False
_service_available = False
_send_amount = 0
_receive_amount = 0
error = pyqtSignal([str], arguments=['message']) error = pyqtSignal([str], arguments=['message'])
confirm = pyqtSignal([str], arguments=['message']) confirm = pyqtSignal([str], arguments=['message'])
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._wallet = None
self._sliderPos = 0
self._rangeMin = 0
self._rangeMax = 0
self._tx = None
self._valid = False
self._userinfo = ''
self._tosend = QEAmount()
self._toreceive = QEAmount()
self._serverfeeperc = ''
self._serverfee = QEAmount()
self._miningfee = QEAmount()
self._isReverse = False
self._service_available = False
self._send_amount = 0
self._receive_amount = 0
walletChanged = pyqtSignal() walletChanged = pyqtSignal()
@pyqtProperty(QEWallet, notify=walletChanged) @pyqtProperty(QEWallet, notify=walletChanged)
def wallet(self): def wallet(self):

24
electrum/gui/qml/qetransactionlistmodel.py

@ -10,18 +10,6 @@ from .qetypes import QEAmount
from .util import QtEventListener, qt_event_listener from .util import QtEventListener, qt_event_listener
class QETransactionListModel(QAbstractListModel, QtEventListener): class QETransactionListModel(QAbstractListModel, QtEventListener):
def __init__(self, wallet, parent=None, *, onchain_domain=None, include_lightning=True):
super().__init__(parent)
self.wallet = wallet
self.onchain_domain = onchain_domain
self.include_lightning = include_lightning
self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy())
self.requestRefresh.connect(lambda: self.init_model())
self.init_model()
_logger = get_logger(__name__) _logger = get_logger(__name__)
# define listmodel rolemap # define listmodel rolemap
@ -34,6 +22,18 @@ class QETransactionListModel(QAbstractListModel, QtEventListener):
requestRefresh = pyqtSignal() requestRefresh = pyqtSignal()
def __init__(self, wallet, parent=None, *, onchain_domain=None, include_lightning=True):
super().__init__(parent)
self.wallet = wallet
self.onchain_domain = onchain_domain
self.include_lightning = include_lightning
self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy())
self.requestRefresh.connect(lambda: self.init_model())
self.init_model()
def on_destroy(self): def on_destroy(self):
self.unregister_callbacks() self.unregister_callbacks()

70
electrum/gui/qml/qetxdetails.py

@ -12,41 +12,6 @@ from .util import QtEventListener, event_listener
class QETxDetails(QObject, QtEventListener): class QETxDetails(QObject, QtEventListener):
_logger = get_logger(__name__) _logger = get_logger(__name__)
_wallet = None
_txid = ''
_rawtx = ''
_label = ''
_tx = None
_status = ''
_amount = QEAmount()
_lnamount = QEAmount()
_fee = QEAmount()
_inputs = []
_outputs = []
_is_lightning_funding_tx = False
_can_bump = False
_can_dscancel = False
_can_broadcast = False
_can_cpfp = False
_can_save_as_local = False
_can_remove = False
_can_sign = False
_is_unrelated = False
_is_complete = False
_is_mined = False
_is_final = False
_mempool_depth = ''
_date = ''
_height = 0
_confirmations = 0
_txpos = -1
_header_hash = ''
confirmRemoveLocalTx = pyqtSignal([str], arguments=['message']) confirmRemoveLocalTx = pyqtSignal([str], arguments=['message'])
saveTxError = pyqtSignal([str,str], arguments=['code', 'message']) saveTxError = pyqtSignal([str,str], arguments=['code', 'message'])
saveTxSuccess = pyqtSignal() saveTxSuccess = pyqtSignal()
@ -58,6 +23,41 @@ class QETxDetails(QObject, QtEventListener):
self.register_callbacks() self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy()) self.destroyed.connect(lambda: self.on_destroy())
self._wallet = None
self._txid = ''
self._rawtx = ''
self._label = ''
self._tx = None
self._status = ''
self._amount = QEAmount()
self._lnamount = QEAmount()
self._fee = QEAmount()
self._inputs = []
self._outputs = []
self._is_lightning_funding_tx = False
self._can_bump = False
self._can_dscancel = False
self._can_broadcast = False
self._can_cpfp = False
self._can_save_as_local = False
self._can_remove = False
self._can_sign = False
self._is_unrelated = False
self._is_complete = False
self._is_mined = False
self._is_final = False
self._mempool_depth = ''
self._date = ''
self._height = 0
self._confirmations = 0
self._txpos = -1
self._header_hash = ''
def on_destroy(self): def on_destroy(self):
self.unregister_callbacks() self.unregister_callbacks()

99
electrum/gui/qml/qetxfinalizer.py

@ -16,16 +16,16 @@ from .qetypes import QEAmount
from .util import QtEventListener, event_listener from .util import QtEventListener, event_listener
class FeeSlider(QObject): class FeeSlider(QObject):
_wallet = None
_sliderSteps = 0
_sliderPos = 0
_method = -1
_target = ''
_config = None
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._wallet = None
self._sliderSteps = 0
self._sliderPos = 0
self._method = -1
self._target = ''
self._config = None
walletChanged = pyqtSignal() walletChanged = pyqtSignal()
@pyqtProperty(QEWallet, notify=walletChanged) @pyqtProperty(QEWallet, notify=walletChanged)
def wallet(self): def wallet(self):
@ -125,17 +125,17 @@ class FeeSlider(QObject):
raise NotImplementedError() raise NotImplementedError()
class TxFeeSlider(FeeSlider): class TxFeeSlider(FeeSlider):
_fee = QEAmount()
_feeRate = ''
_rbf = False
_tx = None
_outputs = []
_valid = False
_warning = ''
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._fee = QEAmount()
self._feeRate = ''
self._rbf = False
self._tx = None
self._outputs = []
self._valid = False
self._warning = ''
feeChanged = pyqtSignal() feeChanged = pyqtSignal()
@pyqtProperty(QEAmount, notify=feeChanged) @pyqtProperty(QEAmount, notify=feeChanged)
def fee(self): def fee(self):
@ -223,13 +223,13 @@ class QETxFinalizer(TxFeeSlider):
self.f_make_tx = make_tx self.f_make_tx = make_tx
self.f_accept = accept self.f_accept = accept
_logger = get_logger(__name__) self._address = ''
self._amount = QEAmount()
self._effectiveAmount = QEAmount()
self._extraFee = QEAmount()
self._canRbf = False
_address = '' _logger = get_logger(__name__)
_amount = QEAmount()
_effectiveAmount = QEAmount()
_extraFee = QEAmount()
_canRbf = False
addressChanged = pyqtSignal() addressChanged = pyqtSignal()
@pyqtProperty(str, notify=addressChanged) @pyqtProperty(str, notify=addressChanged)
@ -394,12 +394,13 @@ class QETxFinalizer(TxFeeSlider):
# calls get_tx() once txid is set # calls get_tx() once txid is set
# calls tx_verified and emits txMined signal once tx is verified # calls tx_verified and emits txMined signal once tx is verified
class TxMonMixin(QtEventListener): class TxMonMixin(QtEventListener):
_txid = ''
txMined = pyqtSignal() txMined = pyqtSignal()
def __init__(self, parent=None): def __init__(self, parent=None):
self._logger.debug('TxMonMixin.__init__') self._logger.debug('TxMonMixin.__init__')
self._txid = ''
self.register_callbacks() self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy()) self.destroyed.connect(lambda: self.on_destroy())
@ -436,14 +437,14 @@ class TxMonMixin(QtEventListener):
class QETxRbfFeeBumper(TxFeeSlider, TxMonMixin): class QETxRbfFeeBumper(TxFeeSlider, TxMonMixin):
_logger = get_logger(__name__) _logger = get_logger(__name__)
_oldfee = QEAmount()
_oldfee_rate = 0
_orig_tx = None
_rbf = True
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._oldfee = QEAmount()
self._oldfee_rate = 0
self._orig_tx = None
self._rbf = True
oldfeeChanged = pyqtSignal() oldfeeChanged = pyqtSignal()
@pyqtProperty(QEAmount, notify=oldfeeChanged) @pyqtProperty(QEAmount, notify=oldfeeChanged)
def oldfee(self): def oldfee(self):
@ -552,15 +553,15 @@ class QETxRbfFeeBumper(TxFeeSlider, TxMonMixin):
class QETxCanceller(TxFeeSlider, TxMonMixin): class QETxCanceller(TxFeeSlider, TxMonMixin):
_logger = get_logger(__name__) _logger = get_logger(__name__)
_oldfee = QEAmount()
_oldfee_rate = 0
_orig_tx = None
_txid = ''
_rbf = True
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._oldfee = QEAmount()
self._oldfee_rate = 0
self._orig_tx = None
self._txid = ''
self._rbf = True
oldfeeChanged = pyqtSignal() oldfeeChanged = pyqtSignal()
@pyqtProperty(QEAmount, notify=oldfeeChanged) @pyqtProperty(QEAmount, notify=oldfeeChanged)
def oldfee(self): def oldfee(self):
@ -658,24 +659,24 @@ class QETxCanceller(TxFeeSlider, TxMonMixin):
class QETxCpfpFeeBumper(TxFeeSlider, TxMonMixin): class QETxCpfpFeeBumper(TxFeeSlider, TxMonMixin):
_logger = get_logger(__name__) _logger = get_logger(__name__)
_input_amount = QEAmount()
_output_amount = QEAmount()
_fee_for_child = QEAmount()
_total_fee = QEAmount()
_total_fee_rate = 0
_total_size = 0
_parent_tx = None
_new_tx = None
_parent_tx_size = 0
_parent_fee = 0
_max_fee = 0
_txid = ''
_rbf = True
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self._input_amount = QEAmount()
self._output_amount = QEAmount()
self._fee_for_child = QEAmount()
self._total_fee = QEAmount()
self._total_fee_rate = 0
self._total_size = 0
self._parent_tx = None
self._new_tx = None
self._parent_tx_size = 0
self._parent_fee = 0
self._max_fee = 0
self._txid = ''
self._rbf = True
totalFeeChanged = pyqtSignal() totalFeeChanged = pyqtSignal()
@pyqtProperty(QEAmount, notify=totalFeeChanged) @pyqtProperty(QEAmount, notify=totalFeeChanged)
def totalFee(self): def totalFee(self):

27
electrum/gui/qml/qewallet.py

@ -74,28 +74,29 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
_network_signal = pyqtSignal(str, object) _network_signal = pyqtSignal(str, object)
_isUpToDate = False
_synchronizing = False
_synchronizing_progress = ''
_lightningbalance = QEAmount()
_confirmedbalance = QEAmount()
_unconfirmedbalance = QEAmount()
_frozenbalance = QEAmount()
_totalbalance = QEAmount()
_lightningcanreceive = QEAmount()
_lightningcansend = QEAmount()
def __init__(self, wallet: 'Abstract_Wallet', parent=None): def __init__(self, wallet: 'Abstract_Wallet', parent=None):
super().__init__(parent) super().__init__(parent)
self.wallet = wallet self.wallet = wallet
self._isUpToDate = False
self._synchronizing = False
self._synchronizing_progress = ''
self._historyModel = None self._historyModel = None
self._addressModel = None self._addressModel = None
self._requestModel = None self._requestModel = None
self._invoiceModel = None self._invoiceModel = None
self._channelModel = None self._channelModel = None
self._lightningbalance = QEAmount()
self._confirmedbalance = QEAmount()
self._unconfirmedbalance = QEAmount()
self._frozenbalance = QEAmount()
self._totalbalance = QEAmount()
self._lightningcanreceive = QEAmount()
self._lightningcansend = QEAmount()
self.tx_notification_queue = queue.Queue() self.tx_notification_queue = queue.Queue()
self.tx_notification_last_time = 0 self.tx_notification_last_time = 0
@ -420,6 +421,8 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
def lightningBalance(self): def lightningBalance(self):
if self.isLightning: if self.isLightning:
self._lightningbalance.satsInt = int(self.wallet.lnworker.get_balance()) self._lightningbalance.satsInt = int(self.wallet.lnworker.get_balance())
# else:
# self._lightningbalance.satsInt = 0
return self._lightningbalance return self._lightningbalance
@pyqtProperty(QEAmount, notify=balanceChanged) @pyqtProperty(QEAmount, notify=balanceChanged)

16
electrum/gui/qml/qewalletdb.py

@ -10,14 +10,6 @@ from electrum.util import InvalidPassword
from electrum import keystore from electrum import keystore
class QEWalletDB(QObject): class QEWalletDB(QObject):
def __init__(self, parent=None):
super().__init__(parent)
from .qeapp import ElectrumQmlApplication
self.daemon = ElectrumQmlApplication._daemon
self.reset()
_logger = get_logger(__name__) _logger = get_logger(__name__)
fileNotFound = pyqtSignal() fileNotFound = pyqtSignal()
@ -31,6 +23,14 @@ class QEWalletDB(QObject):
readyChanged = pyqtSignal() readyChanged = pyqtSignal()
invalidPassword = pyqtSignal() invalidPassword = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
from .qeapp import ElectrumQmlApplication
self.daemon = ElectrumQmlApplication._daemon
self.reset()
def reset(self): def reset(self):
self._path = None self._path = None
self._needsPassword = False self._needsPassword = False

Loading…
Cancel
Save