tfix #4577 - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit a799a00dc52d475c1a849eda4522a752a50f2d61 DIR parent 579d48cf0cca3038961814f83dfc9028a410dd69 HTML Author: SomberNight <somber.night@protonmail.com> Date: Tue, 24 Jul 2018 18:57:49 +0200 fix #4577 Diffstat: M electrum/base_wizard.py | 18 ++++++++++++++---- M electrum/gui/kivy/uix/dialogs/inst… | 7 ++++++- M electrum/wallet.py | 2 +- 3 files changed, 21 insertions(+), 6 deletions(-) --- DIR diff --git a/electrum/base_wizard.py b/electrum/base_wizard.py t@@ -34,7 +34,7 @@ from .keystore import bip44_derivation, purpose48_derivation from .wallet import Imported_Wallet, Standard_Wallet, Multisig_Wallet, wallet_types, Wallet from .storage import STO_EV_USER_PW, STO_EV_XPUB_PW, get_derivation_used_for_hw_device_encryption from .i18n import _ -from .util import UserCancelled, InvalidPassword +from .util import UserCancelled, InvalidPassword, WalletFileException # hardware device setup purpose HWD_SETUP_NEW_WALLET, HWD_SETUP_DECRYPT_WALLET = range(0, 2) t@@ -106,10 +106,20 @@ class BaseWizard(object): self.choice_dialog(title=title, message=message, choices=choices, run_next=self.on_wallet_type) def upgrade_storage(self): + exc = None def on_finished(): - self.wallet = Wallet(self.storage) - self.terminate() - self.waiting_dialog(partial(self.storage.upgrade), _('Upgrading wallet format...'), on_finished=on_finished) + if exc is None: + self.wallet = Wallet(self.storage) + self.terminate() + else: + raise exc + def do_upgrade(): + nonlocal exc + try: + self.storage.upgrade() + except Exception as e: + exc = e + self.waiting_dialog(do_upgrade, _('Upgrading wallet format...'), on_finished=on_finished) def load_2fa(self): self.storage.put('wallet_type', '2fa') DIR diff --git a/electrum/gui/kivy/uix/dialogs/installwizard.py b/electrum/gui/kivy/uix/dialogs/installwizard.py t@@ -957,7 +957,12 @@ class InstallWizard(BaseWizard, Widget): # on completion hide message Clock.schedule_once(lambda dt: app.info_bubble.hide(now=True), -1) if on_finished: - Clock.schedule_once(lambda dt: on_finished(), -1) + def protected_on_finished(): + try: + on_finished() + except Exception as e: + self.show_error(str(e)) + Clock.schedule_once(lambda dt: protected_on_finished(), -1) app = App.get_running_app() app.show_info_bubble( DIR diff --git a/electrum/wallet.py b/electrum/wallet.py t@@ -1661,4 +1661,4 @@ class Wallet(object): return Multisig_Wallet if wallet_type in wallet_constructors: return wallet_constructors[wallet_type] - raise RuntimeError("Unknown wallet type: " + str(wallet_type)) + raise WalletFileException("Unknown wallet type: " + str(wallet_type))