mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-28 16:01:30 +00:00
lightning network dialog
This commit is contained in:
parent
db60634774
commit
f5c58c5e19
4 changed files with 44 additions and 42 deletions
|
@ -55,6 +55,7 @@ from .util import get_default_language, read_QIcon, ColorScheme, custom_message_
|
||||||
from .main_window import ElectrumWindow
|
from .main_window import ElectrumWindow
|
||||||
from .network_dialog import NetworkDialog
|
from .network_dialog import NetworkDialog
|
||||||
from .stylesheet_patcher import patch_qt_stylesheet
|
from .stylesheet_patcher import patch_qt_stylesheet
|
||||||
|
from .lightning_dialog import LightningDialog
|
||||||
|
|
||||||
|
|
||||||
class OpenFileEventFilter(QObject):
|
class OpenFileEventFilter(QObject):
|
||||||
|
@ -107,8 +108,8 @@ class ElectrumGui(Logger):
|
||||||
self.timer.setSingleShot(False)
|
self.timer.setSingleShot(False)
|
||||||
self.timer.setInterval(500) # msec
|
self.timer.setInterval(500) # msec
|
||||||
|
|
||||||
self.nd = None
|
self.network_dialog = None
|
||||||
self.watchtower_window = None
|
self.lightning_dialog = None
|
||||||
self.network_updated_signal_obj = QNetworkUpdatedSignalObject()
|
self.network_updated_signal_obj = QNetworkUpdatedSignalObject()
|
||||||
self._num_wizards_in_progress = 0
|
self._num_wizards_in_progress = 0
|
||||||
self._num_wizards_lock = threading.Lock()
|
self._num_wizards_lock = threading.Lock()
|
||||||
|
@ -148,7 +149,7 @@ class ElectrumGui(Logger):
|
||||||
m = self.tray.contextMenu()
|
m = self.tray.contextMenu()
|
||||||
m.clear()
|
m.clear()
|
||||||
if self.config.get('lightning'):
|
if self.config.get('lightning'):
|
||||||
m.addAction(_("Watchtower"), self.show_watchtower_dialog)
|
m.addAction(_("Lightning"), self.show_lightning_dialog)
|
||||||
for window in self.windows:
|
for window in self.windows:
|
||||||
name = window.wallet.basename()
|
name = window.wallet.basename()
|
||||||
submenu = m.addMenu(name)
|
submenu = m.addMenu(name)
|
||||||
|
@ -181,33 +182,32 @@ class ElectrumGui(Logger):
|
||||||
def close(self):
|
def close(self):
|
||||||
for window in self.windows:
|
for window in self.windows:
|
||||||
window.close()
|
window.close()
|
||||||
if self.nd:
|
if self.network_dialog:
|
||||||
self.nd.close()
|
self.network_dialog.close()
|
||||||
if self.watchtower_window:
|
if self.lightning_dialog:
|
||||||
self.watchtower_window.close()
|
self.lightning_dialog.close()
|
||||||
|
|
||||||
def new_window(self, path, uri=None):
|
def new_window(self, path, uri=None):
|
||||||
# Use a signal as can be called from daemon thread
|
# Use a signal as can be called from daemon thread
|
||||||
self.app.new_window_signal.emit(path, uri)
|
self.app.new_window_signal.emit(path, uri)
|
||||||
|
|
||||||
def show_watchtower_dialog(self, parent=None):
|
def show_lightning_dialog(self):
|
||||||
from .watchtower_window import WatchTowerWindow
|
if not self.lightning_dialog:
|
||||||
if not self.watchtower_window:
|
self.lightning_dialog = LightningDialog(self)
|
||||||
self.watchtower_window = WatchTowerWindow(self)
|
self.lightning_dialog.bring_to_top()
|
||||||
self.watchtower_window.bring_to_top()
|
|
||||||
|
|
||||||
def show_network_dialog(self, parent):
|
def show_network_dialog(self, parent):
|
||||||
if not self.daemon.network:
|
if not self.daemon.network:
|
||||||
parent.show_warning(_('You are using Electrum in offline mode; restart Electrum if you want to get connected'), title=_('Offline'))
|
parent.show_warning(_('You are using Electrum in offline mode; restart Electrum if you want to get connected'), title=_('Offline'))
|
||||||
return
|
return
|
||||||
if self.nd:
|
if self.network_dialog:
|
||||||
self.nd.on_update()
|
self.network_dialog.on_update()
|
||||||
self.nd.show()
|
self.network_dialog.show()
|
||||||
self.nd.raise_()
|
self.network_dialog.raise_()
|
||||||
return
|
return
|
||||||
self.nd = NetworkDialog(self.daemon.network, self.config,
|
self.network_dialog = NetworkDialog(self.daemon.network, self.config,
|
||||||
self.network_updated_signal_obj)
|
self.network_updated_signal_obj)
|
||||||
self.nd.show()
|
self.network_dialog.show()
|
||||||
|
|
||||||
def _create_window_for_wallet(self, wallet):
|
def _create_window_for_wallet(self, wallet):
|
||||||
w = ElectrumWindow(self, wallet)
|
w = ElectrumWindow(self, wallet)
|
||||||
|
|
|
@ -23,7 +23,6 @@ class ChannelsList(MyTreeView):
|
||||||
self.main_window = parent
|
self.main_window = parent
|
||||||
self.update_rows.connect(self.do_update_rows)
|
self.update_rows.connect(self.do_update_rows)
|
||||||
self.update_single_row.connect(self.do_update_single_row)
|
self.update_single_row.connect(self.do_update_single_row)
|
||||||
self.status = QLabel('')
|
|
||||||
|
|
||||||
def format_fields(self, chan):
|
def format_fields(self, chan):
|
||||||
labels = {}
|
labels = {}
|
||||||
|
@ -98,19 +97,10 @@ class ChannelsList(MyTreeView):
|
||||||
|
|
||||||
def get_toolbar(self):
|
def get_toolbar(self):
|
||||||
h = QHBoxLayout()
|
h = QHBoxLayout()
|
||||||
h.addWidget(self.status)
|
|
||||||
h.addStretch()
|
h.addStretch()
|
||||||
h.addWidget(EnterButton(_('Open Channel'), self.new_channel_dialog))
|
h.addWidget(EnterButton(_('Open Channel'), self.new_channel_dialog))
|
||||||
return h
|
return h
|
||||||
|
|
||||||
def update_status(self):
|
|
||||||
network = self.parent.network
|
|
||||||
if network.lngossip is None:
|
|
||||||
return
|
|
||||||
channel_db = self.parent.network.channel_db
|
|
||||||
num_peers = sum([p.initialized.is_set() for p in network.lngossip.peers.values()])
|
|
||||||
msg = _('{} peers, {} nodes, {} channels.').format(num_peers, channel_db.num_nodes, channel_db.num_channels)
|
|
||||||
self.status.setText(msg)
|
|
||||||
|
|
||||||
def statistics_dialog(self):
|
def statistics_dialog(self):
|
||||||
channel_db = self.parent.network.channel_db
|
channel_db = self.parent.network.channel_db
|
||||||
|
|
|
@ -62,23 +62,29 @@ class WatcherList(MyTreeView):
|
||||||
self.model().insertRow(self.model().rowCount(), items)
|
self.model().insertRow(self.model().rowCount(), items)
|
||||||
|
|
||||||
|
|
||||||
class WatchTowerWindow(QDialog):
|
class LightningDialog(QDialog):
|
||||||
|
|
||||||
def __init__(self, gui_object):
|
def __init__(self, gui_object):
|
||||||
QDialog.__init__(self)
|
QDialog.__init__(self)
|
||||||
self.gui_object = gui_object
|
self.gui_object = gui_object
|
||||||
self.config = gui_object.config
|
self.config = gui_object.config
|
||||||
self.lnwatcher = gui_object.daemon.network.lnwatcher
|
self.network = gui_object.daemon.network
|
||||||
self.setWindowTitle(_('Watchtower'))
|
self.lnwatcher = self.network.lnwatcher
|
||||||
|
self.setWindowTitle(_('Lightning'))
|
||||||
self.setMinimumSize(600, 20)
|
self.setMinimumSize(600, 20)
|
||||||
watchtower_url = self.config.get('watchtower_url')
|
watchtower_url = self.config.get('watchtower_url')
|
||||||
self.watchtower_e = QLineEdit(watchtower_url)
|
self.watchtower_e = QLineEdit(watchtower_url)
|
||||||
self.channel_list = WatcherList(self)
|
self.watcher_list = WatcherList(self)
|
||||||
|
# channel_db
|
||||||
|
network_w = QWidget()
|
||||||
|
network_vbox = QVBoxLayout(network_w)
|
||||||
|
self.status = QLabel('')
|
||||||
|
network_vbox.addWidget(self.status)
|
||||||
# local
|
# local
|
||||||
local_w = QWidget()
|
local_w = QWidget()
|
||||||
vbox_local = QVBoxLayout(local_w)
|
vbox_local = QVBoxLayout(local_w)
|
||||||
vbox_local.addWidget(WWLabel(help_about))
|
vbox_local.addWidget(WWLabel(help_about))
|
||||||
vbox_local.addWidget(self.channel_list)
|
vbox_local.addWidget(self.watcher_list)
|
||||||
# remote
|
# remote
|
||||||
remote_w = QWidget()
|
remote_w = QWidget()
|
||||||
vbox_remote = QVBoxLayout(remote_w)
|
vbox_remote = QVBoxLayout(remote_w)
|
||||||
|
@ -90,14 +96,24 @@ class WatchTowerWindow(QDialog):
|
||||||
vbox_remote.addStretch(1)
|
vbox_remote.addStretch(1)
|
||||||
# tabs
|
# tabs
|
||||||
tabs = QTabWidget()
|
tabs = QTabWidget()
|
||||||
tabs.addTab(local_w, _('Local'))
|
tabs.addTab(network_w, _('Network'))
|
||||||
tabs.addTab(remote_w, _('Remote'))
|
tabs.addTab(local_w, _('Watchtower'))
|
||||||
|
tabs.addTab(remote_w, _('Settings'))
|
||||||
vbox = QVBoxLayout(self)
|
vbox = QVBoxLayout(self)
|
||||||
vbox.addWidget(tabs)
|
vbox.addWidget(tabs)
|
||||||
b = QPushButton(_('Close'))
|
b = QPushButton(_('Close'))
|
||||||
b.clicked.connect(self.on_close)
|
b.clicked.connect(self.on_close)
|
||||||
vbox.addLayout(Buttons(b))
|
vbox.addLayout(Buttons(b))
|
||||||
self.channel_list.update()
|
self.watcher_list.update()
|
||||||
|
self.gui_object.timer.timeout.connect(self.update_status)
|
||||||
|
|
||||||
|
def update_status(self):
|
||||||
|
if self.network.lngossip is None:
|
||||||
|
return
|
||||||
|
channel_db = self.network.channel_db
|
||||||
|
num_peers = sum([p.initialized.is_set() for p in self.network.lngossip.peers.values()])
|
||||||
|
msg = _('{} peers, {} nodes, {} channels.').format(num_peers, channel_db.num_nodes, channel_db.num_channels)
|
||||||
|
self.status.setText(msg)
|
||||||
|
|
||||||
def on_close(self):
|
def on_close(self):
|
||||||
url = self.watchtower_e.text()
|
url = self.watchtower_e.text()
|
|
@ -157,8 +157,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
|
||||||
|
|
||||||
self.create_status_bar()
|
self.create_status_bar()
|
||||||
self.need_update = threading.Event()
|
self.need_update = threading.Event()
|
||||||
self.need_update_ln = threading.Event()
|
|
||||||
|
|
||||||
self.decimal_point = config.get('decimal_point', DECIMAL_POINT_DEFAULT)
|
self.decimal_point = config.get('decimal_point', DECIMAL_POINT_DEFAULT)
|
||||||
try:
|
try:
|
||||||
decimal_point_to_base_unit_name(self.decimal_point)
|
decimal_point_to_base_unit_name(self.decimal_point)
|
||||||
|
@ -224,7 +222,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
|
||||||
interests = ['wallet_updated', 'network_updated', 'blockchain_updated',
|
interests = ['wallet_updated', 'network_updated', 'blockchain_updated',
|
||||||
'new_transaction', 'status',
|
'new_transaction', 'status',
|
||||||
'banner', 'verified', 'fee', 'fee_histogram', 'on_quotes',
|
'banner', 'verified', 'fee', 'fee_histogram', 'on_quotes',
|
||||||
'on_history', 'channel', 'channels', 'ln_status', 'ln_message',
|
'on_history', 'channel', 'channels', 'ln_message',
|
||||||
'ln_payment_completed']
|
'ln_payment_completed']
|
||||||
# To avoid leaking references to "self" that prevent the
|
# To avoid leaking references to "self" that prevent the
|
||||||
# window from being GC-ed when closed, callbacks should be
|
# window from being GC-ed when closed, callbacks should be
|
||||||
|
@ -374,8 +372,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
|
||||||
elif event == 'channel':
|
elif event == 'channel':
|
||||||
self.channels_list.update_single_row.emit(*args)
|
self.channels_list.update_single_row.emit(*args)
|
||||||
self.update_status()
|
self.update_status()
|
||||||
elif event == 'ln_status':
|
|
||||||
self.need_update_ln.set()
|
|
||||||
elif event == 'ln_payment_completed':
|
elif event == 'ln_payment_completed':
|
||||||
# FIXME it is really inefficient to force update the whole GUI
|
# FIXME it is really inefficient to force update the whole GUI
|
||||||
# just for a single LN payment. individual rows in lists should be updated instead.
|
# just for a single LN payment. individual rows in lists should be updated instead.
|
||||||
|
@ -638,7 +634,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
|
||||||
tools_menu.addAction(_("Electrum preferences") if sys.platform == 'darwin' else _("Preferences"), self.settings_dialog)
|
tools_menu.addAction(_("Electrum preferences") if sys.platform == 'darwin' else _("Preferences"), self.settings_dialog)
|
||||||
tools_menu.addAction(_("&Network"), lambda: self.gui_object.show_network_dialog(self))
|
tools_menu.addAction(_("&Network"), lambda: self.gui_object.show_network_dialog(self))
|
||||||
if self.config.get('lightning'):
|
if self.config.get('lightning'):
|
||||||
tools_menu.addAction(_("&Watchtower"), lambda: self.gui_object.show_watchtower_dialog(self))
|
tools_menu.addAction(_("&Lightning"), self.gui_object.show_lightning_dialog)
|
||||||
tools_menu.addAction(_("&Plugins"), self.plugins_dialog)
|
tools_menu.addAction(_("&Plugins"), self.plugins_dialog)
|
||||||
tools_menu.addSeparator()
|
tools_menu.addSeparator()
|
||||||
tools_menu.addAction(_("&Sign/verify message"), self.sign_verify_message)
|
tools_menu.addAction(_("&Sign/verify message"), self.sign_verify_message)
|
||||||
|
|
Loading…
Add table
Reference in a new issue