diff options
Diffstat (limited to 'mail')
| -rw-r--r-- | mail/src/leap/mail/imap/mailbox.py | 28 | ||||
| -rw-r--r-- | mail/src/leap/mail/imap/memorystore.py | 9 | 
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 6513db9..be8b429 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 56cd000..875b1b8 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):          """ | 
