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.'))