Browse Source

qt wizard: handle some cases of hw device being unplugged during flow

To reproduce, open two wizards in parallel. Use one to enter the flow and start creating a wallet,
then physically unplug the hw device at the correct time, and use the other wizard to trigger a rescan.
The rescan will unpair the hw device, resulting in device_manager.client_by_id to return None when
continuing the flow on the first wizard.

fixes https://github.com/spesmilo/electrum/issues/8858
master
SomberNight 2 years ago
parent
commit
e7ebf5d950
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 12
      electrum/gui/qt/wizard/wallet.py

12
electrum/gui/qt/wizard/wallet.py

@ -1253,6 +1253,8 @@ class WCWalletPasswordHardware(WalletWizardComponent):
device_id = _info.device.id_
client = self.plugins.device_manager.client_by_id(device_id, scan_now=False)
# client.handler = self.plugin.create_handler(self.wizard)
# FIXME client can be None if it was recently disconnected.
# also, even if not None, this might raise (e.g. if it disconnected *just now*):
self.wizard_data['password'] = client.get_password_for_storage_encryption()
@ -1282,6 +1284,11 @@ class WCHWUnlock(WalletWizardComponent, Logger):
device_id = _info.device.id_
client = self.plugins.device_manager.client_by_id(device_id, scan_now=False)
if client is None:
self.error = _("Client for hardware device was unpaired.")
self.busy = False
self.validate()
return
client.handler = self.plugin.create_handler(self.wizard)
def unlock_task(client):
@ -1357,6 +1364,11 @@ class WCHWXPub(WalletWizardComponent, Logger):
device_id = _info.device.id_
client = self.plugins.device_manager.client_by_id(device_id, scan_now=False)
if client is None:
self.error = _("Client for hardware device was unpaired.")
self.busy = False
self.validate()
return
if not client.handler:
client.handler = self.plugin.create_handler(self.wizard)

Loading…
Cancel
Save