summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/bug_fail_gracefully_events2
-rw-r--r--changes/feature-3318_add-cancel-button-to-login1
-rw-r--r--src/leap/app.py6
-rw-r--r--src/leap/gui/login.py25
-rw-r--r--src/leap/gui/mainwindow.py37
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: