Browse Source

qml: listen for verified callbacks in fee bumpers, tx canceller and txdetails.

TxDetails updates the page, Rbf adn Cpfp fee bump dialogs and RbfCancelDialog auto-close.
master
Sander van Grieken 3 years ago
parent
commit
b7dcc1277c
  1. 8
      electrum/gui/qml/components/CpfpBumpFeeDialog.qml
  2. 46
      electrum/gui/qml/components/RbfBumpFeeDialog.qml
  3. 6
      electrum/gui/qml/components/RbfCancelDialog.qml
  4. 20
      electrum/gui/qml/qetxdetails.py
  5. 78
      electrum/gui/qml/qetxfinalizer.py

8
electrum/gui/qml/components/CpfpBumpFeeDialog.qml

@ -7,8 +7,6 @@ import org.electrum 1.0
import "controls"
//TODO: listen to tx to be bumped, mined = abort this
ElDialog {
id: dialog
@ -256,4 +254,10 @@ ElDialog {
}
}
Connections {
target: cpfpfeebumper
function onTxMined() {
dialog.close()
}
}
}

46
electrum/gui/qml/components/RbfBumpFeeDialog.qml

@ -29,13 +29,6 @@ ElDialog {
color: "#aa000000"
}
// function updateAmountText() {
// btcValue.text = Config.formatSats(finalizer.effectiveAmount, false)
// fiatValue.text = Daemon.fx.enabled
// ? '(' + Daemon.fx.fiatValue(finalizer.effectiveAmount, false) + ' ' + Daemon.fx.fiatCurrency + ')'
// : ''
// }
ColumnLayout {
width: parent.width
height: parent.height
@ -81,39 +74,6 @@ ElDialog {
}
}
// Label {
// id: amountLabel
// text: qsTr('Amount to send')
// color: Material.accentColor
// }
//
// RowLayout {
// Layout.fillWidth: true
// Label {
// id: btcValue
// font.bold: true
// }
//
// Label {
// text: Config.baseUnit
// color: Material.accentColor
// }
//
// Label {
// id: fiatValue
// Layout.fillWidth: true
// font.pixelSize: constants.fontSizeMedium
// }
//
// Component.onCompleted: updateAmountText()
// Connections {
// target: finalizer
// function onEffectiveAmountChanged() {
// updateAmountText()
// }
// }
// }
Label {
text: qsTr('Mining fee')
color: Material.accentColor
@ -261,4 +221,10 @@ ElDialog {
}
}
Connections {
target: rbffeebumper
function onTxMined() {
dialog.close()
}
}
}

6
electrum/gui/qml/components/RbfCancelDialog.qml

@ -227,4 +227,10 @@ ElDialog {
}
}
Connections {
target: txcanceller
function onTxMined() {
dialog.close()
}
}
}

20
electrum/gui/qml/qetxdetails.py

@ -7,11 +7,9 @@ from electrum.transaction import tx_from_any
from .qewallet import QEWallet
from .qetypes import QEAmount
from .util import QtEventListener, event_listener
class QETxDetails(QObject):
def __init__(self, parent=None):
super().__init__(parent)
class QETxDetails(QObject, QtEventListener):
_logger = get_logger(__name__)
_wallet = None
@ -55,6 +53,20 @@ class QETxDetails(QObject):
detailsChanged = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy())
def on_destroy(self):
self.unregister_callbacks()
@event_listener
def on_event_verified(self, wallet, txid, info):
if wallet == self._wallet.wallet and txid == self._txid:
self._logger.debug('verified event for our txid %s' % txid)
self.update()
walletChanged = pyqtSignal()
@pyqtProperty(QEWallet, notify=walletChanged)
def wallet(self):

78
electrum/gui/qml/qetxfinalizer.py

@ -12,6 +12,7 @@ from electrum.network import NetworkException
from .qewallet import QEWallet
from .qetypes import QEAmount
from .util import QtEventListener, event_listener
class FeeSlider(QObject):
_wallet = None
@ -372,18 +373,30 @@ class QETxFinalizer(TxFeeSlider):
else:
return str(self._tx)
class QETxRbfFeeBumper(TxFeeSlider):
_logger = get_logger(__name__)
_oldfee = QEAmount()
_oldfee_rate = 0
_orig_tx = None
# mixin for watching an existing TX based on its txid for verified event
# requires self._wallet to contain a QEWallet instance
# exposes txid qt property
# calls get_tx() once txid is set
# calls tx_verified and emits txMined signal once tx is verified
class TxMonMixin(QtEventListener):
_txid = ''
_rbf = True
txMined = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self._logger.debug('TxMonMixin.__init__')
self.register_callbacks()
self.destroyed.connect(lambda: self.on_destroy())
def on_destroy(self):
self.unregister_callbacks()
@event_listener
def on_event_verified(self, wallet, txid, info):
if wallet == self._wallet.wallet and txid == self._txid:
self._logger.debug('verified event for our txid %s' % txid)
self.tx_verified()
self.txMined.emit()
txidChanged = pyqtSignal()
@pyqtProperty(str, notify=txidChanged)
@ -397,6 +410,25 @@ class QETxRbfFeeBumper(TxFeeSlider):
self.get_tx()
self.txidChanged.emit()
# override
def get_tx(self):
pass
# override
def tx_verified(self):
pass
class QETxRbfFeeBumper(TxFeeSlider, TxMonMixin):
_logger = get_logger(__name__)
_oldfee = QEAmount()
_oldfee_rate = 0
_orig_tx = None
_rbf = True
def __init__(self, parent=None):
super().__init__(parent)
oldfeeChanged = pyqtSignal()
@pyqtProperty(QEAmount, notify=oldfeeChanged)
def oldfee(self):
@ -502,7 +534,7 @@ class QETxRbfFeeBumper(TxFeeSlider):
def getNewTx(self):
return str(self._tx)
class QETxCanceller(TxFeeSlider):
class QETxCanceller(TxFeeSlider, TxMonMixin):
_logger = get_logger(__name__)
_oldfee = QEAmount()
@ -514,18 +546,6 @@ class QETxCanceller(TxFeeSlider):
def __init__(self, parent=None):
super().__init__(parent)
txidChanged = pyqtSignal()
@pyqtProperty(str, notify=txidChanged)
def txid(self):
return self._txid
@txid.setter
def txid(self, txid):
if self._txid != txid:
self._txid = txid
self.get_tx()
self.txidChanged.emit()
oldfeeChanged = pyqtSignal()
@pyqtProperty(QEAmount, notify=oldfeeChanged)
def oldfee(self):
@ -620,7 +640,7 @@ class QETxCanceller(TxFeeSlider):
def getNewTx(self):
return str(self._tx)
class QETxCpfpFeeBumper(TxFeeSlider):
class QETxCpfpFeeBumper(TxFeeSlider, TxMonMixin):
_logger = get_logger(__name__)
_input_amount = QEAmount()
@ -641,18 +661,6 @@ class QETxCpfpFeeBumper(TxFeeSlider):
def __init__(self, parent=None):
super().__init__(parent)
txidChanged = pyqtSignal()
@pyqtProperty(str, notify=txidChanged)
def txid(self):
return self._txid
@txid.setter
def txid(self, txid):
if self._txid != txid:
self._txid = txid
self.get_tx()
self.txidChanged.emit()
totalFeeChanged = pyqtSignal()
@pyqtProperty(QEAmount, notify=totalFeeChanged)
def totalFee(self):

Loading…
Cancel
Save