From 545ee24f46deaa8e55a9c3ba0178d609890cc72d Mon Sep 17 00:00:00 2001 From: ThomasV Date: Sun, 2 Apr 2023 10:07:34 +0200 Subject: [PATCH] Qt: move new_channel_dialog to main_window and test available amount beforehand --- electrum/gui/qt/channels_list.py | 18 +----------------- electrum/gui/qt/main_window.py | 17 +++++++++++++++++ electrum/gui/qt/new_channel_dialog.py | 4 +--- electrum/gui/qt/send_tab.py | 2 +- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/electrum/gui/qt/channels_list.py b/electrum/gui/qt/channels_list.py index 0046564ef..2df20b104 100644 --- a/electrum/gui/qt/channels_list.py +++ b/electrum/gui/qt/channels_list.py @@ -363,22 +363,11 @@ class ChannelsList(MyTreeView): menu.addAction(_('Submarine swap'), lambda: self.main_window.run_swap_dialog()) menu.addSeparator() menu.addAction(_("Import channel backup"), lambda: self.main_window.do_process_from_text_channel_backup()) - self.new_channel_button = EnterButton(_('New Channel'), self.new_channel_with_warning) + self.new_channel_button = EnterButton(_('New Channel'), self.main_window.new_channel_dialog) self.new_channel_button.setEnabled(self.wallet.has_lightning()) toolbar.insertWidget(2, self.new_channel_button) return toolbar - def new_channel_with_warning(self): - lnworker = self.wallet.lnworker - if not lnworker.channels and not lnworker.channel_backups: - warning = _(messages.MSG_LIGHTNING_WARNING) - answer = self.main_window.question( - _('Do you want to create your first channel?') + '\n\n' + warning) - if answer: - self.new_channel_dialog() - else: - self.new_channel_dialog() - def statistics_dialog(self): channel_db = self.network.channel_db capacity = self.main_window.format_amount(channel_db.capacity()) + ' '+ self.main_window.base_unit() @@ -396,11 +385,6 @@ class ChannelsList(MyTreeView): vbox.addLayout(Buttons(OkButton(d))) d.exec_() - def new_channel_dialog(self, *, amount_sat=None, min_amount_sat=None): - from .new_channel_dialog import NewChannelDialog - d = NewChannelDialog(self.main_window, amount_sat, min_amount_sat) - return d.run() - def set_visibility_of_columns(self): def set_visible(col: int, b: bool): self.showColumn(col) if b else self.hideColumn(col) diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index aca538c62..4eeb4aebc 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -1681,6 +1681,23 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener): if hasattr(tab, 'searchable_list'): tab.searchable_list.filter(t) + def new_channel_dialog(self, *, amount_sat=None, min_amount_sat=None): + from electrum.lnutil import MIN_FUNDING_SAT + from .new_channel_dialog import NewChannelDialog + confirmed, unconfirmed, unmatured, frozen, lightning, f_lightning = self.wallet.get_balances_for_piechart() + min_amount_sat = min_amount_sat or MIN_FUNDING_SAT + if confirmed < min_amount_sat: + msg = _('Not enough funds') + '\n\n' + _('You need at least {} to open a channel.').format(self.format_amount_and_units(min_amount_sat)) + self.show_error(msg) + return + lnworker = self.wallet.lnworker + if not lnworker.channels and not lnworker.channel_backups: + msg = _('Do you want to create your first channel?') + '\n\n' + _(messages.MSG_LIGHTNING_WARNING) + if not self.question(msg): + return + d = NewChannelDialog(self, amount_sat, min_amount_sat) + return d.run() + def new_contact_dialog(self): d = WindowModalDialog(self, _("New Contact")) vbox = QVBoxLayout(d) diff --git a/electrum/gui/qt/new_channel_dialog.py b/electrum/gui/qt/new_channel_dialog.py index d48b661a2..6eaf95fbe 100644 --- a/electrum/gui/qt/new_channel_dialog.py +++ b/electrum/gui/qt/new_channel_dialog.py @@ -42,9 +42,7 @@ class NewChannelDialog(WindowModalDialog): ).setEnabled(self.lnworker.can_have_recoverable_channels()) vbox.addLayout(toolbar) msg = _('Choose a remote node and an amount to fund the channel.') - if min_amount_sat: - # only displayed if min_amount_sat is passed as parameter - msg += '\n' + _('You need to put at least') + ': ' + self.window.format_amount_and_units(self.min_amount_sat) + msg += '\n' + _('You need to put at least') + ': ' + self.window.format_amount_and_units(self.min_amount_sat) vbox.addWidget(WWLabel(msg)) if self.network.channel_db: vbox.addWidget(QLabel(_('Enter Remote Node ID or connection string or invoice'))) diff --git a/electrum/gui/qt/send_tab.py b/electrum/gui/qt/send_tab.py index 5ff597f6a..cec6b6144 100644 --- a/electrum/gui/qt/send_tab.py +++ b/electrum/gui/qt/send_tab.py @@ -713,7 +713,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger): self.window.rebalance_dialog(chan1, chan2, amount_sat=delta) elif r == 1: amount_sat, min_amount_sat = can_pay_with_new_channel - self.window.channels_list.new_channel_dialog(amount_sat=amount_sat, min_amount_sat=min_amount_sat) + self.window.new_channel_dialog(amount_sat=amount_sat, min_amount_sat=min_amount_sat) elif r == 2: chan, swap_recv_amount_sat = can_pay_with_swap self.window.run_swap_dialog(is_reverse=False, recv_amount_sat=swap_recv_amount_sat, channels=[chan])