From d70831392dbbe362bc6d5dded53bd31c7a387fc6 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Wed, 23 Aug 2023 12:30:20 +0200 Subject: [PATCH] wizard: add keepkey to new wizard --- electrum/plugins/bitbox02/bitbox02.py | 2 +- electrum/plugins/bitbox02/qt.py | 2 +- .../plugins/digitalbitbox/digitalbitbox.py | 2 +- electrum/plugins/digitalbitbox/qt.py | 2 +- electrum/plugins/jade/jade.py | 2 +- electrum/plugins/jade/qt.py | 2 +- electrum/plugins/keepkey/keepkey.py | 26 +++++++++++++++++++ electrum/plugins/keepkey/qt.py | 21 ++++++++++++++- 8 files changed, 52 insertions(+), 7 deletions(-) diff --git a/electrum/plugins/bitbox02/bitbox02.py b/electrum/plugins/bitbox02/bitbox02.py index 9d874b997..599890421 100644 --- a/electrum/plugins/bitbox02/bitbox02.py +++ b/electrum/plugins/bitbox02/bitbox02.py @@ -731,7 +731,7 @@ class BitBox02Plugin(HW_PluginBase): else: return 'bitbox02_unlock' - # insert trezor pages in new wallet wizard + # insert bitbox02 pages in new wallet wizard def extend_wizard(self, wizard: 'NewWalletWizard'): views = { 'bitbox02_start': { diff --git a/electrum/plugins/bitbox02/qt.py b/electrum/plugins/bitbox02/qt.py index 084d95062..febb1f17c 100644 --- a/electrum/plugins/bitbox02/qt.py +++ b/electrum/plugins/bitbox02/qt.py @@ -73,7 +73,7 @@ class Plugin(BitBox02Plugin, QtPluginBase): def init_wallet_wizard(self, wizard: 'QENewWalletWizard'): self.extend_wizard(wizard) - # insert trezor pages in new wallet wizard + # insert bitbox02 pages in new wallet wizard def extend_wizard(self, wizard: 'QENewWalletWizard'): super().extend_wizard(wizard) views = { diff --git a/electrum/plugins/digitalbitbox/digitalbitbox.py b/electrum/plugins/digitalbitbox/digitalbitbox.py index d4323819a..3b8c7020c 100644 --- a/electrum/plugins/digitalbitbox/digitalbitbox.py +++ b/electrum/plugins/digitalbitbox/digitalbitbox.py @@ -780,7 +780,7 @@ class DigitalBitboxPlugin(HW_PluginBase): else: return 'dbitbox_unlock' - # insert trezor pages in new wallet wizard + # insert digitalbitbox pages in new wallet wizard def extend_wizard(self, wizard: 'NewWalletWizard'): views = { 'dbitbox_start': { diff --git a/electrum/plugins/digitalbitbox/qt.py b/electrum/plugins/digitalbitbox/qt.py index de0164075..ed356e7e8 100644 --- a/electrum/plugins/digitalbitbox/qt.py +++ b/electrum/plugins/digitalbitbox/qt.py @@ -47,7 +47,7 @@ class Plugin(DigitalBitboxPlugin, QtPluginBase): def init_wallet_wizard(self, wizard: 'QENewWalletWizard'): self.extend_wizard(wizard) - # insert trezor pages in new wallet wizard + # insert digitalbitbox pages in new wallet wizard def extend_wizard(self, wizard: 'QENewWalletWizard'): super().extend_wizard(wizard) views = { diff --git a/electrum/plugins/jade/jade.py b/electrum/plugins/jade/jade.py index 14d4ae9fc..2c14a9688 100644 --- a/electrum/plugins/jade/jade.py +++ b/electrum/plugins/jade/jade.py @@ -488,7 +488,7 @@ class JadePlugin(HW_PluginBase): else: return 'jade_unlock' - # insert trezor pages in new wallet wizard + # insert jade pages in new wallet wizard def extend_wizard(self, wizard: 'NewWalletWizard'): views = { 'jade_start': { diff --git a/electrum/plugins/jade/qt.py b/electrum/plugins/jade/qt.py index 0fdbe63d7..96a5c92d7 100644 --- a/electrum/plugins/jade/qt.py +++ b/electrum/plugins/jade/qt.py @@ -39,7 +39,7 @@ class Plugin(JadePlugin, QtPluginBase): def init_wallet_wizard(self, wizard: 'QENewWalletWizard'): self.extend_wizard(wizard) - # insert trezor pages in new wallet wizard + # insert jade pages in new wallet wizard def extend_wizard(self, wizard: 'QENewWalletWizard'): super().extend_wizard(wizard) views = { diff --git a/electrum/plugins/keepkey/keepkey.py b/electrum/plugins/keepkey/keepkey.py index aa09aeb97..5b8fe8dea 100644 --- a/electrum/plugins/keepkey/keepkey.py +++ b/electrum/plugins/keepkey/keepkey.py @@ -488,3 +488,29 @@ class KeepKeyPlugin(HW_PluginBase): def get_tx(self, tx_hash): tx = self.prev_tx[tx_hash] return self.electrum_tx_to_txtype(tx) + + # new wizard + + def wizard_entry_for_device(self, device_info: 'DeviceInfo', *, new_wallet=True) -> str: + if new_wallet: + return 'keepkey_start' if device_info.initialized else 'keepkey_not_initialized' + else: + return 'keepkey_unlock' + + # insert keepkey pages in new wallet wizard + def extend_wizard(self, wizard: 'NewWalletWizard'): + views = { + 'keepkey_start': { + 'next': 'keepkey_xpub', + }, + 'keepkey_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) + }, + 'keepkey_not_initialized': {}, + 'keepkey_unlock': { + 'last': True + }, + } + wizard.navmap_merge(views) diff --git a/electrum/plugins/keepkey/qt.py b/electrum/plugins/keepkey/qt.py index 7ea74b372..2ee5c2b69 100644 --- a/electrum/plugins/keepkey/qt.py +++ b/electrum/plugins/keepkey/qt.py @@ -1,5 +1,5 @@ from functools import partial -import threading +from typing import TYPE_CHECKING from PyQt5.QtCore import Qt, QEventLoop, pyqtSignal, QRegExp from PyQt5.QtGui import QRegExpValidator @@ -17,6 +17,10 @@ from ..hw_wallet.qt import QtHandlerBase, QtPluginBase from ..hw_wallet.plugin import only_hook_if_libraries_available from .keepkey import KeepKeyPlugin, TIM_NEW, TIM_RECOVER, TIM_MNEMONIC +from electrum.gui.qt.wizard.wallet import WCScriptAndDerivation, WCHWUninitialized, WCHWUnlock, WCHWXPub + +if TYPE_CHECKING: + from electrum.gui.qt.wizard.wallet import QENewWalletWizard PASSPHRASE_HELP_SHORT =_( "Passphrases allow you to access new wallets, each " @@ -310,6 +314,21 @@ class Plugin(KeepKeyPlugin, QtPlugin): from keepkeylib.qt.pinmatrix import PinMatrixWidget return PinMatrixWidget + @hook + def init_wallet_wizard(self, wizard: 'QENewWalletWizard'): + self.extend_wizard(wizard) + + # insert keepkey pages in new wallet wizard + def extend_wizard(self, wizard: 'QENewWalletWizard'): + super().extend_wizard(wizard) + views = { + 'keepkey_start': {'gui': WCScriptAndDerivation}, + 'keepkey_xpub': {'gui': WCHWXPub}, + 'keepkey_not_initialized': {'gui': WCHWUninitialized}, + 'keepkey_unlock': {'gui': WCHWUnlock} + } + wizard.navmap_merge(views) + class SettingsDialog(WindowModalDialog): '''This dialog doesn't require a device be paired with a wallet.