diff options
| -rw-r--r-- | changes/bug_fail_gracefully_events | 2 | ||||
| -rw-r--r-- | changes/feature-3318_add-cancel-button-to-login | 1 | ||||
| -rw-r--r-- | src/leap/app.py | 6 | ||||
| -rw-r--r-- | src/leap/gui/login.py | 25 | ||||
| -rw-r--r-- | src/leap/gui/mainwindow.py | 37 | 
5 files changed, 63 insertions, 8 deletions
diff --git a/changes/bug_fail_gracefully_events b/changes/bug_fail_gracefully_events new file mode 100644 index 00000000..dbd6f594 --- /dev/null +++ b/changes/bug_fail_gracefully_events @@ -0,0 +1,2 @@ +  o Fail gracefully when the events port 8090 is in use by something +    else. Fixes #3276.
\ No newline at end of file diff --git a/changes/feature-3318_add-cancel-button-to-login b/changes/feature-3318_add-cancel-button-to-login new file mode 100644 index 00000000..2086e42d --- /dev/null +++ b/changes/feature-3318_add-cancel-button-to-login @@ -0,0 +1 @@ +  o Add cancel button to login. Closes #3318. diff --git a/src/leap/app.py b/src/leap/app.py index f45e46c4..6ba27813 100644 --- a/src/leap/app.py +++ b/src/leap/app.py @@ -131,7 +131,11 @@ def main():      """      Starts the main event loop and launches the main window.      """ -    event_server.ensure_server(event_server.SERVER_PORT) +    try: +        event_server.ensure_server(event_server.SERVER_PORT) +    except Exception as e: +        # We don't even have logger configured in here +        print "Could not ensure server: %r" % (e,)      _, opts = leap_argparse.init_leapc_args()      standalone = opts.standalone diff --git a/src/leap/gui/login.py b/src/leap/gui/login.py index 80f2f3db..3eb1fe39 100644 --- a/src/leap/gui/login.py +++ b/src/leap/gui/login.py @@ -19,7 +19,6 @@  Login widget implementation  """  import logging -import keyring  from PySide import QtCore, QtGui  from ui_login import Ui_LoginWidget @@ -37,6 +36,8 @@ class LoginWidget(QtGui.QWidget):      # Emitted when the login button is clicked      login = QtCore.Signal() +    cancel_login = QtCore.Signal() +      # Emitted when the user selects "Other..." in the provider      # combobox or click "Create Account"      show_wizard = QtCore.Signal() @@ -97,7 +98,7 @@ class LoginWidget(QtGui.QWidget):          """          self.ui.cmbProviders.blockSignals(True)          self.ui.cmbProviders.clear() -        self.ui.cmbProviders.addItems(provider_list + ["Other..."]) +        self.ui.cmbProviders.addItems(provider_list + [self.tr("Other...")])          self.ui.cmbProviders.blockSignals(False)      def select_provider_by_name(self, name): @@ -194,6 +195,26 @@ class LoginWidget(QtGui.QWidget):          self.ui.chkRemember.setEnabled(enabled)          self.ui.cmbProviders.setEnabled(enabled) +    def set_cancel(self, enabled=False): +        """ +        Enables or disables the cancel action in the "log in" process. + +        :param enabled: wether it should be enabled or not +        :type enabled: bool +        """ +        self.ui.btnLogin.setEnabled(enabled) +        text = self.tr("Cancel") +        login_or_cancel = self.cancel_login + +        if not enabled: +            text = self.tr("Log In") +            login_or_cancel = self.login + +        self.ui.btnLogin.setText(text) + +        self.ui.btnLogin.clicked.disconnect() +        self.ui.btnLogin.clicked.connect(login_or_cancel) +      def _focus_password(self):          """          Focuses in the password lineedit diff --git a/src/leap/gui/mainwindow.py b/src/leap/gui/mainwindow.py index 1c871aa2..2325ecf0 100644 --- a/src/leap/gui/mainwindow.py +++ b/src/leap/gui/mainwindow.py @@ -141,6 +141,7 @@ class MainWindow(QtGui.QMainWindow):          self.ui.loginLayout.addWidget(self._login_widget)          self._login_widget.login.connect(self._login) +        self._login_widget.cancel_login.connect(self._cancel_login)          self._login_widget.show_wizard.connect(              self._launch_wizard) @@ -274,6 +275,7 @@ class MainWindow(QtGui.QMainWindow):          self._keymanager = None          self._login_defer = None +        self._download_provider_defer = None          self._smtp_config = SMTPConfig() @@ -709,9 +711,9 @@ class MainWindow(QtGui.QMainWindow):          """          provider = self._login_widget.get_selected_provider() -        self._provider_bootstrapper.run_provider_select_checks( -            provider, -            download_if_needed=True) +        pb = self._provider_bootstrapper +        d = pb.run_provider_select_checks(provider, download_if_needed=True) +        self._download_provider_defer = d      def _load_provider_config(self, data):          """ @@ -754,8 +756,7 @@ class MainWindow(QtGui.QMainWindow):          """          SLOT          TRIGGERS: -          self.ui.btnLogin.clicked -          self.ui.lnPassword.returnPressed +          self._login_widget.login          Starts the login sequence. Which involves bootstrapping the          selected provider if the selection is valid (not empty), then @@ -788,6 +789,7 @@ class MainWindow(QtGui.QMainWindow):          self._login_widget.set_status(self.tr("Logging in..."), error=False)          self._login_widget.set_enabled(False) +        self._login_widget.set_cancel(True)          if self._login_widget.get_remember() and has_keyring():              # in the keyring and in the settings @@ -806,6 +808,25 @@ class MainWindow(QtGui.QMainWindow):          self._download_provider_config() +    def _cancel_login(self): +        """ +        SLOT +        TRIGGERS: +          self._login_widget.cancel_login + +        Stops the login sequence. +        """ +        logger.debug("Cancelling log in.") +        self._login_widget.set_cancel(False) + +        if self._download_provider_defer: +            logger.debug("Cancelling download provider defer.") +            self._download_provider_defer.cancel() + +        if self._login_defer: +            logger.debug("Cancelling login defer.") +            self._login_defer.cancel() +      def _provider_config_loaded(self, data):          """          SLOT @@ -1250,6 +1271,7 @@ class MainWindow(QtGui.QMainWindow):          """          passed = data[self._provider_bootstrapper.PASSED_KEY]          if not passed: +            self._login_widget.set_cancel(False)              self._login_widget.set_enabled(True)              self._login_widget.set_status(                  data[self._provider_bootstrapper.ERROR_KEY]) @@ -1380,8 +1402,13 @@ class MainWindow(QtGui.QMainWindow):              self._logger_window.close()          if self._login_defer: +            logger.debug("Cancelling login defer.")              self._login_defer.cancel() +        if self._download_provider_defer: +            logger.debug("Cancelling download provider defer.") +            self._download_provider_defer.cancel() +          self.close()          if self._quit_callback:  | 
