|
|
@ -1,12 +1,14 @@ |
|
|
|
import binascii |
|
|
|
from kivy.lang import Builder |
|
|
|
from kivy.factory import Factory |
|
|
|
from kivy.uix.popup import Popup |
|
|
|
from kivy.clock import Clock |
|
|
|
import electrum.lightning as lightning |
|
|
|
from electrum_gui.kivy.uix.context_menu import ContextMenu |
|
|
|
|
|
|
|
Builder.load_string(''' |
|
|
|
<LightningChannelItem@CardItem> |
|
|
|
details: {} |
|
|
|
active: False |
|
|
|
channelPoint: '<channelPoint not set>' |
|
|
|
Label: |
|
|
@ -26,8 +28,59 @@ Builder.load_string(''' |
|
|
|
height: self.minimum_height |
|
|
|
spacing: '2dp' |
|
|
|
padding: '12dp' |
|
|
|
|
|
|
|
<ChannelDetailsItem@BoxLayout>: |
|
|
|
canvas.before: |
|
|
|
Color: |
|
|
|
rgba: 0.5, 0.5, 0.5, 1 |
|
|
|
Rectangle: |
|
|
|
size: self.size |
|
|
|
pos: self.pos |
|
|
|
value: '' |
|
|
|
Label: |
|
|
|
text: root.value |
|
|
|
text_size: self.size # this makes the text not overflow, but wrap |
|
|
|
|
|
|
|
<ChannelDetailsRow@BoxLayout>: |
|
|
|
keyName: '' |
|
|
|
value: '' |
|
|
|
ChannelDetailsItem: |
|
|
|
value: root.keyName |
|
|
|
size_hint_x: 0.5 # this makes the column narrower |
|
|
|
|
|
|
|
# see https://blog.kivy.org/2014/07/wrapping-text-in-kivys-label/ |
|
|
|
ScrollView: |
|
|
|
Label: |
|
|
|
text: root.value |
|
|
|
size_hint_y: None |
|
|
|
text_size: self.width, None |
|
|
|
height: self.texture_size[1] |
|
|
|
|
|
|
|
<ChannelDetailsList@RecycleView>: |
|
|
|
scroll_type: ['bars', 'content'] |
|
|
|
scroll_wheel_distance: dp(114) |
|
|
|
bar_width: dp(10) |
|
|
|
viewclass: 'ChannelDetailsRow' |
|
|
|
RecycleBoxLayout: |
|
|
|
default_size: None, dp(56) |
|
|
|
default_size_hint: 1, None |
|
|
|
size_hint_y: None |
|
|
|
height: self.minimum_height |
|
|
|
orientation: 'vertical' |
|
|
|
spacing: dp(2) |
|
|
|
|
|
|
|
<ChannelDetailsPopup@Popup>: |
|
|
|
id: popuproot |
|
|
|
data: [] |
|
|
|
ChannelDetailsList: |
|
|
|
data: popuproot.data |
|
|
|
''') |
|
|
|
|
|
|
|
class ChannelDetailsPopup(Popup): |
|
|
|
def __init__(self, data, **kwargs): |
|
|
|
super(ChanenlDetailsPopup,self).__init__(**kwargs) |
|
|
|
self.data = data |
|
|
|
|
|
|
|
class LightningChannelsDialog(Factory.Popup): |
|
|
|
def __init__(self, app): |
|
|
|
super(LightningChannelsDialog, self).__init__() |
|
|
@ -35,13 +88,19 @@ class LightningChannelsDialog(Factory.Popup): |
|
|
|
self.app = app |
|
|
|
self.context_menu = None |
|
|
|
|
|
|
|
def show_channel_details(self, obj): |
|
|
|
p = Factory.ChannelDetailsPopup() |
|
|
|
p.data = [{'keyName': key, 'value': str(obj.details[key])} for key in obj.details.keys()] |
|
|
|
p.open() |
|
|
|
|
|
|
|
def close_channel(self, obj): |
|
|
|
print("asked to close channel", obj.channelPoint) |
|
|
|
lightning.lightningCall(self.app.wallet.network.lightningrpc, "closechannel")(*([obj.channelPoint] + (["--force"] if not obj.active else []))) |
|
|
|
|
|
|
|
def show_menu(self, obj): |
|
|
|
self.hide_menu() |
|
|
|
self.context_menu = ContextMenu(obj, [("Close", self.close_channel)]) |
|
|
|
self.context_menu = ContextMenu(obj, [("Close", self.close_channel), |
|
|
|
("Details", self.show_channel_details)]) |
|
|
|
self.ids.box.add_widget(self.context_menu) |
|
|
|
|
|
|
|
def hide_menu(self): |
|
|
@ -76,6 +135,7 @@ class LightningChannelsDialog(Factory.Popup): |
|
|
|
print(i) |
|
|
|
item.channelPoint = i["channel_point"].split(":")[0] |
|
|
|
item.active = i["active"] |
|
|
|
item.details = i |
|
|
|
channel_cards.add_widget(item) |
|
|
|
else: |
|
|
|
self.app.show_info(res) |
|
|
|