Files
purple-electrumwallet/electrum/plugins/ledger/qt.py
T

84 lines
2.6 KiB
Python
Raw Normal View History

2019-02-11 20:21:24 +01:00
from functools import partial
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QInputDialog, QLabel, QVBoxLayout, QLineEdit
2016-01-11 15:08:12 +09:00
from electrum.i18n import _
2018-07-11 17:38:47 +02:00
from electrum.plugin import hook
from electrum.wallet import Standard_Wallet
2019-02-11 20:21:24 +01:00
from electrum.gui.qt.util import WindowModalDialog
2018-03-20 14:15:54 +01:00
2016-08-31 11:50:19 +02:00
from .ledger import LedgerPlugin
from ..hw_wallet.qt import QtHandlerBase, QtPluginBase
2018-09-19 20:02:03 +02:00
from ..hw_wallet.plugin import only_hook_if_libraries_available
2015-11-23 19:38:48 +01:00
2016-12-21 12:52:54 +07:00
2016-08-31 11:50:19 +02:00
class Plugin(LedgerPlugin, QtPluginBase):
2019-02-01 19:01:21 +01:00
icon_unpaired = "ledger_unpaired.png"
icon_paired = "ledger.png"
2015-11-23 19:38:48 +01:00
2016-08-31 11:50:19 +02:00
def create_handler(self, window):
return Ledger_Handler(window)
2018-09-19 20:02:03 +02:00
@only_hook_if_libraries_available
@hook
def receive_menu(self, menu, addrs, wallet):
if type(wallet) is not Standard_Wallet:
return
keystore = wallet.get_keystore()
if type(keystore) == self.keystore_class and len(addrs) == 1:
def show_address():
keystore.thread.add(partial(self.show_address, wallet, addrs[0]))
menu.addAction(_("Show on Ledger"), show_address)
2016-08-31 11:50:19 +02:00
class Ledger_Handler(QtHandlerBase):
2016-12-21 12:52:54 +07:00
setup_signal = pyqtSignal()
auth_signal = pyqtSignal(object)
2015-11-23 19:38:48 +01:00
def __init__(self, win):
2016-08-31 11:50:19 +02:00
super(Ledger_Handler, self).__init__(win, 'Ledger')
2016-12-21 12:52:54 +07:00
self.setup_signal.connect(self.setup_dialog)
self.auth_signal.connect(self.auth_dialog)
2015-11-23 19:38:48 +01:00
2016-01-30 08:11:41 +01:00
def word_dialog(self, msg):
response = QInputDialog.getText(self.top_level_window(), "Ledger Wallet Authentication", msg, QLineEdit.Password)
if not response[1]:
self.word = None
else:
self.word = str(response[0])
2016-08-18 11:34:37 +02:00
self.done.set()
2016-12-21 12:52:54 +07:00
def message_dialog(self, msg):
self.clear_dialog()
self.dialog = dialog = WindowModalDialog(self.top_level_window(), _("Ledger Status"))
l = QLabel(msg)
vbox = QVBoxLayout(dialog)
vbox.addWidget(l)
dialog.show()
def auth_dialog(self, data):
2017-01-09 13:02:48 +01:00
try:
from .auth2fa import LedgerAuthDialog
except ImportError as e:
self.message_dialog(repr(e))
2017-01-09 13:02:48 +01:00
return
2016-12-21 12:52:54 +07:00
dialog = LedgerAuthDialog(self, data)
dialog.exec_()
self.word = dialog.pin
self.done.set()
2016-12-21 12:52:54 +07:00
def get_auth(self, data):
self.done.clear()
self.auth_signal.emit(data)
self.done.wait()
return self.word
2016-12-21 12:52:54 +07:00
def get_setup(self):
self.done.clear()
self.setup_signal.emit()
self.done.wait()
return
2016-12-21 12:52:54 +07:00
def setup_dialog(self):
2018-03-20 14:15:54 +01:00
self.show_error(_('Initialization of Ledger HW devices is currently disabled.'))