summaryrefslogtreecommitdiff
path: root/src/leap/mail/imap/messages.py
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2014-02-11 16:20:26 -0400
committerKali Kaneko <kali@leap.se>2014-02-17 11:39:49 -0400
commitf6566fe83c93625b918664526e8858f7be667354 (patch)
tree95770691226649c56777c5dedde69c08941fb8fe /src/leap/mail/imap/messages.py
parent484c5fc316c0f95ebccc4a2c2a04c1cda96a34f8 (diff)
defer appends too
and cut some more time by firing the callback as soon as we've got an UID.
Diffstat (limited to 'src/leap/mail/imap/messages.py')
-rw-r--r--src/leap/mail/imap/messages.py19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/leap/mail/imap/messages.py b/src/leap/mail/imap/messages.py
index 7884fb0..c133a6d 100644
--- a/src/leap/mail/imap/messages.py
+++ b/src/leap/mail/imap/messages.py
@@ -879,19 +879,18 @@ class MessageCollection(WithMsgFields, IndexedDB, MailParser, MBoxParser):
uid when the adding succeed.
:rtype: deferred
"""
- logger.debug('Adding message')
if flags is None:
flags = tuple()
leap_assert_type(flags, tuple)
observer = defer.Deferred()
d = self._do_parse(raw)
- d.addCallback(self._do_add_msg, flags, subject, date,
- notify_on_disk, observer)
+ d.addCallback(lambda result: self.reactor.callInThread(
+ self._do_add_msg, result, flags, subject, date,
+ notify_on_disk, observer))
return observer
- # We SHOULD defer the heavy load here) to the thread pool,
- # but it gives troubles with the QSocketNotifier used by Qt...
+ # Called in thread
def _do_add_msg(self, parse_result, flags, subject,
date, notify_on_disk, observer):
"""
@@ -912,7 +911,6 @@ class MessageCollection(WithMsgFields, IndexedDB, MailParser, MBoxParser):
# TODO add the linked-from info !
# TODO add reference to the original message
- from twisted.internet import reactor
msg, parts, chash, size, multi = parse_result
# check for uniqueness --------------------------------
@@ -922,13 +920,14 @@ class MessageCollection(WithMsgFields, IndexedDB, MailParser, MBoxParser):
uid = existing_uid
msg = self.get_msg_by_uid(uid)
- # TODO this cannot be deferred, this has to block.
+ # We can say the observer that we're done
+ self.reactor.callFromThread(observer.callback, uid)
msg.setFlags((fields.DELETED_FLAG,), -1)
- reactor.callLater(0, observer.callback, uid)
return
uid = self.memstore.increment_last_soledad_uid(self.mbox)
- logger.info("ADDING MSG WITH UID: %s" % uid)
+ # We can say the observer that we're done
+ self.reactor.callFromThread(observer.callback, uid)
fd = self._populate_flags(flags, uid, chash, size, multi)
hd = self._populate_headr(msg, chash, subject, date)
@@ -953,7 +952,7 @@ class MessageCollection(WithMsgFields, IndexedDB, MailParser, MBoxParser):
msg_container = MessageWrapper(fd, hd, cdocs)
self.memstore.create_message(
self.mbox, uid, msg_container,
- observer=observer, notify_on_disk=notify_on_disk)
+ observer=None, notify_on_disk=notify_on_disk)
#
# getters: specific queries