qml: detect transaction removed (e.g. replace-by-fee) for qetxdetails and qetxfinalizer,
don't close active feebump/cancel dialogs, but invalidate them, don't close TxDetails page, but show removed status, show broadcast-failed status in TxDetails
This commit is contained in:
@@ -6,7 +6,7 @@ from electrum.i18n import _
|
||||
from electrum.logging import get_logger
|
||||
from electrum.bitcoin import DummyAddress
|
||||
from electrum.util import format_time, TxMinedInfo
|
||||
from electrum.transaction import tx_from_any, Transaction, PartialTxInput, Sighash, PartialTransaction, TxOutpoint
|
||||
from electrum.transaction import tx_from_any, Transaction, PartialTransaction
|
||||
from electrum.network import Network
|
||||
from electrum.address_synchronizer import TX_HEIGHT_UNCONF_PARENT, TX_HEIGHT_UNCONFIRMED, TX_HEIGHT_FUTURE
|
||||
from electrum.wallet import TxSighashDanger
|
||||
@@ -22,7 +22,7 @@ class QETxDetails(QObject, QtEventListener):
|
||||
|
||||
confirmRemoveLocalTx = pyqtSignal([str], arguments=['message'])
|
||||
txRemoved = pyqtSignal()
|
||||
saveTxError = pyqtSignal([str,str], arguments=['code', 'message'])
|
||||
saveTxError = pyqtSignal([str, str], arguments=['code', 'message'])
|
||||
saveTxSuccess = pyqtSignal()
|
||||
|
||||
detailsChanged = pyqtSignal()
|
||||
@@ -59,6 +59,7 @@ class QETxDetails(QObject, QtEventListener):
|
||||
self._is_complete = False
|
||||
self._is_mined = False
|
||||
self._is_rbf_enabled = False
|
||||
self._is_removed = False
|
||||
self._lock_delay = 0
|
||||
self._sighash_danger = TxSighashDanger()
|
||||
|
||||
@@ -90,6 +91,8 @@ class QETxDetails(QObject, QtEventListener):
|
||||
def on_event_removed_transaction(self, wallet, tx):
|
||||
if wallet == self._wallet.wallet and tx.txid() == self._txid:
|
||||
self._logger.debug(f'removed my transaction {tx.txid()}')
|
||||
self._is_removed = True
|
||||
self.update()
|
||||
self.txRemoved.emit()
|
||||
|
||||
walletChanged = pyqtSignal()
|
||||
@@ -184,6 +187,10 @@ class QETxDetails(QObject, QtEventListener):
|
||||
def isMined(self):
|
||||
return self._is_mined
|
||||
|
||||
@pyqtProperty(bool, notify=detailsChanged)
|
||||
def isRemoved(self):
|
||||
return self._is_removed
|
||||
|
||||
@pyqtProperty(str, notify=detailsChanged)
|
||||
def mempoolDepth(self):
|
||||
return self._mempool_depth
|
||||
@@ -267,6 +274,20 @@ class QETxDetails(QObject, QtEventListener):
|
||||
def update(self, from_txid: bool = False):
|
||||
assert self._wallet
|
||||
|
||||
if self._is_removed:
|
||||
self._logger.debug('tx removed, disable gui options')
|
||||
self._can_broadcast = False
|
||||
self._can_bump = False
|
||||
self._can_dscancel = False
|
||||
self._can_cpfp = False
|
||||
self._can_save_as_local = False
|
||||
self._can_remove = False
|
||||
self._can_sign = False
|
||||
self._mempool_depth = ''
|
||||
self._status = _('removed')
|
||||
self.detailsChanged.emit()
|
||||
return
|
||||
|
||||
if from_txid:
|
||||
self._tx = self._wallet.wallet.db.get_transaction(self._txid)
|
||||
assert self._tx is not None, f'unknown txid "{self._txid}"'
|
||||
|
||||
Reference in New Issue
Block a user