summaryrefslogtreecommitdiff
path: root/mail
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2014-02-17 13:00:41 -0400
committerKali Kaneko <kali@leap.se>2014-02-17 20:42:24 -0400
commit6a86c99ac5603a8b8c0c7d1ad3fd4e372991b44e (patch)
treeb4f874022de4825c188f5d8279c7c1b1aa8b67ac /mail
parentc649088b39d595303394ef013502ff8b8b1e0dc7 (diff)
defer fetch-all-flags too
Diffstat (limited to 'mail')
-rw-r--r--mail/src/leap/mail/imap/mailbox.py28
-rw-r--r--mail/src/leap/mail/imap/memorystore.py9
2 files changed, 29 insertions, 8 deletions
diff --git a/mail/src/leap/mail/imap/mailbox.py b/mail/src/leap/mail/imap/mailbox.py
index 6513db94..be8b429f 100644
--- a/mail/src/leap/mail/imap/mailbox.py
+++ b/mail/src/leap/mail/imap/mailbox.py
@@ -656,15 +656,37 @@ class SoledadMailbox(WithMsgFields, MBoxParser):
about
:type messages_asked: MessageSet
- :param uid: If true, the IDs are UIDs. They are message sequence IDs
+ :param uid: If 1, the IDs are UIDs. They are message sequence IDs
otherwise.
- :type uid: bool
+ :type uid: int
:return: A tuple of two-tuples of message sequence numbers and
flagsPart, which is a only a partial implementation of
MessagePart.
:rtype: tuple
"""
+ d = defer.Deferred()
+ self.reactor.callInThread(self._do_fetch_flags, messages_asked, uid, d)
+ if PROFILE_CMD:
+ do_profile_cmd(d, "FETCH-ALL-FLAGS")
+ return d
+
+ # called in thread
+ def _do_fetch_flags(self, messages_asked, uid, d):
+ """
+ :param messages_asked: IDs of the messages to retrieve information
+ about
+ :type messages_asked: MessageSet
+
+ :param uid: If 1, the IDs are UIDs. They are message sequence IDs
+ otherwise.
+ :type uid: int
+ :param d: deferred whose callback will be called with result.
+ :type d: Deferred
+
+ :rtype: A tuple of two-tuples of message sequence numbers and
+ flagsPart
+ """
class flagsPart(object):
def __init__(self, uid, flags):
self.uid = uid
@@ -682,7 +704,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):
all_flags = self._memstore.all_flags(self.mbox)
result = ((msgid, flagsPart(
msgid, all_flags.get(msgid, tuple()))) for msgid in seq_messg)
- return result
+ self.reactor.callFromThread(d.callback, result)
def fetch_headers(self, messages_asked, uid):
"""
diff --git a/mail/src/leap/mail/imap/memorystore.py b/mail/src/leap/mail/imap/memorystore.py
index 56cd0000..875b1b81 100644
--- a/mail/src/leap/mail/imap/memorystore.py
+++ b/mail/src/leap/mail/imap/memorystore.py
@@ -726,17 +726,16 @@ class MemoryStore(object):
:type mbox: str or unicode
:rtype: dict
"""
- flags_dict = {}
+ fdict = {}
uids = self.get_uids(mbox)
- fdoc_store = self._fdoc_store[mbox]
+ fstore = self._fdoc_store[mbox]
for uid in uids:
try:
- flags = fdoc_store[uid][fields.FLAGS_KEY]
- flags_dict[uid] = flags
+ fdict[uid] = fstore[uid][fields.FLAGS_KEY]
except KeyError:
continue
- return flags_dict
+ return fdict
def all_headers(self, mbox):
"""