URI: 
       tqt.py - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
       tqt.py (2752B)
       ---
            1 from functools import partial
            2 
            3 from PyQt5.QtCore import pyqtSignal
            4 from PyQt5.QtWidgets import QInputDialog, QLabel, QVBoxLayout, QLineEdit
            5 
            6 from electrum.i18n import _
            7 from electrum.plugin import hook
            8 from electrum.wallet import Standard_Wallet
            9 from electrum.gui.qt.util import WindowModalDialog
           10 
           11 from .ledger import LedgerPlugin, Ledger_Client
           12 from ..hw_wallet.qt import QtHandlerBase, QtPluginBase
           13 from ..hw_wallet.plugin import only_hook_if_libraries_available
           14 
           15 
           16 class Plugin(LedgerPlugin, QtPluginBase):
           17     icon_unpaired = "ledger_unpaired.png"
           18     icon_paired = "ledger.png"
           19 
           20     def create_handler(self, window):
           21         return Ledger_Handler(window)
           22 
           23     @only_hook_if_libraries_available
           24     @hook
           25     def receive_menu(self, menu, addrs, wallet):
           26         if type(wallet) is not Standard_Wallet:
           27             return
           28         keystore = wallet.get_keystore()
           29         if type(keystore) == self.keystore_class and len(addrs) == 1:
           30             def show_address():
           31                 keystore.thread.add(partial(self.show_address, wallet, addrs[0]))
           32             menu.addAction(_("Show on Ledger"), show_address)
           33 
           34 class Ledger_Handler(QtHandlerBase):
           35     setup_signal = pyqtSignal()
           36     auth_signal = pyqtSignal(object, object)
           37 
           38     def __init__(self, win):
           39         super(Ledger_Handler, self).__init__(win, 'Ledger')
           40         self.setup_signal.connect(self.setup_dialog)
           41         self.auth_signal.connect(self.auth_dialog)
           42 
           43     def word_dialog(self, msg):
           44         response = QInputDialog.getText(self.top_level_window(), "Ledger Wallet Authentication", msg, QLineEdit.Password)
           45         if not response[1]:
           46             self.word = None
           47         else:
           48             self.word = str(response[0])
           49         self.done.set()
           50 
           51     def message_dialog(self, msg):
           52         self.clear_dialog()
           53         self.dialog = dialog = WindowModalDialog(self.top_level_window(), _("Ledger Status"))
           54         l = QLabel(msg)
           55         vbox = QVBoxLayout(dialog)
           56         vbox.addWidget(l)
           57         dialog.show()
           58 
           59     def auth_dialog(self, data, client: 'Ledger_Client'):
           60         try:
           61             from .auth2fa import LedgerAuthDialog
           62         except ImportError as e:
           63             self.message_dialog(repr(e))
           64             return
           65         dialog = LedgerAuthDialog(self, data, client=client)
           66         dialog.exec_()
           67         self.word = dialog.pin
           68         self.done.set()
           69 
           70     def get_auth(self, data, *, client: 'Ledger_Client'):
           71         self.done.clear()
           72         self.auth_signal.emit(data, client)
           73         self.done.wait()
           74         return self.word
           75 
           76     def get_setup(self):
           77         self.done.clear()
           78         self.setup_signal.emit()
           79         self.done.wait()
           80         return
           81 
           82     def setup_dialog(self):
           83         self.show_error(_('Initialization of Ledger HW devices is currently disabled.'))