commit ede9b4382a899b8b12c4c96dc892d54dffc59d11
parent f453bfe82ecdc5b216f51b18b7cb110c6ba137d2
Author: SomberNight <somber.night@protonmail.com>
Date: Wed, 16 Dec 2020 17:17:30 +0100
qt swap dialog: attempt at clearer logic (at the cost of more lines)
fixes #6853
Diffstat:
1 file changed, 37 insertions(+), 20 deletions(-)
diff --git a/electrum/gui/qt/swap_dialog.py b/electrum/gui/qt/swap_dialog.py
@@ -104,6 +104,7 @@ class SwapDialog(WindowModalDialog):
self.is_reverse = not self.is_reverse
self.send_amount_e.setAmount(None)
self.recv_amount_e.setAmount(None)
+ self.max_button.setChecked(False)
self.update()
def spend_max(self):
@@ -115,19 +116,20 @@ class SwapDialog(WindowModalDialog):
else:
self.send_amount_e.setAmount(None)
self.update_fee()
+ self.update_ok_button()
def uncheck_max(self):
self.max_button.setChecked(False)
self.update()
def _spend_max_forward_swap(self):
- self.update_tx('!')
+ self._update_tx('!')
if self.tx:
amount = self.tx.output_value_for_address(ln_dummy_address())
max_amt = self.swap_manager.get_max_amount()
if amount > max_amt:
amount = max_amt
- self.update_tx(amount)
+ self._update_tx(amount)
if self.tx:
amount = self.tx.output_value_for_address(ln_dummy_address())
assert amount <= max_amt
@@ -155,8 +157,9 @@ class SwapDialog(WindowModalDialog):
self.recv_amount_e.setStyleSheet(ColorScheme.BLUE.as_stylesheet())
self.recv_amount_e.follows = False
self.send_follows = False
- self.ok_button.setEnabled((recv_amount is not None)
- and (self.tx is not None or self.is_reverse))
+ self._update_tx(send_amount)
+ self.update_fee()
+ self.update_ok_button()
def on_recv_edited(self):
if self.recv_amount_e.follows:
@@ -171,8 +174,9 @@ class SwapDialog(WindowModalDialog):
self.send_amount_e.setStyleSheet(ColorScheme.BLUE.as_stylesheet())
self.send_amount_e.follows = False
self.send_follows = True
- self.ok_button.setEnabled((send_amount is not None)
- and (self.tx is not None or self.is_reverse))
+ self._update_tx(send_amount)
+ self.update_fee()
+ self.update_ok_button()
def update(self):
sm = self.swap_manager
@@ -186,25 +190,17 @@ class SwapDialog(WindowModalDialog):
server_fee_str = '%.2f'%sm.percentage + '% + ' + self.window.format_amount(server_mining_fee) + ' ' + self.window.base_unit()
self.server_fee_label.setText(server_fee_str)
self.server_fee_label.repaint() # macOS hack for #6269
+ self.update_tx()
self.update_fee()
+ self.update_ok_button()
def update_fee(self):
- self.tx = None
- is_max = self.max_button.isChecked()
+ """Updates self.fee_label. No other side-effects."""
if self.is_reverse:
- if is_max:
- self._spend_max_reverse_swap()
sm = self.swap_manager
fee = sm.get_claim_fee()
else:
- if is_max:
- self._spend_max_forward_swap()
- else:
- onchain_amount = self.send_amount_e.get_amount()
- self.update_tx(onchain_amount)
fee = self.tx.get_fee() if self.tx else None
- if self.tx is None:
- self.ok_button.setEnabled(False)
fee_text = self.window.format_amount(fee) + ' ' + self.window.base_unit() if fee else ''
self.fee_label.setText(fee_text)
self.fee_label.repaint() # macOS hack for #6269
@@ -233,10 +229,22 @@ class SwapDialog(WindowModalDialog):
return
self.window.protect(self.do_normal_swap, (lightning_amount, onchain_amount))
- def update_tx(self, onchain_amount):
+ def update_tx(self):
+ if self.is_reverse:
+ return
+ is_max = self.max_button.isChecked()
+ if is_max:
+ self._spend_max_forward_swap()
+ else:
+ onchain_amount = self.send_amount_e.get_amount()
+ self._update_tx(onchain_amount)
+
+ def _update_tx(self, onchain_amount):
+ """Updates self.tx. No other side-effects."""
+ if self.is_reverse:
+ return
if onchain_amount is None:
self.tx = None
- self.ok_button.setEnabled(False)
return
outputs = [PartialTxOutput.from_address_and_value(ln_dummy_address(), onchain_amount)]
coins = self.window.get_coins()
@@ -246,7 +254,16 @@ class SwapDialog(WindowModalDialog):
outputs=outputs)
except (NotEnoughFunds, NoDynamicFeeEstimates) as e:
self.tx = None
- self.ok_button.setEnabled(False)
+
+ def update_ok_button(self):
+ """Updates self.ok_button. No other side-effects."""
+ send_amount = self.send_amount_e.get_amount()
+ recv_amount = self.recv_amount_e.get_amount()
+ self.ok_button.setEnabled(
+ (send_amount is not None)
+ and (recv_amount is not None)
+ and (self.tx is not None or self.is_reverse)
+ )
def do_normal_swap(self, lightning_amount, onchain_amount, password):
tx = self.tx