Browse Source

qml: add busy property and guards around swaphelper

master
Sander van Grieken 3 years ago
parent
commit
5d350184a4
  1. 2
      electrum/gui/qml/components/SwapDialog.qml
  2. 22
      electrum/gui/qml/qeswaphelper.py

2
electrum/gui/qml/components/SwapDialog.qml

@ -242,7 +242,7 @@ ElDialog {
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr('Ok') text: qsTr('Ok')
icon.source: Qt.resolvedUrl('../../icons/confirmed.png') icon.source: Qt.resolvedUrl('../../icons/confirmed.png')
enabled: swaphelper.valid enabled: swaphelper.valid && !swaphelper.busy
onClicked: { onClicked: {
console.log('Swap triggered from dialog ' + this + ' using swaphelper ' + swaphelper) console.log('Swap triggered from dialog ' + this + ' using swaphelper ' + swaphelper)
swaphelper.executeSwap() swaphelper.executeSwap()

22
electrum/gui/qml/qeswaphelper.py

@ -33,6 +33,7 @@ class QESwapHelper(AuthMixin, QObject):
self._rangeMax = 0 self._rangeMax = 0
self._tx = None self._tx = None
self._valid = False self._valid = False
self._busy = False
self._userinfo = ' '.join([ self._userinfo = ' '.join([
_('Move the slider to set the amount and direction of the swap.'), _('Move the slider to set the amount and direction of the swap.'),
_('Swapping lightning funds for onchain funds will increase your capacity to receive lightning payments.'), _('Swapping lightning funds for onchain funds will increase your capacity to receive lightning payments.'),
@ -201,6 +202,17 @@ class QESwapHelper(AuthMixin, QObject):
self._isReverse = isReverse self._isReverse = isReverse
self.isReverseChanged.emit() self.isReverseChanged.emit()
busyChanged = pyqtSignal()
@pyqtProperty(bool, notify=busyChanged)
def busy(self):
return self._busy
@busy.setter
def busy(self, busy):
if self._busy != busy:
self._busy = busy
self.busyChanged.emit()
def init_swap_slider_range(self): def init_swap_slider_range(self):
lnworker = self._wallet.wallet.lnworker lnworker = self._wallet.wallet.lnworker
@ -349,6 +361,8 @@ class QESwapHelper(AuthMixin, QObject):
except Exception as e: except Exception as e:
self._logger.error(str(e)) self._logger.error(str(e))
self.swapFailed.emit(str(e)) self.swapFailed.emit(str(e))
finally:
self.busy = False
threading.Thread(target=swap_task, daemon=True).start() threading.Thread(target=swap_task, daemon=True).start()
@ -374,6 +388,8 @@ class QESwapHelper(AuthMixin, QObject):
except Exception as e: except Exception as e:
self._logger.error(str(e)) self._logger.error(str(e))
self.swapFailed.emit(str(e)) self.swapFailed.emit(str(e))
finally:
self.busy = False
threading.Thread(target=swap_task, daemon=True).start() threading.Thread(target=swap_task, daemon=True).start()
@ -383,6 +399,11 @@ class QESwapHelper(AuthMixin, QObject):
if not self._wallet.wallet.network: if not self._wallet.wallet.network:
self.error.emit(_("You are offline.")) self.error.emit(_("You are offline."))
return return
if self._busy:
self._logger.error('swap already in progress for this swaphelper')
return
if confirm: if confirm:
self._do_execute_swap() self._do_execute_swap()
return return
@ -396,6 +417,7 @@ class QESwapHelper(AuthMixin, QObject):
@auth_protect @auth_protect
def _do_execute_swap(self): def _do_execute_swap(self):
self.busy = True
if self.isReverse: if self.isReverse:
lightning_amount = self._send_amount lightning_amount = self._send_amount
onchain_amount = self._receive_amount onchain_amount = self._receive_amount

Loading…
Cancel
Save