Browse Source

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.
hard-fail-on-bad-server-string
SomberNight 5 years ago
parent
commit
7488cc91cd
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 2
      electrum/gui/qt/channel_details.py
  2. 8
      electrum/gui/qt/channels_list.py
  3. 6
      electrum/gui/qt/util.py
  4. 2
      electrum/lnworker.py

2
electrum/gui/qt/channel_details.py

@ -153,7 +153,7 @@ class ChannelDetailsDialog(QtWidgets.QDialog):
form_layout = QtWidgets.QFormLayout(None) form_layout = QtWidgets.QFormLayout(None)
# add form content # 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())) form_layout.addRow(_('State:'), SelectableLabel(chan.get_state_for_GUI()))
self.initiator = 'Local' if chan.constraints.is_initiator else 'Remote' self.initiator = 'Local' if chan.constraints.is_initiator else 'Remote'
form_layout.addRow(_('Initiator:'), SelectableLabel(self.initiator)) form_layout.addRow(_('Initiator:'), SelectableLabel(self.initiator))

8
electrum/gui/qt/channels_list.py

@ -120,6 +120,7 @@ class ChannelsList(MyTreeView):
def create_menu(self, position): def create_menu(self, position):
menu = QMenu() menu = QMenu()
menu.setSeparatorsCollapsible(True) # consecutive separators are merged together
idx = self.selectionModel().currentIndex() idx = self.selectionModel().currentIndex()
item = self.model().itemFromIndex(idx) item = self.model().itemFromIndex(idx)
if not item: if not item:
@ -127,14 +128,18 @@ class ChannelsList(MyTreeView):
channel_id = idx.sibling(idx.row(), self.Columns.NODE_ID).data(ROLE_CHANNEL_ID) channel_id = idx.sibling(idx.row(), self.Columns.NODE_ID).data(ROLE_CHANNEL_ID)
chan = self.lnworker.channels[channel_id] chan = self.lnworker.channels[channel_id]
menu.addAction(_("Details..."), lambda: self.parent.show_channel(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) funding_tx = self.parent.wallet.db.get_transaction(chan.funding_outpoint.txid)
if funding_tx: if funding_tx:
menu.addAction(_("View funding transaction"), lambda: self.parent.show_transaction(funding_tx)) menu.addAction(_("View funding transaction"), lambda: self.parent.show_transaction(funding_tx))
if not chan.is_closed(): if not chan.is_closed():
menu.addSeparator()
if chan.peer_state == peer_states.GOOD: if chan.peer_state == peer_states.GOOD:
menu.addAction(_("Close channel"), lambda: self.close_channel(channel_id)) menu.addAction(_("Close channel"), lambda: self.close_channel(channel_id))
menu.addAction(_("Force-close channel"), lambda: self.force_close(channel_id)) menu.addAction(_("Force-close channel"), lambda: self.force_close(channel_id))
menu.addSeparator()
else: else:
item = chan.get_closing_height() item = chan.get_closing_height()
if item: if item:
@ -143,6 +148,7 @@ class ChannelsList(MyTreeView):
if closing_tx: if closing_tx:
menu.addAction(_("View closing transaction"), lambda: self.parent.show_transaction(closing_tx)) menu.addAction(_("View closing transaction"), lambda: self.parent.show_transaction(closing_tx))
if chan.is_redeemed(): if chan.is_redeemed():
menu.addSeparator()
menu.addAction(_("Delete"), lambda: self.remove_channel(channel_id)) menu.addAction(_("Delete"), lambda: self.remove_channel(channel_id))
menu.exec_(self.viewport().mapToGlobal(position)) menu.exec_(self.viewport().mapToGlobal(position))

6
electrum/gui/qt/util.py

@ -20,7 +20,8 @@ from PyQt5.QtWidgets import (QPushButton, QLabel, QMessageBox, QHBoxLayout,
QAbstractItemView, QVBoxLayout, QLineEdit, QAbstractItemView, QVBoxLayout, QLineEdit,
QStyle, QDialog, QGroupBox, QButtonGroup, QRadioButton, QStyle, QDialog, QGroupBox, QButtonGroup, QRadioButton,
QFileDialog, QWidget, QToolButton, QTreeView, QPlainTextEdit, QFileDialog, QWidget, QToolButton, QTreeView, QPlainTextEdit,
QHeaderView, QApplication, QToolTip, QTreeWidget, QStyledItemDelegate) QHeaderView, QApplication, QToolTip, QTreeWidget, QStyledItemDelegate,
QMenu)
from electrum.i18n import _, languages from electrum.i18n import _, languages
from electrum.util import FileImportFailed, FileExportFailed, make_aiohttp_session, resource_path from electrum.util import FileImportFailed, FileExportFailed, make_aiohttp_session, resource_path
@ -658,7 +659,7 @@ class MyTreeView(QTreeView):
def toggle_toolbar(self, config=None): def toggle_toolbar(self, config=None):
self.show_toolbar(not self.toolbar_shown, config) 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")) cc = menu.addMenu(_("Copy"))
for column in self.Columns: for column in self.Columns:
column_title = self.model().horizontalHeaderItem(column).text() column_title = self.model().horizontalHeaderItem(column).text()
@ -669,6 +670,7 @@ class MyTreeView(QTreeView):
cc.addAction(column_title, cc.addAction(column_title,
lambda text=clipboard_data, title=column_title: lambda text=clipboard_data, title=column_title:
self.place_text_on_clipboard(text, title=title)) self.place_text_on_clipboard(text, title=title))
return cc
def place_text_on_clipboard(self, text: str, *, title: str = None) -> None: def place_text_on_clipboard(self, text: str, *, title: str = None) -> None:
self.parent.do_copy(text, title=title) self.parent.do_copy(text, title=title)

2
electrum/lnworker.py

@ -203,7 +203,7 @@ class LNWorker(Logger):
if last_tried + PEER_RETRY_INTERVAL < now: if last_tried + PEER_RETRY_INTERVAL < now:
await self._add_peer(peer.host, peer.port, peer.pubkey) 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: if node_id in self.peers:
return self.peers[node_id] return self.peers[node_id]
port = int(port) port = int(port)

Loading…
Cancel
Save