mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-01 09:45:18 +00:00
trezor/keepkey: better handling of exceptions during device initialization
notably Trezor T is returning a different msg type when trying to get an xpub from an uninitialized device, which we are not handling. instead we should just realise ourselves that we did not initialize the device
This commit is contained in:
parent
46fcf686b1
commit
9bd082cd82
2 changed files with 20 additions and 6 deletions
|
@ -181,19 +181,26 @@ class KeepKeyPlugin(HW_PluginBase):
|
|||
t = threading.Thread(target=self._initialize_device_safe, args=(settings, method, device_id, wizard, handler))
|
||||
t.setDaemon(True)
|
||||
t.start()
|
||||
wizard.loop.exec_()
|
||||
exit_code = wizard.loop.exec_()
|
||||
if exit_code != 0:
|
||||
# this method (initialize_device) was called with the expectation
|
||||
# of leaving the device in an initialized state when finishing.
|
||||
# signal that this is not the case:
|
||||
raise UserCancelled()
|
||||
wizard.choice_dialog(title=_('Initialize Device'), message=msg, choices=choices, run_next=f)
|
||||
|
||||
def _initialize_device_safe(self, settings, method, device_id, wizard, handler):
|
||||
exit_code = 0
|
||||
try:
|
||||
self._initialize_device(settings, method, device_id, wizard, handler)
|
||||
except UserCancelled:
|
||||
pass
|
||||
exit_code = 1
|
||||
except BaseException as e:
|
||||
traceback.print_exc(file=sys.stderr)
|
||||
handler.show_error(str(e))
|
||||
exit_code = 1
|
||||
finally:
|
||||
wizard.loop.exit(0)
|
||||
wizard.loop.exit(exit_code)
|
||||
|
||||
def _initialize_device(self, settings, method, device_id, wizard, handler):
|
||||
item, label, pin_protection, passphrase_protection = settings
|
||||
|
|
|
@ -202,19 +202,26 @@ class TrezorPlugin(HW_PluginBase):
|
|||
t = threading.Thread(target=self._initialize_device_safe, args=(settings, method, device_id, wizard, handler))
|
||||
t.setDaemon(True)
|
||||
t.start()
|
||||
wizard.loop.exec_()
|
||||
exit_code = wizard.loop.exec_()
|
||||
if exit_code != 0:
|
||||
# this method (initialize_device) was called with the expectation
|
||||
# of leaving the device in an initialized state when finishing.
|
||||
# signal that this is not the case:
|
||||
raise UserCancelled()
|
||||
wizard.choice_dialog(title=_('Initialize Device'), message=msg, choices=choices, run_next=f)
|
||||
|
||||
def _initialize_device_safe(self, settings, method, device_id, wizard, handler):
|
||||
exit_code = 0
|
||||
try:
|
||||
self._initialize_device(settings, method, device_id, wizard, handler)
|
||||
except UserCancelled:
|
||||
pass
|
||||
exit_code = 1
|
||||
except BaseException as e:
|
||||
traceback.print_exc(file=sys.stderr)
|
||||
handler.show_error(str(e))
|
||||
exit_code = 1
|
||||
finally:
|
||||
wizard.loop.exit(0)
|
||||
wizard.loop.exit(exit_code)
|
||||
|
||||
def _initialize_device(self, settings, method, device_id, wizard, handler):
|
||||
item, label, pin_protection, passphrase_protection, recovery_type = settings
|
||||
|
|
Loading…
Add table
Reference in a new issue