diff --git a/electrum/plugins/trezor/qt.py b/electrum/plugins/trezor/qt.py index c32584b14..1285f5de9 100644 --- a/electrum/plugins/trezor/qt.py +++ b/electrum/plugins/trezor/qt.py @@ -14,7 +14,7 @@ from electrum.plugin import hook from electrum.keystore import ScriptTypeNotSupported from electrum.plugins.hw_wallet.qt import QtHandlerBase, QtPluginBase -from electrum.plugins.hw_wallet.plugin import only_hook_if_libraries_available +from electrum.plugins.hw_wallet.plugin import only_hook_if_libraries_available, OutdatedHwFirmwareException from electrum.gui.qt.util import (WindowModalDialog, WWLabel, Buttons, CancelButton, OkButton, CloseButton, PasswordLineEdit, getOpenFileName, ChoiceWidget) @@ -803,6 +803,11 @@ class WCTrezorXPub(WCHWXPub): _name, _info = self.wizard_data['hardware_device'] if xtype not in self.plugin.SUPPORTED_XTYPES: raise ScriptTypeNotSupported(_('This type of script is not supported with {}').format(_info.model_name)) + if not client.is_uptodate(): + msg = (_('Outdated {} firmware for device labelled {}. Please ' + 'download the updated firmware from {}') + .format(_info.model_name, _info.label, self.plugin.firmware_URL)) + raise OutdatedHwFirmwareException(msg) return client.get_xpub(derivation, xtype, True) @@ -810,9 +815,20 @@ class WCTrezorInitMethod(WizardComponent, Logger): def __init__(self, parent, wizard): WizardComponent.__init__(self, parent, wizard, title=_('HW Setup')) Logger.__init__(self) + self.plugin = None def on_ready(self): _name, _info = self.wizard_data['hardware_device'] + self.plugin = self.plugins.get_plugin(_info.plugin_name) + device_id = _info.device.id_ + client = self.plugins.device_manager.client_by_id(device_id, scan_now=False) + if not client.is_uptodate(): + msg = (_('Outdated {} firmware for device labelled {}. Please ' + 'download the updated firmware from {}') + .format(_info.model_name, _info.label, self.plugin.firmware_URL)) + self.error = msg + return + message = _('Choose how you want to initialize your {}.').format(_info.model_name) choices = [ # Must be short as QT doesn't word-wrap radio button text