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)