Make all errors for Trezor visible in the GUI

This commit is contained in:
Maran 2014-08-22 13:24:29 +02:00
parent b48e996562
commit 0ce463c99c
1 changed files with 13 additions and 11 deletions

View File

@ -30,6 +30,10 @@ def log(msg):
stderr.write("%s\n" % msg) stderr.write("%s\n" % msg)
stderr.flush() stderr.flush()
def give_error(message):
QMessageBox.warning(QDialog(), _('Warning'), _(message), _('OK'))
raise Exception(message)
class Plugin(BasePlugin): class Plugin(BasePlugin):
def fullname(self): return 'Trezor Wallet' def fullname(self): return 'Trezor Wallet'
@ -116,16 +120,14 @@ class TrezorWallet(NewWallet):
def get_client(self): def get_client(self):
if not TREZOR: if not TREZOR:
raise Exception('please install github.com/trezor/python-trezor') give_error('please install github.com/trezor/python-trezor')
if not self.client or self.client.bad: if not self.client or self.client.bad:
try: try:
d = HidTransport.enumerate()[0] d = HidTransport.enumerate()[0]
self.transport = HidTransport(d) self.transport = HidTransport(d)
except: except:
d = QDialog() give_error('Could not connect to your Trezor. Please verify the cable is connected and that no other app is using it.')
QMessageBox.warning(d, _('Warning'), _('Could not connect to your Trezor. Please verify the cable is connected and that no other app is using it.'), _('OK'))
raise Exception("Trezor not found")
self.client = QtGuiTrezorClient(self.transport) self.client = QtGuiTrezorClient(self.transport)
self.client.set_tx_api(self) self.client.set_tx_api(self)
#self.client.clear_session()# TODO Doesn't work with firmware 1.1, returns proto.Failure #self.client.clear_session()# TODO Doesn't work with firmware 1.1, returns proto.Failure
@ -174,7 +176,7 @@ class TrezorWallet(NewWallet):
try: try:
decrypted_msg = self.get_client().decrypt_message(address_n, b64decode(message)) decrypted_msg = self.get_client().decrypt_message(address_n, b64decode(message))
except Exception, e: except Exception, e:
raise e give_error(e)
finally: finally:
twd.emit(SIGNAL('trezor_done')) twd.emit(SIGNAL('trezor_done'))
return str(decrypted_msg) return str(decrypted_msg)
@ -184,11 +186,11 @@ class TrezorWallet(NewWallet):
address_path = self.address_id(address) address_path = self.address_id(address)
address_n = self.get_client().expand_path(address_path) address_n = self.get_client().expand_path(address_path)
except Exception, e: except Exception, e:
raise give_error(e)
try: try:
msg_sig = self.get_client().sign_message('Bitcoin', address_n, message) msg_sig = self.get_client().sign_message('Bitcoin', address_n, message)
except Exception, e: except Exception, e:
raise e give_error(e)
finally: finally:
twd.emit(SIGNAL('trezor_done')) twd.emit(SIGNAL('trezor_done'))
b64_msg_sig = b64encode(msg_sig.signature) b64_msg_sig = b64encode(msg_sig.signature)
@ -199,14 +201,14 @@ class TrezorWallet(NewWallet):
return return
if not self.check_proper_device(): if not self.check_proper_device():
raise Exception('Wrong device or password') give_error('Wrong device or password')
inputs = self.tx_inputs(tx) inputs = self.tx_inputs(tx)
outputs = self.tx_outputs(tx) outputs = self.tx_outputs(tx)
try: try:
signed_tx = self.get_client().sign_tx('Bitcoin', inputs, outputs)[1] signed_tx = self.get_client().sign_tx('Bitcoin', inputs, outputs)[1]
except Exception, e: except Exception, e:
raise e give_error(e)
finally: finally:
twd.emit(SIGNAL('trezor_done')) twd.emit(SIGNAL('trezor_done'))
values = [i['value'] for i in tx.inputs] values = [i['value'] for i in tx.inputs]
@ -229,8 +231,8 @@ class TrezorWallet(NewWallet):
if ('is_coinbase' in txinput and txinput['is_coinbase']): if ('is_coinbase' in txinput and txinput['is_coinbase']):
prev_hash = "\0"*32 prev_hash = "\0"*32
prev_index = 0xffffffff # signed int -1 prev_index = 0xffffffff # signed int -1
else: else:
prev_hash = unhexlify(txinput['prevout_hash']) prev_hash = unhexlify(txinput['prevout_hash'])
prev_index = txinput['prevout_n'] prev_index = txinput['prevout_n']