Browse Source

Lightning: Show sending and receiving capacity. Fixes #5967

hard-fail-on-bad-server-string
ThomasV 5 years ago
parent
commit
238fb46d87
  1. 33
      electrum/gui/kivy/uix/dialogs/lightning_channels.py
  2. 11
      electrum/gui/qt/channels_list.py
  3. 3
      electrum/lnchannel.py
  4. 8
      electrum/lnworker.py

33
electrum/gui/kivy/uix/dialogs/lightning_channels.py

@ -52,11 +52,20 @@ Builder.load_string(r'''
<LightningChannelsDialog@Popup>:
name: 'lightning_channels'
title: _('Lightning channels.')
can_send: ''
can_receive: ''
id: popup
BoxLayout:
id: box
orientation: 'vertical'
spacing: '1dp'
spacing: '2dp'
padding: '12dp'
BoxLabel:
text: _('Can send') + ':'
value: root.can_send
BoxLabel:
text: _('Can receive') + ':'
value: root.can_receive
ScrollView:
GridLayout:
cols: 1
@ -64,12 +73,17 @@ Builder.load_string(r'''
size_hint: 1, None
height: self.minimum_height
spacing: '2dp'
padding: '12dp'
Button:
BoxLayout:
size_hint: 1, None
height: '48dp'
text: _('New channel...')
on_press: popup.app.popup_dialog('lightning_open_channel_dialog')
Widget:
size_hint: 0.7, None
height: '48dp'
Button:
size_hint: 0.3, None
height: '48dp'
text: _('New...')
on_press: popup.app.popup_dialog('lightning_open_channel_dialog')
<ChannelDetailsList@RecycleView>:
scroll_type: ['bars', 'content']
@ -147,6 +161,7 @@ class ChannelDetailsPopup(Popup):
_('Remote CTN'): chan.get_latest_ctn(REMOTE),
_('Capacity'): self.app.format_amount_and_units(chan.constraints.capacity),
_('Can send'): self.app.format_amount_and_units(chan.available_to_spend(LOCAL) // 1000),
_('Can receive'): self.app.format_amount_and_units(chan.available_to_spend(REMOTE) // 1000),
_('Current feerate'): str(chan.get_latest_feerate(LOCAL)),
_('Node ID'): bh2u(chan.node_id),
_('Channel ID'): bh2u(chan.channel_id),
@ -202,6 +217,7 @@ class LightningChannelsDialog(Factory.Popup):
super(LightningChannelsDialog, self).__init__()
self.clocks = []
self.app = app
self.can_send = ''
self.update()
def show_item(self, obj):
@ -231,6 +247,7 @@ class LightningChannelsDialog(Factory.Popup):
l, r = self.format_fields(chan)
item.local_balance = _('Local') + ':' + l
item.remote_balance = _('Remote') + ': ' + r
self.update_can_send()
def update(self):
channel_cards = self.ids.lightning_channels_container
@ -245,3 +262,9 @@ class LightningChannelsDialog(Factory.Popup):
item._chan = i
self.update_item(item)
channel_cards.add_widget(item)
self.update_can_send()
def update_can_send(self):
lnworker = self.app.wallet.lnworker
self.can_send = self.app.format_amount_and_units(lnworker.can_send())
self.can_receive = self.app.format_amount_and_units(lnworker.can_receive())

11
electrum/gui/qt/channels_list.py

@ -130,6 +130,7 @@ class ChannelsList(MyTreeView):
if item.data(ROLE_CHANNEL_ID) == chan.channel_id:
for column, v in enumerate(self.format_fields(chan)):
self.model().item(row, column).setData(v, QtCore.Qt.DisplayRole)
self.update_can_send(self.parent.wallet.lnworker)
@QtCore.pyqtSlot(Abstract_Wallet)
def do_update_rows(self, wallet):
@ -138,6 +139,7 @@ class ChannelsList(MyTreeView):
lnworker = self.parent.wallet.lnworker
if not lnworker:
return
self.update_can_send(lnworker)
self.model().clear()
self.update_headers(self.headers)
for chan in lnworker.channels.values():
@ -149,8 +151,17 @@ class ChannelsList(MyTreeView):
items[self.Columns.REMOTE_BALANCE].setFont(QFont(MONOSPACE_FONT))
self.model().insertRow(0, items)
def update_can_send(self, lnworker):
msg = _('Can send') + ' ' + self.parent.format_amount(lnworker.can_send())\
+ ' ' + self.parent.base_unit() + '; '\
+ _('can receive') + ' ' + self.parent.format_amount(lnworker.can_receive())\
+ ' ' + self.parent.base_unit()
self.can_send_label.setText(msg)
def get_toolbar(self):
h = QHBoxLayout()
self.can_send_label = QLabel('')
h.addWidget(self.can_send_label)
h.addStretch()
h.addWidget(EnterButton(_('Open Channel'), self.new_channel_dialog))
return h

3
electrum/lnchannel.py

@ -298,6 +298,9 @@ class Channel(Logger):
def get_state(self):
return self._state
def is_open(self):
return self.get_state() == channel_states.OPEN
def is_closing(self):
return self.get_state() in [channel_states.CLOSING, channel_states.FORCE_CLOSING]

8
electrum/lnworker.py

@ -1163,6 +1163,14 @@ class LNWallet(LNWorker):
with self.lock:
return Decimal(sum(chan.balance(LOCAL) if not chan.is_closed() else 0 for chan in self.channels.values()))/1000
def can_send(self):
with self.lock:
return Decimal(max(chan.available_to_spend(LOCAL) if chan.is_open() else 0 for chan in self.channels.values()))/1000
def can_receive(self):
with self.lock:
return Decimal(max(chan.available_to_spend(REMOTE) if chan.is_open() else 0 for chan in self.channels.values()))/1000
def list_channels(self):
encoder = MyEncoder()
with self.lock:

Loading…
Cancel
Save