diff options
author | Ruben Pollan <meskio@sindominio.net> | 2015-01-15 09:40:55 -0600 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2015-02-11 14:06:44 -0400 |
commit | 99a955c64266dc9dc596170beb024f84cd322254 (patch) | |
tree | 43ae07658f421090964cf9f2e975e804a12cd9ec /src/leap/bitmask/services/mail/imapcontroller.py | |
parent | 2aa7cb8710a1e0d3a99698566a11db3d54818a41 (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/imapcontroller.py')
-rw-r--r-- | src/leap/bitmask/services/mail/imapcontroller.py | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/src/leap/bitmask/services/mail/imapcontroller.py b/src/leap/bitmask/services/mail/imapcontroller.py index d0bf4c34..bb9eb9dc 100644 --- a/src/leap/bitmask/services/mail/imapcontroller.py +++ b/src/leap/bitmask/services/mail/imapcontroller.py @@ -43,9 +43,12 @@ class IMAPController(object): self._soledad = soledad self._keymanager = keymanager - self.imap_service = None + # XXX: this should live in its own controller + # or, better, just be managed by a composite Mail Service in + # leap.mail. self.imap_port = None self.imap_factory = None + self.incoming_mail_service = None def start_imap_service(self, userid, offline=False): """ @@ -58,16 +61,28 @@ class IMAPController(object): """ logger.debug('Starting imap service') - self.imap_service, self.imap_port, \ - self.imap_factory = imap.start_imap_service( - self._soledad, - self._keymanager, - userid=userid, - offline=offline) + self.imap_port, self.imap_factory = imap.start_imap_service( + self._soledad, + userid=userid) + + def start_incoming_service(incoming_mail): + d = incoming_mail.startService() + d.addCallback(lambda started: incoming_mail) + return d + + def assign_incoming_service(incoming_mail): + self.incoming_mail_service = incoming_mail + return incoming_mail if offline is False: - logger.debug("Starting loop") - self.imap_service.start_loop() + d = imap.start_incoming_mail_service( + self._keymanager, + self._soledad, + self.imap_factory, + userid) + d.addCallback(start_incoming_service) + d.addCallback(assign_incoming_service) + d.addErrback(lambda f: logger.error(f.printTraceback())) def stop_imap_service(self, cv): """ @@ -77,11 +92,12 @@ class IMAPController(object): indeed stops. :type cv: threading.Condition """ - if self.imap_service is not None: + if self.incoming_mail_service is not None: # Stop the loop call in the fetcher - self.imap_service.stop() - self.imap_service = None + self.incoming_mail_service.stopService() + self.incoming_mail_service = None + if self.imap_port is not None: # Stop listening on the IMAP port self.imap_port.stopListening() @@ -98,6 +114,6 @@ class IMAPController(object): """ Fetch incoming mail. """ - if self.imap_service: + if self.incoming_mail_service is not None: logger.debug('Client connected, fetching mail...') - self.imap_service.fetch() + self.incoming_mail_service.fetch() |