From a16ca973433dc44cb71df14ed1e999b35f20ce03 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Mon, 5 Aug 2013 17:03:07 +0200 Subject: use the right import path --- src/leap/mail/imap/fetch.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/leap/mail/imap/fetch.py') diff --git a/src/leap/mail/imap/fetch.py b/src/leap/mail/imap/fetch.py index 48a45e6..566873b 100644 --- a/src/leap/mail/imap/fetch.py +++ b/src/leap/mail/imap/fetch.py @@ -1,15 +1,15 @@ import logging import json +import ssl from twisted.python import log from twisted.internet import defer from twisted.internet.threads import deferToThread from leap.common.check import leap_assert, leap_assert_type +from leap.keymanager import openpgp from leap.soledad import Soledad -from leap.common.keymanager import openpgp - logger = logging.getLogger(__name__) @@ -67,13 +67,17 @@ class LeapIncomingMail(object): def _sync_soledad(self): log.msg('syncing soledad...') logger.debug('in soledad sync') - #import ipdb; ipdb.set_trace() - self._soledad.sync() - gen, doclist = self._soledad.get_all_docs() - #logger.debug("there are %s docs" % (len(doclist),)) - log.msg("there are %s docs" % (len(doclist),)) - return doclist + try: + self._soledad.sync() + gen, doclist = self._soledad.get_all_docs() + #logger.debug("there are %s docs" % (len(doclist),)) + log.msg("there are %s docs" % (len(doclist),)) + return doclist + except ssl.SSLError as exc: + logger.warning('SSL Error while syncing soledad: %r' % (exc,)) + except Exception as exc: + logger.warning('Error while syncing soledad: %r' % (exc,)) def _sync_soledad_err(self, f): log.err("error syncing soledad: %s" % (f.value,)) @@ -81,6 +85,8 @@ class LeapIncomingMail(object): def _process_doclist(self, doclist): log.msg('processing doclist') + if not doclist: + return for doc in doclist: keys = doc.content.keys() if self.ENC_SCHEME_KEY in keys and self.ENC_JSON_KEY in keys: -- cgit v1.2.3 From 2c2f3a291d33591190af4cefbcd2225c11e86712 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Tue, 6 Aug 2013 01:37:10 +0200 Subject: refactor recurring fetch --- src/leap/mail/imap/fetch.py | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'src/leap/mail/imap/fetch.py') diff --git a/src/leap/mail/imap/fetch.py b/src/leap/mail/imap/fetch.py index 566873b..1c41813 100644 --- a/src/leap/mail/imap/fetch.py +++ b/src/leap/mail/imap/fetch.py @@ -4,6 +4,7 @@ import ssl from twisted.python import log from twisted.internet import defer +from twisted.internet.task import LoopingCall from twisted.internet.threads import deferToThread from leap.common.check import leap_assert, leap_assert_type @@ -26,7 +27,8 @@ class LeapIncomingMail(object): INCOMING_KEY = "incoming" CONTENT_KEY = "content" - def __init__(self, keymanager, soledad, imap_account): + def __init__(self, keymanager, soledad, imap_account, + check_period): """ Initialize LeapIMAP. @@ -39,10 +41,15 @@ class LeapIncomingMail(object): :param imap_account: the account to fetch periodically :type imap_account: SoledadBackedAccount + + :param check_period: the period to fetch new mail, in seconds. + :type check_period: int """ leap_assert(keymanager, "need a keymanager to initialize") leap_assert_type(soledad, Soledad) + leap_assert(check_period, "need a period to check incoming mail") + leap_assert_type(check_period, int) self._keymanager = keymanager self._soledad = soledad @@ -51,6 +58,16 @@ class LeapIncomingMail(object): self._pkey = self._keymanager.get_all_keys_in_local_db( private=True).pop() + self._loop = None + self._check_period = check_period + + self._create_soledad_indexes() + + def _create_soledad_indexes(self): + """ + Create needed indexes on soledad. + """ + self._soledad.create_index("just-mail", "incoming") def fetch(self): """ @@ -64,15 +81,28 @@ class LeapIncomingMail(object): d.addCallbacks(self._process_doclist, self._sync_soledad_err) return d + def start_loop(self): + """ + Starts a loop to fetch mail. + """ + self._loop = LoopingCall(self.fetch) + self._loop.start(self._check_period) + + def stop(self): + """ + Stops the loop that fetches mail. + """ + if self._loop: + self._loop.stop() + def _sync_soledad(self): log.msg('syncing soledad...') logger.debug('in soledad sync') try: self._soledad.sync() - gen, doclist = self._soledad.get_all_docs() - #logger.debug("there are %s docs" % (len(doclist),)) - log.msg("there are %s docs" % (len(doclist),)) + doclist = self._soledad.get_from_index("just-mail", "*") + #log.msg("there are %s mails" % (len(doclist),)) return doclist except ssl.SSLError as exc: logger.warning('SSL Error while syncing soledad: %r' % (exc,)) -- cgit v1.2.3