diff --git a/electrum/base_wizard.py b/electrum/base_wizard.py index 2165019dd..ac8d7874b 100644 --- a/electrum/base_wizard.py +++ b/electrum/base_wizard.py @@ -42,7 +42,7 @@ from .storage import (WalletStorage, STO_EV_USER_PW, STO_EV_XPUB_PW, from .i18n import _ from .util import UserCancelled, InvalidPassword, WalletFileException from .simple_config import SimpleConfig -from .plugin import Plugins +from .plugin import Plugins, HardwarePluginLibraryUnavailable from .logging import Logger if TYPE_CHECKING: @@ -255,7 +255,8 @@ class BaseWizard(Logger): def failed_getting_device_infos(name, e): nonlocal debug_msg - self.logger.info(f'error getting device infos for {name}: {e}') + err_str_oneline = ' // '.join(str(e).splitlines()) + self.logger.warning(f'error getting device infos for {name}: {err_str_oneline}') indented_error_msg = ' '.join([''] + str(e).splitlines(keepends=True)) debug_msg += f' {name}: (error getting device infos)\n{indented_error_msg}\n' @@ -281,6 +282,9 @@ class BaseWizard(Logger): # FIXME: side-effect: unpaired_device_info sets client.handler device_infos = devmgr.unpaired_device_infos(None, plugin, devices=scanned_devices, include_failing_clients=True) + except HardwarePluginLibraryUnavailable as e: + failed_getting_device_infos(name, e) + continue except BaseException as e: self.logger.exception('') failed_getting_device_infos(name, e) diff --git a/electrum/plugin.py b/electrum/plugin.py index 5007a67e6..cf72ef221 100644 --- a/electrum/plugin.py +++ b/electrum/plugin.py @@ -283,6 +283,7 @@ class BasePlugin(Logger): class DeviceNotFoundError(Exception): pass class DeviceUnpairableError(Exception): pass +class HardwarePluginLibraryUnavailable(Exception): pass class Device(NamedTuple): @@ -502,7 +503,7 @@ class DeviceMgr(ThreadJob): unpaired device accepted by the plugin.''' if not plugin.libraries_available: message = plugin.get_library_not_available_message() - raise Exception(message) + raise HardwarePluginLibraryUnavailable(message) if devices is None: devices = self.scan_devices() devices = [dev for dev in devices if not self.xpub_by_id(dev.id_)]