summaryrefslogtreecommitdiff
path: root/src/leap/bitmask/services
diff options
context:
space:
mode:
Diffstat (limited to 'src/leap/bitmask/services')
-rw-r--r--src/leap/bitmask/services/mail/conductor.py14
-rw-r--r--src/leap/bitmask/services/soledad/soledadbootstrapper.py15
2 files changed, 25 insertions, 4 deletions
diff --git a/src/leap/bitmask/services/mail/conductor.py b/src/leap/bitmask/services/mail/conductor.py
index fc53923c..f5892468 100644
--- a/src/leap/bitmask/services/mail/conductor.py
+++ b/src/leap/bitmask/services/mail/conductor.py
@@ -95,9 +95,13 @@ class IMAPControl(object):
logger.debug("Starting loop")
self.imap_service.start_loop()
- def stop_imap_service(self):
+ def stop_imap_service(self, cv):
"""
Stops imap service (fetcher, factory and port).
+
+ :param cv: A condition variable to which we can signal when imap
+ indeed stops.
+ :type cv: threading.Condition
"""
self.imap_connection.qtsigs.disconnecting_signal.emit()
# TODO We should homogenize both services.
@@ -110,7 +114,13 @@ class IMAPControl(object):
self.imap_port.stopListening()
# Stop the protocol
self.imap_factory.theAccount.closed = True
- self.imap_factory.doStop()
+ self.imap_factory.doStop(cv)
+ else:
+ # main window does not have to wait because there's no service to
+ # be stopped, so we release the condition variable
+ cv.acquire()
+ cv.notify()
+ cv.release()
def fetch_incoming_mail(self):
"""
diff --git a/src/leap/bitmask/services/soledad/soledadbootstrapper.py b/src/leap/bitmask/services/soledad/soledadbootstrapper.py
index 5351bcd2..f7217af6 100644
--- a/src/leap/bitmask/services/soledad/soledadbootstrapper.py
+++ b/src/leap/bitmask/services/soledad/soledadbootstrapper.py
@@ -26,6 +26,7 @@ from ssl import SSLError
from PySide import QtCore
from u1db import errors as u1db_errors
+from twisted.internet import threads
from zope.proxy import sameProxiedObjects
from leap.bitmask.config import flags
@@ -288,7 +289,18 @@ class SoledadBootstrapper(AbstractBootstrapper):
self._init_keymanager(self._address)
self.local_only_ready.emit({self.PASSED_KEY: True})
else:
- self._do_soledad_sync()
+ try:
+ address = make_address(
+ self._user, self._provider_config.get_domain())
+ self._init_keymanager(address)
+ self._keymanager.get_key(
+ address, openpgp.OpenPGPKey,
+ private=True, fetch_remote=False)
+ threads.deferToThread(self._do_soledad_sync)
+ except KeyNotFound:
+ logger.debug("Key not found. Generating key for %s" %
+ (address,))
+ self._do_soledad_sync()
def _pick_server(self, uuid):
"""
@@ -546,7 +558,6 @@ class SoledadBootstrapper(AbstractBootstrapper):
address = make_address(
self._user, self._provider_config.get_domain())
- self._init_keymanager(address)
logger.debug("Retrieving key for %s" % (address,))
try: