URI: 
       tqt channels: expose long channel id (in ctx menu and details dlg) - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 7488cc91cdbece4f93b0047e36cfba65ae8b01a2
   DIR parent 1448bfe937eed233865acf64d38349b1e3ae2aa5
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Thu, 26 Mar 2020 01:20:41 +0100
       
       qt channels: expose long channel id (in ctx menu and details dlg)
       
       Also add separators to context menu to more visible separate
       close/delete actions from rest.
       
       Diffstat:
         M electrum/gui/qt/channel_details.py  |       2 +-
         M electrum/gui/qt/channels_list.py    |       8 +++++++-
         M electrum/gui/qt/util.py             |       6 ++++--
         M electrum/lnworker.py                |       2 +-
       
       4 files changed, 13 insertions(+), 5 deletions(-)
       ---
   DIR diff --git a/electrum/gui/qt/channel_details.py b/electrum/gui/qt/channel_details.py
       t@@ -153,7 +153,7 @@ class ChannelDetailsDialog(QtWidgets.QDialog):
        
                form_layout = QtWidgets.QFormLayout(None)
                # add form content
       -        form_layout.addRow(_('Channel ID:'), SelectableLabel(chan.get_id_for_log()))
       +        form_layout.addRow(_('Channel ID:'), SelectableLabel(f"{chan.channel_id.hex()} (Short: {chan.short_channel_id})"))
                form_layout.addRow(_('State:'), SelectableLabel(chan.get_state_for_GUI()))
                self.initiator = 'Local' if chan.constraints.is_initiator else 'Remote'
                form_layout.addRow(_('Initiator:'), SelectableLabel(self.initiator))
   DIR diff --git a/electrum/gui/qt/channels_list.py b/electrum/gui/qt/channels_list.py
       t@@ -120,6 +120,7 @@ class ChannelsList(MyTreeView):
        
            def create_menu(self, position):
                menu = QMenu()
       +        menu.setSeparatorsCollapsible(True)  # consecutive separators are merged together
                idx = self.selectionModel().currentIndex()
                item = self.model().itemFromIndex(idx)
                if not item:
       t@@ -127,14 +128,18 @@ class ChannelsList(MyTreeView):
                channel_id = idx.sibling(idx.row(), self.Columns.NODE_ID).data(ROLE_CHANNEL_ID)
                chan = self.lnworker.channels[channel_id]
                menu.addAction(_("Details..."), lambda: self.parent.show_channel(channel_id))
       -        self.add_copy_menu(menu, idx)
       +        cc = self.add_copy_menu(menu, idx)
       +        cc.addAction(_("Long Channel ID"), lambda: self.place_text_on_clipboard(channel_id.hex(),
       +                                                                                title=_("Long Channel ID")))
                funding_tx = self.parent.wallet.db.get_transaction(chan.funding_outpoint.txid)
                if funding_tx:
                    menu.addAction(_("View funding transaction"), lambda: self.parent.show_transaction(funding_tx))
                if not chan.is_closed():
       +            menu.addSeparator()
                    if chan.peer_state == peer_states.GOOD:
                        menu.addAction(_("Close channel"), lambda: self.close_channel(channel_id))
                    menu.addAction(_("Force-close channel"), lambda: self.force_close(channel_id))
       +            menu.addSeparator()
                else:
                    item = chan.get_closing_height()
                    if item:
       t@@ -143,6 +148,7 @@ class ChannelsList(MyTreeView):
                        if closing_tx:
                            menu.addAction(_("View closing transaction"), lambda: self.parent.show_transaction(closing_tx))
                if chan.is_redeemed():
       +            menu.addSeparator()
                    menu.addAction(_("Delete"), lambda: self.remove_channel(channel_id))
                menu.exec_(self.viewport().mapToGlobal(position))
        
   DIR diff --git a/electrum/gui/qt/util.py b/electrum/gui/qt/util.py
       t@@ -20,7 +20,8 @@ from PyQt5.QtWidgets import (QPushButton, QLabel, QMessageBox, QHBoxLayout,
                                     QAbstractItemView, QVBoxLayout, QLineEdit,
                                     QStyle, QDialog, QGroupBox, QButtonGroup, QRadioButton,
                                     QFileDialog, QWidget, QToolButton, QTreeView, QPlainTextEdit,
       -                             QHeaderView, QApplication, QToolTip, QTreeWidget, QStyledItemDelegate)
       +                             QHeaderView, QApplication, QToolTip, QTreeWidget, QStyledItemDelegate,
       +                             QMenu)
        
        from electrum.i18n import _, languages
        from electrum.util import FileImportFailed, FileExportFailed, make_aiohttp_session, resource_path
       t@@ -658,7 +659,7 @@ class MyTreeView(QTreeView):
            def toggle_toolbar(self, config=None):
                self.show_toolbar(not self.toolbar_shown, config)
        
       -    def add_copy_menu(self, menu, idx):
       +    def add_copy_menu(self, menu: QMenu, idx) -> QMenu:
                cc = menu.addMenu(_("Copy"))
                for column in self.Columns:
                    column_title = self.model().horizontalHeaderItem(column).text()
       t@@ -669,6 +670,7 @@ class MyTreeView(QTreeView):
                    cc.addAction(column_title,
                                 lambda text=clipboard_data, title=column_title:
                                 self.place_text_on_clipboard(text, title=title))
       +        return cc
        
            def place_text_on_clipboard(self, text: str, *, title: str = None) -> None:
                self.parent.do_copy(text, title=title)
   DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py
       t@@ -203,7 +203,7 @@ class LNWorker(Logger):
                        if last_tried + PEER_RETRY_INTERVAL < now:
                            await self._add_peer(peer.host, peer.port, peer.pubkey)
        
       -    async def _add_peer(self, host, port, node_id):
       +    async def _add_peer(self, host, port, node_id) -> Peer:
                if node_id in self.peers:
                    return self.peers[node_id]
                port = int(port)