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.
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,4 +227,10 @@ ElDialog {
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: txcanceller
|
||||
function onTxMined() {
|
||||
dialog.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user