From 46c60c9f0921da19398cc7e53f53c4bb4dcc1d86 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Wed, 23 Aug 2023 17:09:19 +0200 Subject: [PATCH] wizard: add ledger --- electrum/plugins/ledger/ledger.py | 27 +++++++++++++++++++++++++++ electrum/plugins/ledger/qt.py | 21 +++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/electrum/plugins/ledger/ledger.py b/electrum/plugins/ledger/ledger.py index 357a2017f..6fb77018b 100644 --- a/electrum/plugins/ledger/ledger.py +++ b/electrum/plugins/ledger/ledger.py @@ -1465,3 +1465,30 @@ class LedgerPlugin(HW_PluginBase): txin_type = wallet.get_txin_type(address) keystore.show_address(sequence, txin_type) + + # new wizard + + def wizard_entry_for_device(self, device_info: 'DeviceInfo', *, new_wallet=True) -> str: + if new_wallet: + return 'ledger_start' if device_info.initialized else 'ledger_not_initialized' + else: + return 'ledger_unlock' + + # insert ledger pages in new wallet wizard + def extend_wizard(self, wizard: 'NewWalletWizard'): + views = { + 'ledger_start': { + 'next': 'ledger_xpub', + }, + 'ledger_xpub': { + 'next': lambda d: wizard.wallet_password_view(d) if wizard.last_cosigner(d) else 'multisig_cosigner_keystore', + 'accept': wizard.maybe_master_pubkey, + 'last': lambda d: wizard.is_single_password() and wizard.last_cosigner(d) + }, + 'ledger_not_initialized': {}, + 'ledger_unlock': { + 'last': True + }, + } + wizard.navmap_merge(views) + diff --git a/electrum/plugins/ledger/qt.py b/electrum/plugins/ledger/qt.py index 7ab98f3a3..fd4ba61e6 100644 --- a/electrum/plugins/ledger/qt.py +++ b/electrum/plugins/ledger/qt.py @@ -1,4 +1,5 @@ from functools import partial +from typing import TYPE_CHECKING from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import QInputDialog, QLabel, QVBoxLayout, QLineEdit @@ -11,6 +12,10 @@ from electrum.gui.qt.util import WindowModalDialog from .ledger import LedgerPlugin, Ledger_Client from ..hw_wallet.qt import QtHandlerBase, QtPluginBase from ..hw_wallet.plugin import only_hook_if_libraries_available +from electrum.gui.qt.wizard.wallet import WCScriptAndDerivation, WCHWUninitialized, WCHWUnlock, WCHWXPub + +if TYPE_CHECKING: + from electrum.gui.qt.wizard.wallet import QENewWalletWizard class Plugin(LedgerPlugin, QtPluginBase): @@ -31,6 +36,22 @@ class Plugin(LedgerPlugin, QtPluginBase): keystore.thread.add(partial(self.show_address, wallet, addrs[0], keystore=keystore)) menu.addAction(_("Show on Ledger"), show_address) + @hook + def init_wallet_wizard(self, wizard: 'QENewWalletWizard'): + self.extend_wizard(wizard) + + # insert ledger pages in new wallet wizard + def extend_wizard(self, wizard: 'QENewWalletWizard'): + super().extend_wizard(wizard) + views = { + 'ledger_start': {'gui': WCScriptAndDerivation}, + 'ledger_xpub': {'gui': WCHWXPub}, + 'ledger_not_initialized': {'gui': WCHWUninitialized}, + 'ledger_unlock': {'gui': WCHWUnlock} + } + wizard.navmap_merge(views) + + class Ledger_Handler(QtHandlerBase): setup_signal = pyqtSignal() auth_signal = pyqtSignal(object, object)