1
0

qml: run tx broadcast in thread, re-enable broadcast button in TxDetails when broadcast fails

show notification when broadcast fails
This commit is contained in:
Sander van Grieken
2022-10-25 16:24:56 +02:00
parent 902f16204c
commit 571c626eb4
3 changed files with 40 additions and 13 deletions

View File

@@ -62,7 +62,7 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
paymentFailed = pyqtSignal([str,str], arguments=['key','reason'])
requestNewPassword = pyqtSignal()
transactionSigned = pyqtSignal([str], arguments=['txid'])
#broadcastSucceeded = pyqtSignal([str], arguments=['txid'])
broadcastSucceeded = pyqtSignal([str], arguments=['txid'])
broadcastFailed = pyqtSignal([str,str,str], arguments=['txid','code','reason'])
labelsUpdated = pyqtSignal()
otpRequested = pyqtSignal()
@@ -476,21 +476,25 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
def broadcast(self, tx):
assert tx.is_complete()
self.network = self.wallet.network # TODO not always defined?
network = self.wallet.network # TODO not always defined?
try:
self._logger.info('running broadcast in thread')
self.network.run_from_another_thread(self.network.broadcast_transaction(tx))
self._logger.info('broadcast submit done')
except TxBroadcastError as e:
self.broadcastFailed.emit(tx.txid(),'',repr(e))
self._logger.error(e)
except BestEffortRequestFailed as e:
self.broadcastFailed.emit(tx.txid(),'',repr(e))
self._logger.error(e)
def broadcast_thread():
try:
self._logger.info('running broadcast in thread')
result = network.run_from_another_thread(network.broadcast_transaction(tx))
self._logger.info(repr(result))
except TxBroadcastError as e:
self._logger.error(repr(e))
self.broadcastFailed.emit(tx.txid(),'',repr(e))
except BestEffortRequestFailed as e:
self._logger.error(repr(e))
self.broadcastFailed.emit(tx.txid(),'',repr(e))
else:
self.broadcastSucceeded.emit(tx.txid())
threading.Thread(target=broadcast_thread).start()
#TODO: properly catch server side errors, e.g. bad-txns-inputs-missingorspent
#might need callback from network.py
paymentAuthRejected = pyqtSignal()
def ln_auth_rejected(self):