From 16cd896ea8d322dc165a45ef0f269ddcf501cd36 Mon Sep 17 00:00:00 2001 From: kdmukai Date: Thu, 26 May 2022 17:57:16 -0500 Subject: [PATCH] Additional bulletproofing for `LoadingScreenThread` spinner --- src/seedsigner/views/psbt_views.py | 11 ++--- src/seedsigner/views/seed_views.py | 70 ++++++++++++++++-------------- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/seedsigner/views/psbt_views.py b/src/seedsigner/views/psbt_views.py index 1895a273..b5150388 100644 --- a/src/seedsigner/views/psbt_views.py +++ b/src/seedsigner/views/psbt_views.py @@ -475,11 +475,12 @@ class PSBTFinalizeView(View): loading_screen = LoadingScreenThread(text="Signing PSBT...") loading_screen.start() - sig_cnt = PSBTParser.sig_count(psbt) - psbt.sign_with(psbt_parser.root) - trimmed_psbt = PSBTParser.trim(psbt) - - loading_screen.stop() + try: + sig_cnt = PSBTParser.sig_count(psbt) + psbt.sign_with(psbt_parser.root) + trimmed_psbt = PSBTParser.trim(psbt) + finally: + loading_screen.stop() if sig_cnt == PSBTParser.sig_count(trimmed_psbt): # Signing failed / didn't do anything diff --git a/src/seedsigner/views/seed_views.py b/src/seedsigner/views/seed_views.py index 5260f017..5370ecdb 100644 --- a/src/seedsigner/views/seed_views.py +++ b/src/seedsigner/views/seed_views.py @@ -648,46 +648,50 @@ class SeedExportXpubDetailsView(View): self.loading_screen = LoadingScreenThread(text="Generating xpub...") self.loading_screen.start() - if self.script_type == SettingsConstants.CUSTOM_DERIVATION: - derivation_path = self.custom_derivation - else: - derivation_path = PSBTParser.calc_derivation( - network=self.settings.get_value(SettingsConstants.SETTING__NETWORK), - wallet_type=self.sig_type, - script_type=self.script_type - ) + try: + if self.script_type == SettingsConstants.CUSTOM_DERIVATION: + derivation_path = self.custom_derivation + else: + derivation_path = PSBTParser.calc_derivation( + network=self.settings.get_value(SettingsConstants.SETTING__NETWORK), + wallet_type=self.sig_type, + script_type=self.script_type + ) - if self.settings.get_value(SettingsConstants.SETTING__XPUB_DETAILS) == SettingsConstants.OPTION__ENABLED: - embit_network = NETWORKS[SettingsConstants.map_network_to_embit(self.settings.get_value(SettingsConstants.SETTING__NETWORK))] - version = embit.bip32.detect_version( - derivation_path, - default="xpub", - network=embit_network - ) + if self.settings.get_value(SettingsConstants.SETTING__XPUB_DETAILS) == SettingsConstants.OPTION__ENABLED: + embit_network = NETWORKS[SettingsConstants.map_network_to_embit(self.settings.get_value(SettingsConstants.SETTING__NETWORK))] + version = embit.bip32.detect_version( + derivation_path, + default="xpub", + network=embit_network + ) - root = embit.bip32.HDKey.from_seed( - self.seed.seed_bytes, - version=embit_network["xprv"] - ) + root = embit.bip32.HDKey.from_seed( + self.seed.seed_bytes, + version=embit_network["xprv"] + ) - fingerprint = hexlify(root.child(0).fingerprint).decode('utf-8') - xprv = root.derive(derivation_path) - xpub = xprv.to_public() - xpub_base58 = xpub.to_string(version=version) + fingerprint = hexlify(root.child(0).fingerprint).decode('utf-8') + xprv = root.derive(derivation_path) + xpub = xprv.to_public() + xpub_base58 = xpub.to_string(version=version) - screen = seed_screens.SeedExportXpubDetailsScreen( - fingerprint=fingerprint, - has_passphrase=self.seed.passphrase is not None, - derivation_path=derivation_path, - xpub=xpub_base58, - ) + screen = seed_screens.SeedExportXpubDetailsScreen( + fingerprint=fingerprint, + has_passphrase=self.seed.passphrase is not None, + derivation_path=derivation_path, + xpub=xpub_base58, + ) + self.loading_screen.stop() + selected_menu_num = screen.display() + + else: + selected_menu_num = 0 + + finally: self.loading_screen.stop() - selected_menu_num = screen.display() - else: - self.loading_screen.stop() - selected_menu_num = 0 if selected_menu_num == 0: return Destination(