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"
|
import "controls"
|
||||||
|
|
||||||
//TODO: listen to tx to be bumped, mined = abort this
|
|
||||||
|
|
||||||
ElDialog {
|
ElDialog {
|
||||||
id: dialog
|
id: dialog
|
||||||
|
|
||||||
@@ -256,4 +254,10 @@ ElDialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: cpfpfeebumper
|
||||||
|
function onTxMined() {
|
||||||
|
dialog.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,13 +29,6 @@ ElDialog {
|
|||||||
color: "#aa000000"
|
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 {
|
ColumnLayout {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: parent.height
|
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 {
|
Label {
|
||||||
text: qsTr('Mining fee')
|
text: qsTr('Mining fee')
|
||||||
color: Material.accentColor
|
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 .qewallet import QEWallet
|
||||||
from .qetypes import QEAmount
|
from .qetypes import QEAmount
|
||||||
|
from .util import QtEventListener, event_listener
|
||||||
|
|
||||||
class QETxDetails(QObject):
|
class QETxDetails(QObject, QtEventListener):
|
||||||
def __init__(self, parent=None):
|
|
||||||
super().__init__(parent)
|
|
||||||
|
|
||||||
_logger = get_logger(__name__)
|
_logger = get_logger(__name__)
|
||||||
|
|
||||||
_wallet = None
|
_wallet = None
|
||||||
@@ -55,6 +53,20 @@ class QETxDetails(QObject):
|
|||||||
|
|
||||||
detailsChanged = pyqtSignal()
|
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()
|
walletChanged = pyqtSignal()
|
||||||
@pyqtProperty(QEWallet, notify=walletChanged)
|
@pyqtProperty(QEWallet, notify=walletChanged)
|
||||||
def wallet(self):
|
def wallet(self):
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from electrum.network import NetworkException
|
|||||||
|
|
||||||
from .qewallet import QEWallet
|
from .qewallet import QEWallet
|
||||||
from .qetypes import QEAmount
|
from .qetypes import QEAmount
|
||||||
|
from .util import QtEventListener, event_listener
|
||||||
|
|
||||||
class FeeSlider(QObject):
|
class FeeSlider(QObject):
|
||||||
_wallet = None
|
_wallet = None
|
||||||
@@ -372,18 +373,30 @@ class QETxFinalizer(TxFeeSlider):
|
|||||||
else:
|
else:
|
||||||
return str(self._tx)
|
return str(self._tx)
|
||||||
|
|
||||||
|
# mixin for watching an existing TX based on its txid for verified event
|
||||||
class QETxRbfFeeBumper(TxFeeSlider):
|
# requires self._wallet to contain a QEWallet instance
|
||||||
_logger = get_logger(__name__)
|
# exposes txid qt property
|
||||||
|
# calls get_tx() once txid is set
|
||||||
_oldfee = QEAmount()
|
# calls tx_verified and emits txMined signal once tx is verified
|
||||||
_oldfee_rate = 0
|
class TxMonMixin(QtEventListener):
|
||||||
_orig_tx = None
|
|
||||||
_txid = ''
|
_txid = ''
|
||||||
_rbf = True
|
|
||||||
|
txMined = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
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()
|
txidChanged = pyqtSignal()
|
||||||
@pyqtProperty(str, notify=txidChanged)
|
@pyqtProperty(str, notify=txidChanged)
|
||||||
@@ -397,6 +410,25 @@ class QETxRbfFeeBumper(TxFeeSlider):
|
|||||||
self.get_tx()
|
self.get_tx()
|
||||||
self.txidChanged.emit()
|
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()
|
oldfeeChanged = pyqtSignal()
|
||||||
@pyqtProperty(QEAmount, notify=oldfeeChanged)
|
@pyqtProperty(QEAmount, notify=oldfeeChanged)
|
||||||
def oldfee(self):
|
def oldfee(self):
|
||||||
@@ -502,7 +534,7 @@ class QETxRbfFeeBumper(TxFeeSlider):
|
|||||||
def getNewTx(self):
|
def getNewTx(self):
|
||||||
return str(self._tx)
|
return str(self._tx)
|
||||||
|
|
||||||
class QETxCanceller(TxFeeSlider):
|
class QETxCanceller(TxFeeSlider, TxMonMixin):
|
||||||
_logger = get_logger(__name__)
|
_logger = get_logger(__name__)
|
||||||
|
|
||||||
_oldfee = QEAmount()
|
_oldfee = QEAmount()
|
||||||
@@ -514,18 +546,6 @@ class QETxCanceller(TxFeeSlider):
|
|||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
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()
|
oldfeeChanged = pyqtSignal()
|
||||||
@pyqtProperty(QEAmount, notify=oldfeeChanged)
|
@pyqtProperty(QEAmount, notify=oldfeeChanged)
|
||||||
def oldfee(self):
|
def oldfee(self):
|
||||||
@@ -620,7 +640,7 @@ class QETxCanceller(TxFeeSlider):
|
|||||||
def getNewTx(self):
|
def getNewTx(self):
|
||||||
return str(self._tx)
|
return str(self._tx)
|
||||||
|
|
||||||
class QETxCpfpFeeBumper(TxFeeSlider):
|
class QETxCpfpFeeBumper(TxFeeSlider, TxMonMixin):
|
||||||
_logger = get_logger(__name__)
|
_logger = get_logger(__name__)
|
||||||
|
|
||||||
_input_amount = QEAmount()
|
_input_amount = QEAmount()
|
||||||
@@ -641,18 +661,6 @@ class QETxCpfpFeeBumper(TxFeeSlider):
|
|||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
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()
|
totalFeeChanged = pyqtSignal()
|
||||||
@pyqtProperty(QEAmount, notify=totalFeeChanged)
|
@pyqtProperty(QEAmount, notify=totalFeeChanged)
|
||||||
def totalFee(self):
|
def totalFee(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user