URI: 
       tduring wallet restore allow user to retry after invalid OTP. add abort button on kivy. - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 531a2a5c1ffa32dc204a10b839c7203524f29630
   DIR parent 248a3a57550e3886a4745453cde4f4e8073f0b6e
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Wed,  6 Jun 2018 22:36:53 +0200
       
       during wallet restore allow user to retry after invalid OTP. add abort button on kivy.
       
       Diffstat:
         M gui/kivy/main_window.py             |       2 +-
         M gui/kivy/uix/dialogs/installwizard… |      21 ++++++++++++++++++++-
         M plugins/trustedcoin/trustedcoin.py  |      23 ++++++++++++++++-------
       
       3 files changed, 37 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py
       t@@ -503,7 +503,7 @@ class ElectrumWindow(App):
                    else:
                        self.load_wallet(wallet)
                else:
       -            Logger.debug('Electrum: Wallet not found. Launching install wizard')
       +            Logger.debug('Electrum: Wallet not found or action needed. Launching install wizard')
                    storage = WalletStorage(path, manual_upgrades=True)
                    wizard = Factory.InstallWizard(self.electrum_config, self.plugins, storage)
                    wizard.bind(on_wizard_complete=self.on_wizard_complete)
   DIR diff --git a/gui/kivy/uix/dialogs/installwizard.py b/gui/kivy/uix/dialogs/installwizard.py
       t@@ -1,6 +1,7 @@
        
        from functools import partial
        import threading
       +import os
        
        from kivy.app import App
        from kivy.clock import Clock
       t@@ -238,11 +239,23 @@ Builder.load_string('''
                text: root.message2
            BoxLayout:
                orientation: 'horizontal'
       -        size_hint: 1, 0.2
       +        size_hint: 1, 0.3
                Widget
                CheckBox:
                    id:cb
                    on_state: Clock.schedule_once(root.on_cb)
       +    Widget
       +        size_hint: 1, 1
       +        height: '48sp'
       +    BoxLayout:
       +        orientation: 'horizontal'
       +        WizardButton:
       +            id: abort
       +            text: _('Abort creation')
       +            on_release: root.abort_wallet_creation()
       +            size_hint: 1, None
       +        Widget
       +            size_hint: 1, None
        
        <WizardNewOTPDialog>
            message : ''
       t@@ -618,6 +631,12 @@ class WizardKnownOTPDialog(WizardOTPDialogBase):
                self.ids.otp.text = ''
                self.ids.next.disabled = not self.ids.cb.active
        
       +    def abort_wallet_creation(self):
       +        self._on_release = True
       +        os.unlink(self.wizard.storage.path)
       +        self.wizard.terminate()
       +        self.dismiss()
       +
        
        class WizardNewOTPDialog(WizardOTPDialogBase):
        
   DIR diff --git a/plugins/trustedcoin/trustedcoin.py b/plugins/trustedcoin/trustedcoin.py
       t@@ -581,15 +581,24 @@ class TrustedCoinPlugin(BasePlugin):
            def do_auth(self, wizard, short_id, otp, xpub3):
                try:
                    server.auth(short_id, otp)
       +        except TrustedCoinException as e:
       +            if e.status_code == 400:  # invalid OTP
       +                wizard.show_message(_('Invalid one-time password.'))
       +                # ask again for otp
       +                self.request_otp_dialog(wizard, short_id, None, xpub3)
       +            else:
       +                wizard.show_message(str(e))
       +                wizard.terminate()
                except Exception as e:
                    wizard.show_message(str(e))
       -            return
       -        k3 = keystore.from_xpub(xpub3)
       -        wizard.storage.put('x3/', k3.dump())
       -        wizard.storage.put('use_trustedcoin', True)
       -        wizard.storage.write()
       -        wizard.wallet = Wallet_2fa(wizard.storage)
       -        wizard.run('create_addresses')
       +            wizard.terminate()
       +        else:
       +            k3 = keystore.from_xpub(xpub3)
       +            wizard.storage.put('x3/', k3.dump())
       +            wizard.storage.put('use_trustedcoin', True)
       +            wizard.storage.write()
       +            wizard.wallet = Wallet_2fa(wizard.storage)
       +            wizard.run('create_addresses')
        
            def on_reset_auth(self, wizard, short_id, seed, passphrase, xpub3):
                xprv1, xpub1, xprv2, xpub2 = self.xkeys_from_seed(seed, passphrase)