summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomás Touceda <chiiph@leap.se>2014-01-07 17:44:00 -0300
committerTomás Touceda <chiiph@leap.se>2014-01-07 17:44:00 -0300
commitdf0d02a565631693f62e99abb2b4be8b8bd450f5 (patch)
tree245c5d541e69346418fb96cb722c5ddb8299aa39
parentd16e76cfdeb18b14cd97c9e8c7096b02aafe4da8 (diff)
parent257b42bf0baf923c1437778cd99d0a9cbf69637d (diff)
Merge remote-tracking branch 'refs/remotes/drebs/feature/4885_make-soledad-wait-for-eip-after-logging-in' into develop
-rw-r--r--changes/feature_4885_make-soledad-wait-for-eip-after-logging-in1
-rw-r--r--src/leap/bitmask/gui/mainwindow.py57
2 files changed, 41 insertions, 17 deletions
diff --git a/changes/feature_4885_make-soledad-wait-for-eip-after-logging-in b/changes/feature_4885_make-soledad-wait-for-eip-after-logging-in
new file mode 100644
index 00000000..07b198f0
--- /dev/null
+++ b/changes/feature_4885_make-soledad-wait-for-eip-after-logging-in
@@ -0,0 +1 @@
+- Make first Soledad sync wait for EIP to come up after logging in (#4885).
diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py
index 1fe2cfca..f954006d 100644
--- a/src/leap/bitmask/gui/mainwindow.py
+++ b/src/leap/bitmask/gui/mainwindow.py
@@ -105,6 +105,9 @@ class MainWindow(QtGui.QMainWindow):
# We use this flag to detect abnormal terminations
user_stopped_eip = False
+ # We give EIP some time to come up before starting soledad anyway
+ EIP_TIMEOUT = 60000 # in milliseconds
+
def __init__(self, quit_callback,
openvpn_verb=1,
bypass_checks=False):
@@ -179,6 +182,8 @@ class MainWindow(QtGui.QMainWindow):
self._eip_status.eip_connection_connected.connect(
self._on_eip_connected)
+ self._eip_status.eip_connection_connected.connect(
+ self._maybe_run_soledad_setup_checks)
self.eip_needs_login.connect(
self._eip_status.disable_eip_start)
self.eip_needs_login.connect(
@@ -195,6 +200,7 @@ class MainWindow(QtGui.QMainWindow):
self._eip_config = eipconfig.EIPConfig()
self._already_started_eip = False
+ self._already_started_soledad = False
# This is created once we have a valid provider config
self._srp_auth = None
@@ -1027,22 +1033,27 @@ class MainWindow(QtGui.QMainWindow):
self._provider_config.get_domain())
# TODO separate UI from logic.
- # TODO soledad should check if we want to run only over EIP.
if self._provider_config.provides_mx() and \
self._enabled_services.count(MX_SERVICE) > 0:
self._mail_status.about_to_start()
+ else:
+ self._mail_status.set_disabled()
+
+ self._maybe_start_eip()
+ def _maybe_run_soledad_setup_checks(self):
+ """
+ """
+ # TODO soledad should check if we want to run only over EIP.
+ if self._already_started_soledad is False \
+ and self._logged_user is not None:
+ self._already_started_soledad = True
self._soledad_bootstrapper.run_soledad_setup_checks(
self._provider_config,
self._login_widget.get_user(),
self._login_widget.get_password(),
download_if_needed=True)
- else:
- self._mail_status.set_disabled()
- # XXX the config should be downloaded from the start_eip
- # method.
- self._download_eip_config()
###################################################################
# Service control methods: soledad
@@ -1258,7 +1269,7 @@ class MainWindow(QtGui.QMainWindow):
# it adds some delay.
# Maybe if it's the first run in a session,
# or we can try only if it fails.
- self._download_eip_config()
+ self._maybe_start_eip()
else:
# XXX: Display a proper message to the user
self.eip_needs_login.emit()
@@ -1490,9 +1501,10 @@ class MainWindow(QtGui.QMainWindow):
# eip boostrapping, config etc...
- def _download_eip_config(self):
+ def _maybe_start_eip(self):
"""
- Starts the EIP bootstrapping sequence
+ Start the EIP bootstrapping sequence if the client is configured to
+ do so.
"""
leap_assert(self._eip_bootstrapper, "We need an eip bootstrapper!")
@@ -1509,14 +1521,22 @@ class MainWindow(QtGui.QMainWindow):
provider_config,
download_if_needed=True)
self._already_started_eip = True
- elif not self._already_started_eip:
- if self._enabled_services.count(EIP_SERVICE) > 0:
- self._eip_status.set_eip_status(
- self.tr("Not supported"),
- error=True)
- else:
- self._eip_status.disable_eip_start()
- self._eip_status.set_eip_status(self.tr("Disabled"))
+ # we want to start soledad anyway after a certain timeout if eip
+ # fails to come up
+ QtCore.QTimer.singleShot(
+ self.EIP_TIMEOUT,
+ self._maybe_run_soledad_setup_checks)
+ else:
+ if not self._already_started_eip:
+ if self._enabled_services.count(EIP_SERVICE) > 0:
+ self._eip_status.set_eip_status(
+ self.tr("Not supported"),
+ error=True)
+ else:
+ self._eip_status.disable_eip_start()
+ self._eip_status.set_eip_status(self.tr("Disabled"))
+ # eip will not start, so we start soledad anyway
+ self._maybe_run_soledad_setup_checks()
def _finish_eip_bootstrap(self, data):
"""
@@ -1607,6 +1627,9 @@ class MainWindow(QtGui.QMainWindow):
self._soledad_bootstrapper.cancel_bootstrap()
setProxiedObject(self._soledad, None)
+ # reset soledad status flag
+ self._already_started_soledad = False
+
# XXX: If other defers are doing authenticated stuff, this
# might conflict with those. CHECK!
threads.deferToThread(self._srp_auth.logout)