URI: 
       tlightning_dialog.py - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
       tlightning_dialog.py (3650B)
       ---
            1 #!/usr/bin/env python
            2 #
            3 # Electrum - lightweight Bitcoin client
            4 # Copyright (C) 2012 thomasv@gitorious
            5 #
            6 # Permission is hereby granted, free of charge, to any person
            7 # obtaining a copy of this software and associated documentation files
            8 # (the "Software"), to deal in the Software without restriction,
            9 # including without limitation the rights to use, copy, modify, merge,
           10 # publish, distribute, sublicense, and/or sell copies of the Software,
           11 # and to permit persons to whom the Software is furnished to do so,
           12 # subject to the following conditions:
           13 #
           14 # The above copyright notice and this permission notice shall be
           15 # included in all copies or substantial portions of the Software.
           16 #
           17 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
           18 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
           19 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
           20 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
           21 # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
           22 # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
           23 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
           24 # SOFTWARE.
           25 
           26 from typing import TYPE_CHECKING
           27 
           28 from PyQt5.QtWidgets import (QDialog, QLabel, QVBoxLayout, QPushButton)
           29 
           30 from electrum import util
           31 from electrum.i18n import _
           32 
           33 from .util import Buttons
           34 
           35 if TYPE_CHECKING:
           36     from . import ElectrumGui
           37 
           38 
           39 class LightningDialog(QDialog):
           40 
           41     def __init__(self, gui_object: 'ElectrumGui'):
           42         QDialog.__init__(self)
           43         self.gui_object = gui_object
           44         self.config = gui_object.config
           45         self.network = gui_object.daemon.network
           46         assert self.network
           47         self.setWindowTitle(_('Lightning Network'))
           48         self.setMinimumWidth(600)
           49         vbox = QVBoxLayout(self)
           50         self.num_peers = QLabel('')
           51         vbox.addWidget(self.num_peers)
           52         self.num_nodes = QLabel('')
           53         vbox.addWidget(self.num_nodes)
           54         self.num_channels = QLabel('')
           55         vbox.addWidget(self.num_channels)
           56         self.status = QLabel('')
           57         vbox.addWidget(self.status)
           58         vbox.addStretch(1)
           59         b = QPushButton(_('Close'))
           60         b.clicked.connect(self.close)
           61         vbox.addLayout(Buttons(b))
           62         util.register_callback(self.on_channel_db, ['channel_db'])
           63         util.register_callback(self.set_num_peers, ['gossip_peers'])
           64         util.register_callback(self.set_unknown_channels, ['unknown_channels'])
           65         self.network.channel_db.update_counts() # trigger callback
           66         if self.network.lngossip:
           67             self.set_num_peers('', self.network.lngossip.num_peers())
           68             self.set_unknown_channels('', len(self.network.lngossip.unknown_ids))
           69         else:
           70             self.num_peers.setText(_('Lightning gossip not active.'))
           71 
           72     def on_channel_db(self, event, num_nodes, num_channels, num_policies):
           73         self.num_nodes.setText(_('{} nodes').format(num_nodes))
           74         self.num_channels.setText(_('{} channels').format(num_channels))
           75 
           76     def set_num_peers(self, event, num_peers):
           77         self.num_peers.setText(_('Connected to {} peers').format(num_peers))
           78 
           79     def set_unknown_channels(self, event, unknown):
           80         self.status.setText(_('Requesting {} channels...').format(unknown) if unknown else '')
           81 
           82     def is_hidden(self):
           83         return self.isMinimized() or self.isHidden()
           84 
           85     def show_or_hide(self):
           86         if self.is_hidden():
           87             self.bring_to_top()
           88         else:
           89             self.hide()
           90 
           91     def bring_to_top(self):
           92         self.show()
           93         self.raise_()
           94 
           95     def closeEvent(self, event):
           96         self.gui_object.lightning_dialog = None
           97         event.accept()