tlightning: fix kivy channel close - electrum - Electrum Bitcoin wallet (HTM) git clone https://git.parazyd.org/electrum (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules --- (DIR) commit 1ab03e8b2a5745b8aa999ceea14b11ff4b0b97ff (DIR) parent d19e8e7f9b792be8e0dacd461f28ac11f2415e41 (HTM) Author: Janus <ysangkok@gmail.com> Date: Tue, 27 Mar 2018 17:40:17 +0200 lightning: fix kivy channel close Diffstat: M gui/kivy/uix/dialogs/lightning_cha… | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) --- (DIR) diff --git a/gui/kivy/uix/dialogs/lightning_channels.py b/gui/kivy/uix/dialogs/lightning_channels.py t@@ -1,17 +1,21 @@ +import binascii from kivy.lang import Builder from kivy.factory import Factory from kivy.clock import Clock import electrum.lightning as lightning +from electrum_gui.kivy.uix.context_menu import ContextMenu Builder.load_string(''' <LightningChannelItem@CardItem> - channelId: '<channelId not set>' + active: False + channelPoint: '<channelPoint not set>' Label: - text: root.channelId + text: root.channelPoint <LightningChannelsDialog@Popup>: name: 'lightning_channels' BoxLayout: + id: box orientation: 'vertical' spacing: '1dp' ScrollView: t@@ -29,16 +33,36 @@ class LightningChannelsDialog(Factory.Popup): super(LightningChannelsDialog, self).__init__() self.clocks = [] self.app = app + self.context_menu = None + + 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.ids.box.add_widget(self.context_menu) + + def hide_menu(self): + if self.context_menu is not None: + self.ids.box.remove_widget(self.context_menu) + self.context_menu = None + def open(self, *args, **kwargs): super(LightningChannelsDialog, self).open(*args, **kwargs) for i in self.clocks: i.cancel() self.clocks.append(Clock.schedule_interval(self.fetch_channels, 10)) self.app.wallet.network.lightningrpc.subscribe(self.rpc_result_handler) + def dismiss(self, *args, **kwargs): + self.hide_menu() super(LightningChannelsDialog, self).dismiss(*args, **kwargs) self.app.wallet.network.lightningrpc.clearSubscribers() + def fetch_channels(self, dw): lightning.lightningCall(self.app.wallet.network.lightningrpc, "listchannels")() + def rpc_result_handler(self, methodName, res): print("got result", methodName) if isinstance(res, Exception): t@@ -49,5 +73,6 @@ class LightningChannelsDialog(Factory.Popup): item = Factory.LightningChannelItem() item.screen = self print(i) - item.channelId = i["chan_id"] + item.channelPoint = binascii.hexlify(bytes(reversed(bytes(bytearray.fromhex(i["channel_point"].split(":")[0]))))).decode("ascii") + item.active = i["active"] channel_cards.add_widget(item)