summaryrefslogtreecommitdiff
path: root/src/leap/bitmask/services/mail/imap.py
diff options
context:
space:
mode:
authorRuben Pollan <meskio@sindominio.net>2015-01-15 09:40:55 -0600
committerKali Kaneko <kali@leap.se>2015-02-11 14:06:44 -0400
commit99a955c64266dc9dc596170beb024f84cd322254 (patch)
tree43ae07658f421090964cf9f2e975e804a12cd9ec /src/leap/bitmask/services/mail/imap.py
parent2aa7cb8710a1e0d3a99698566a11db3d54818a41 (diff)
Use the incoming mail IService
From kali: add some notes about the improper handling of the mailbox required to initialize the account, and draft some notes about how to improve this in next iterations.
Diffstat (limited to 'src/leap/bitmask/services/mail/imap.py')
-rw-r--r--src/leap/bitmask/services/mail/imap.py40
1 files changed, 36 insertions, 4 deletions
diff --git a/src/leap/bitmask/services/mail/imap.py b/src/leap/bitmask/services/mail/imap.py
index 5db18cb9..d044a600 100644
--- a/src/leap/bitmask/services/mail/imap.py
+++ b/src/leap/bitmask/services/mail/imap.py
@@ -21,7 +21,9 @@ import logging
import os
import sys
+from leap.mail.constants import INBOX_NAME
from leap.mail.imap.service import imap
+from leap.mail.incoming.service import IncomingMail, INCOMING_CHECK_PERIOD
from twisted.python import log
logger = logging.getLogger(__name__)
@@ -49,6 +51,9 @@ def get_mail_check_period():
logger.warning("Unhandled error while getting %s: %r" % (
INCOMING_CHECK_PERIOD_ENV,
exc))
+
+ if period is None:
+ period = INCOMING_CHECK_PERIOD
return period
@@ -61,12 +66,39 @@ def start_imap_service(*args, **kwargs):
from leap.bitmask.config import flags
logger.debug('Launching imap service')
- override_period = get_mail_check_period()
- if override_period:
- kwargs['check_period'] = override_period
-
if flags.MAIL_LOGFILE:
log.startLogging(open(flags.MAIL_LOGFILE, 'w'))
log.startLogging(sys.stdout)
return imap.run_service(*args, **kwargs)
+
+
+def start_incoming_mail_service(keymanager, soledad, imap_factory, userid):
+ """
+ Initalizes and starts the incomming mail service.
+
+ :returns: a Deferred that will be fired with the IncomingMail instance
+ """
+ def setUpIncomingMail(inbox):
+ incoming_mail = IncomingMail(
+ keymanager,
+ soledad,
+ inbox,
+ userid,
+ check_period=get_mail_check_period())
+ return incoming_mail
+
+ # XXX: do I really need to know here how to get a mailbox??
+ # XXX: ideally, the parent service in mail would take care of initializing
+ # the account, and passing the mailbox to the incoming service.
+ # In an even better world, we just would subscribe to a channel that would
+ # pass us the serialized object to be inserted.
+ # XXX: I think we might be at risk here because the account top object
+ # currently just returns as many mailbox objects as it's asked for, so
+ # we should be careful about concurrent operations (ie, maybe just use
+ # this one to do inserts, or let account have an in-memory map of
+ # mailboxes, and just return references to them).
+ acc = imap_factory.theAccount
+ d = acc.callWhenReady(lambda _: acc.getMailbox(INBOX_NAME))
+ d.addCallback(setUpIncomingMail)
+ return d