diff --git a/electrum/gui/qml/components/CpfpBumpFeeDialog.qml b/electrum/gui/qml/components/CpfpBumpFeeDialog.qml index 158fe5956..15b055e37 100644 --- a/electrum/gui/qml/components/CpfpBumpFeeDialog.qml +++ b/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() + } + } } diff --git a/electrum/gui/qml/components/RbfBumpFeeDialog.qml b/electrum/gui/qml/components/RbfBumpFeeDialog.qml index e98319b96..535b1f110 100644 --- a/electrum/gui/qml/components/RbfBumpFeeDialog.qml +++ b/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() + } + } } diff --git a/electrum/gui/qml/components/RbfCancelDialog.qml b/electrum/gui/qml/components/RbfCancelDialog.qml index 3e4306a45..5e59fc736 100644 --- a/electrum/gui/qml/components/RbfCancelDialog.qml +++ b/electrum/gui/qml/components/RbfCancelDialog.qml @@ -227,4 +227,10 @@ ElDialog { } } + Connections { + target: txcanceller + function onTxMined() { + dialog.close() + } + } } diff --git a/electrum/gui/qml/qetxdetails.py b/electrum/gui/qml/qetxdetails.py index 83682b338..2dc098256 100644 --- a/electrum/gui/qml/qetxdetails.py +++ b/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): diff --git a/electrum/gui/qml/qetxfinalizer.py b/electrum/gui/qml/qetxfinalizer.py index a48e7d52b..f532cbed4 100644 --- a/electrum/gui/qml/qetxfinalizer.py +++ b/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):