Trezor/KeepKey: force watching only improvements
Only warn about watching only once given a chance to pair. Failure to pair makes watching-only and warns. In error message to user, distinguish between failure to connect and failure to pair.
This commit is contained in:
@@ -39,26 +39,29 @@ class BIP44_HW_Wallet(BIP44_Wallet):
|
||||
# handler. The handler is per-window and preserved across
|
||||
# device reconnects
|
||||
self.handler = None
|
||||
self.force_watching_only = True
|
||||
self.force_watching_only = False
|
||||
|
||||
def set_session_timeout(self, seconds):
|
||||
self.print_error("setting session timeout to %d seconds" % seconds)
|
||||
self.session_timeout = seconds
|
||||
self.storage.put('session_timeout', seconds)
|
||||
|
||||
def set_force_watching_only(self, value):
|
||||
if value != self.force_watching_only:
|
||||
self.force_watching_only = value
|
||||
self.handler.watching_only_changed()
|
||||
|
||||
def unpaired(self):
|
||||
'''A device paired with the wallet was diconnected. This can be
|
||||
called in any thread context.'''
|
||||
self.print_error("unpaired")
|
||||
self.force_watching_only = True
|
||||
self.handler.watching_only_changed()
|
||||
self.set_force_watching_only(True)
|
||||
|
||||
def paired(self):
|
||||
'''A device paired with the wallet was (re-)connected. This can be
|
||||
called in any thread context.'''
|
||||
self.print_error("paired")
|
||||
self.force_watching_only = False
|
||||
self.handler.watching_only_changed()
|
||||
self.set_force_watching_only(False)
|
||||
|
||||
def timeout(self):
|
||||
'''Called when the wallet session times out. Note this is called from
|
||||
|
||||
@@ -20,9 +20,6 @@ from ..hw_wallet import BIP44_HW_Wallet, HW_PluginBase
|
||||
# TREZOR initialization methods
|
||||
TIM_NEW, TIM_RECOVER, TIM_MNEMONIC, TIM_PRIVKEY = range(0, 4)
|
||||
|
||||
class DeviceDisconnectedError(Exception):
|
||||
pass
|
||||
|
||||
class TrezorCompatibleWallet(BIP44_HW_Wallet):
|
||||
|
||||
def get_public_key(self, bip32_path):
|
||||
@@ -137,17 +134,15 @@ class TrezorCompatiblePlugin(HW_PluginBase):
|
||||
assert self.main_thread != threading.current_thread()
|
||||
|
||||
devmgr = self.device_manager()
|
||||
client = devmgr.client_for_wallet(self, wallet, force_pair)
|
||||
try:
|
||||
client = devmgr.client_for_wallet(self, wallet, force_pair)
|
||||
except:
|
||||
wallet.set_force_watching_only(True)
|
||||
raise
|
||||
|
||||
if client:
|
||||
self.print_error("set last_operation")
|
||||
wallet.last_operation = time.time()
|
||||
elif force_pair:
|
||||
msg = (_('Could not connect to your %s. Verify the '
|
||||
'cable is connected and that no other app is '
|
||||
'using it.\nContinuing in watching-only mode '
|
||||
'until the device is re-connected.') % self.device)
|
||||
raise DeviceDisconnectedError(msg)
|
||||
|
||||
return client
|
||||
|
||||
|
||||
Reference in New Issue
Block a user