electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

lightning_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()