You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

76 lines
3.0 KiB

from typing import TYPE_CHECKING
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QLabel, QVBoxLayout, QGridLayout, QPushButton
from electrum.i18n import _
from electrum.lnchannel import Channel
from .util import WindowModalDialog, Buttons, OkButton, CancelButton, WWLabel
from .amountedit import BTCAmountEdit
if TYPE_CHECKING:
from .main_window import ElectrumWindow
class RebalanceDialog(WindowModalDialog):
def __init__(self, window: 'ElectrumWindow', chan1: Channel, chan2: Channel, amount_sat):
WindowModalDialog.__init__(self, window, _("Rebalance channels"))
self.window = window
self.wallet = window.wallet
self.chan1 = chan1
self.chan2 = chan2
vbox = QVBoxLayout(self)
vbox.addWidget(WWLabel(_('Rebalance your channels in order to increase your sending or receiving capacity') + ':'))
grid = QGridLayout()
self.amount_e = BTCAmountEdit(self.window.get_decimal_point)
self.amount_e.setAmount(amount_sat)
self.amount_e.textChanged.connect(self.on_amount)
self.rev_button = QPushButton(u'\U000021c4')
self.rev_button.clicked.connect(self.on_reverse)
self.max_button = QPushButton('Max')
self.max_button.clicked.connect(self.on_max)
self.label1 = QLabel('')
self.label2 = QLabel('')
self.ok_button = OkButton(self)
self.ok_button.setEnabled(False)
grid.addWidget(QLabel(_("From channel")), 0, 0)
grid.addWidget(self.label1, 0, 1)
grid.addWidget(QLabel(_("To channel")), 1, 0)
grid.addWidget(self.label2, 1, 1)
grid.addWidget(QLabel(_("Amount")), 2, 0)
grid.addWidget(self.amount_e, 2, 1)
grid.addWidget(self.max_button, 2, 2)
grid.addWidget(self.rev_button, 0, 2)
vbox.addLayout(grid)
vbox.addLayout(Buttons(CancelButton(self), self.ok_button))
self.update()
def on_reverse(self, x):
a, b = self.chan1, self.chan2
self.chan1, self.chan2 = b, a
self.amount_e.setAmount(None)
self.update()
def on_amount(self, x):
self.update()
def on_max(self, x):
n_sat = self.wallet.lnworker.num_sats_can_rebalance(self.chan1, self.chan2)
self.amount_e.setAmount(n_sat)
def update(self):
self.label1.setText(self.chan1.short_id_for_GUI())
self.label2.setText(self.chan2.short_id_for_GUI())
amount_sat = self.amount_e.get_amount()
b = bool(amount_sat) and self.wallet.lnworker.num_sats_can_rebalance(self.chan1, self.chan2) >= amount_sat
self.ok_button.setEnabled(b)
def run(self):
if not self.exec_():
return
amount_msat = self.amount_e.get_amount() * 1000
coro = self.wallet.lnworker.rebalance_channels(self.chan1, self.chan2, amount_msat=amount_msat)
self.window.run_coroutine_from_thread(coro, _('Rebalancing channels'))
self.window.receive_tab.update_current_request() # this will gray out the button