URI: 
       tMerge pull request #3444 from SomberNight/2fa_tos_catch_exc - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit a03a5c00e3d81373e00540606e96160547a46c84
   DIR parent 80f99b68e0f32b94238e030658a6a3170118ab21
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Mon,  4 Dec 2017 12:45:45 +0100
       
       Merge pull request #3444 from SomberNight/2fa_tos_catch_exc
       
       Catch exception when retrieving 2FA TOS
       Diffstat:
         M plugins/trustedcoin/qt.py           |      22 ++++++++++++++++++++--
       
       1 file changed, 20 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/plugins/trustedcoin/qt.py b/plugins/trustedcoin/qt.py
       t@@ -42,6 +42,7 @@ from .trustedcoin import TrustedCoinPlugin, server
        
        class TOS(QTextEdit):
            tos_signal = pyqtSignal()
       +    error_signal = pyqtSignal(object)
        
        
        class Plugin(TrustedCoinPlugin):
       t@@ -195,6 +196,7 @@ class Plugin(TrustedCoinPlugin):
                tos_e = TOS()
                tos_e.setReadOnly(True)
                vbox.addWidget(tos_e)
       +        tos_received = False
        
                vbox.addWidget(QLabel(_("Please enter your e-mail address")))
                email_e = QLineEdit()
       t@@ -205,17 +207,33 @@ class Plugin(TrustedCoinPlugin):
                next_button.setText(_('Accept'))
        
                def request_TOS():
       -            tos = server.get_terms_of_service()
       +            try:
       +                tos = server.get_terms_of_service()
       +            except Exception as e:
       +                import traceback
       +                traceback.print_exc(file=sys.stderr)
       +                tos_e.error_signal.emit(_('Could not retrieve Terms of Service:')
       +                                        + '\n' + str(e))
       +                return
                    self.TOS = tos
                    tos_e.tos_signal.emit()
        
                def on_result():
                    tos_e.setText(self.TOS)
       +            nonlocal tos_received
       +            tos_received = True
       +            set_enabled()
       +
       +        def on_error(msg):
       +            window.show_error(str(msg))
       +            window.terminate()
        
                def set_enabled():
       -            next_button.setEnabled(re.match(regexp,email_e.text()) is not None)
       +            valid_email = re.match(regexp, email_e.text()) is not None
       +            next_button.setEnabled(tos_received and valid_email)
        
                tos_e.tos_signal.connect(on_result)
       +        tos_e.error_signal.connect(on_error)
                t = Thread(target=request_TOS)
                t.setDaemon(True)
                t.start()