summaryrefslogtreecommitdiff
path: root/src/leap/mail/imap/service/imap.py
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2015-05-21 12:47:27 -0400
committerKali Kaneko <kali@leap.se>2015-06-05 16:50:39 -0400
commit8915db2e1c1a339cf36ae0e28da627bb1a8e040e (patch)
treeffd353c03380b022731265c672f5cec6d017e4e2 /src/leap/mail/imap/service/imap.py
parentd5d9c3794566b999bfd42398072c9f7e3177d1b9 (diff)
[feature] post-sync mail processing hooks
using the new soledad plugin capablity, mail hooks to the post-sync event by subscribing to the Meta-Doc type of documents. In this way, we can create the uid tables and the uid entries needed to keep local indexes for mail that has been processed in another instance. however, this won't prevent a conflict if a given mail is received and processed in two different instances. that is a problem that we still have to deal with. Resolves: #6996 Releases: 0.4.0
Diffstat (limited to 'src/leap/mail/imap/service/imap.py')
-rw-r--r--src/leap/mail/imap/service/imap.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/leap/mail/imap/service/imap.py b/src/leap/mail/imap/service/imap.py
index 370c513..e401283 100644
--- a/src/leap/mail/imap/service/imap.py
+++ b/src/leap/mail/imap/service/imap.py
@@ -35,6 +35,7 @@ from leap.common.events import emit, catalog
from leap.common.check import leap_assert_type, leap_check
from leap.mail.imap.account import IMAPAccount
from leap.mail.imap.server import LEAPIMAPServer
+from leap.mail.plugins import soledad_sync_hooks
from leap.soledad.client import Soledad
@@ -91,10 +92,17 @@ class LeapIMAPFactory(ServerFactory):
theAccount = IMAPAccount(uuid, soledad)
self.theAccount = theAccount
+ self._initialize_sync_hooks()
self._connections = defaultdict()
# XXX how to pass the store along?
+ def _initialize_sync_hooks(self):
+ soledad_sync_hooks.post_sync_uid_reindexer.set_account(self.theAccount)
+
+ def _teardown_sync_hooks(self):
+ soledad_sync_hooks.post_sync_uid_reindexer.set_account(None)
+
def buildProtocol(self, addr):
"""
Return a protocol suitable for the job.
@@ -128,6 +136,7 @@ class LeapIMAPFactory(ServerFactory):
# mark account as unusable, so any imap command will fail
# with unauth state.
self.theAccount.end_session()
+ self._teardown_sync_hooks()
# TODO should wait for all the pending deferreds,
# the twisted way!