tnew icons to show hardware wallet pairing in status bar - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit b07d3466c01e6ca83490b1573cb936ca2a36b663 DIR parent 62b47ca3b323dd6f8fe8f3e9291846ad00afb271 HTML Author: ThomasV <thomasv@electrum.org> Date: Sat, 27 Aug 2016 11:30:53 +0200 new icons to show hardware wallet pairing in status bar Diffstat: M icons.qrc | 2 ++ M icons/keepkey.png | 0 A icons/keepkey_unpaired.png | 0 A icons/trezor_unpaired.png | 0 M lib/plugins.py | 3 +++ M plugins/keepkey/qt.py | 3 ++- M plugins/trezor/plugin.py | 4 ---- M plugins/trezor/qt.py | 3 ++- M plugins/trezor/qt_generic.py | 22 ++++++++++++++++++---- 9 files changed, 27 insertions(+), 10 deletions(-) --- DIR diff --git a/icons.qrc b/icons.qrc t@@ -15,6 +15,7 @@ <file>icons/file.png</file> <file>icons/hot_seed.png</file> <file>icons/keepkey.png</file> + <file>icons/keepkey_unpaired.png</file> <file>icons/key.png</file> <file>icons/lock.png</file> <file>icons/microphone.png</file> t@@ -28,6 +29,7 @@ <file>icons/status_lagging.png</file> <file>icons/seal.png</file> <file>icons/speaker.png</file> + <file>icons/trezor_unpaired.png</file> <file>icons/trezor.png</file> <file>icons/trustedcoin.png</file> <file>icons/unconfirmed.png</file> DIR diff --git a/icons/keepkey.png b/icons/keepkey.png Binary files differ. DIR diff --git a/icons/keepkey_unpaired.png b/icons/keepkey_unpaired.png Binary files differ. DIR diff --git a/icons/trezor_unpaired.png b/icons/trezor_unpaired.png Binary files differ. DIR diff --git a/lib/plugins.py b/lib/plugins.py t@@ -385,6 +385,7 @@ class DeviceMgr(ThreadJob, PrintError): def client_for_keystore(self, plugin, handler, keystore, force_pair): with self.lock: + plugin.update_status(handler, False) devices = self.scan_devices() xpub = keystore.xpub derivation = keystore.get_derivation() t@@ -392,6 +393,8 @@ class DeviceMgr(ThreadJob, PrintError): if client is None and force_pair: info = self.select_device(plugin, handler, keystore, devices) client = self.force_pair_xpub(plugin, handler, info, xpub, derivation, devices) + if client: + plugin.update_status(handler, True) return client def client_by_xpub(self, plugin, xpub, handler, devices): DIR diff --git a/plugins/keepkey/qt.py b/plugins/keepkey/qt.py t@@ -3,7 +3,8 @@ from keepkey import KeepKeyPlugin class Plugin(qt_plugin_class(KeepKeyPlugin)): - icon_file = ":icons/keepkey.png" + icon_paired = ":icons/keepkey.png" + icon_unpaired = ":icons/keepkey_unpaired.png" @classmethod def pin_matrix_widget_class(self): DIR diff --git a/plugins/trezor/plugin.py b/plugins/trezor/plugin.py t@@ -353,7 +353,3 @@ class TrezorCompatiblePlugin(HW_PluginBase): def get_tx(self, tx_hash): tx = self.prev_tx[tx_hash] return self.electrum_tx_to_txtype(tx) - - @staticmethod - def is_valid_seed(seed): - return True DIR diff --git a/plugins/trezor/qt.py b/plugins/trezor/qt.py t@@ -3,7 +3,8 @@ from trezor import TrezorPlugin class Plugin(qt_plugin_class(TrezorPlugin)): - icon_file = ":icons/trezor.png" + icon_unpaired = ":icons/trezor_unpaired.png" + icon_paired = ":icons/trezor.png" @classmethod def pin_matrix_widget_class(self): DIR diff --git a/plugins/trezor/qt_generic.py b/plugins/trezor/qt_generic.py t@@ -193,15 +193,26 @@ def qt_plugin_class(base_plugin_class): for keystore in wallet.get_keystores(): if type(keystore) != self.keystore_class: continue - tooltip = self.device + ' ' + keystore.label - button = StatusBarButton(QIcon(self.icon_file), tooltip, + tooltip = self.device + ' ' + (keystore.label or '') + button = StatusBarButton(QIcon(self.icon_unpaired), tooltip, partial(self.settings_dialog, window, keystore)) window.statusBar().addPermanentWidget(button) - keystore.handler = self.create_handler(window) + handler = self.create_handler(window) + handler.button = button + keystore.handler = handler keystore.thread = TaskThread(window, window.on_error) # Trigger a pairing keystore.thread.add(partial(self.get_client, keystore)) + window.connect(window, SIGNAL('keystore_status'), self._update_status) + + def update_status(self, handler, paired): + handler.win.emit(SIGNAL('keystore_status'), handler, paired) + + def _update_status(self, handler, paired): + icon = self.icon_paired if paired else self.icon_unpaired + handler.button.setIcon(QIcon(icon)) + @hook def receive_menu(self, menu, addrs, wallet): if type(wallet) is not Standard_Wallet: t@@ -222,7 +233,10 @@ def qt_plugin_class(base_plugin_class): forgotten their PIN or it is in bootloader mode.''' device_id = self.device_manager().xpub_id(keystore.xpub) if not device_id: - info = self.device_manager().select_device(keystore.handler, self, keystore) + try: + info = self.device_manager().select_device(self, keystore.handler, keystore) + except UserCancelled: + return device_id = info.device.id_ return device_id