diff options
| -rw-r--r-- | mail/src/leap/mail/imap/mailbox.py | 26 | 
1 files changed, 12 insertions, 14 deletions
| diff --git a/mail/src/leap/mail/imap/mailbox.py b/mail/src/leap/mail/imap/mailbox.py index 122875b..018f88e 100644 --- a/mail/src/leap/mail/imap/mailbox.py +++ b/mail/src/leap/mail/imap/mailbox.py @@ -108,6 +108,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):      _listeners = defaultdict(set)      next_uid_lock = threading.Lock() +    last_uid_lock = threading.Lock()      _fdoc_primed = {} @@ -196,7 +197,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          self.listeners.remove(listener)      # TODO move completely to soledadstore, under memstore reponsibility. -    def _get_mbox(self): +    def _get_mbox_doc(self):          """          Return mailbox document. @@ -220,7 +221,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          :returns: tuple of flags for this mailbox          :rtype: tuple of str          """ -        mbox = self._get_mbox() +        mbox = self._get_mbox_doc()          if not mbox:              return None          flags = mbox.content.get(self.FLAGS_KEY, []) @@ -235,7 +236,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          """          leap_assert(isinstance(flags, tuple),                      "flags expected to be a tuple") -        mbox = self._get_mbox() +        mbox = self._get_mbox_doc()          if not mbox:              return None          mbox.content[self.FLAGS_KEY] = map(str, flags) @@ -250,7 +251,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          :return: True if the mailbox is closed          :rtype: bool          """ -        mbox = self._get_mbox() +        mbox = self._get_mbox_doc()          return mbox.content.get(self.CLOSED_KEY, False)      def _set_closed(self, closed): @@ -261,7 +262,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          :type closed: bool          """          leap_assert(isinstance(closed, bool), "closed needs to be boolean") -        mbox = self._get_mbox() +        mbox = self._get_mbox_doc()          mbox.content[self.CLOSED_KEY] = closed          self._soledad.put_doc(mbox) @@ -290,8 +291,8 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          """          Prime memstore with last_uid value          """ -        set_exist = set(self.messages.all_uid_iter()) -        last = max(set_exist) if set_exist else 0 +        mbox = self._get_mbox_doc() +        last = mbox.content.get('lastuid', 0)          logger.info("Priming Soledad last_uid to %s" % (last,))          self._memstore.set_last_soledad_uid(self.mbox, last) @@ -321,7 +322,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          :return: unique validity identifier          :rtype: int          """ -        mbox = self._get_mbox() +        mbox = self._get_mbox_doc()          return mbox.content.get(self.CREATED_KEY, 1)      def getUID(self, message): @@ -483,12 +484,9 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          exists = self.getMessageCount()          recent = self.getRecentCount()          logger.debug("NOTIFY (%r): there are %s messages, %s recent" % ( -            self.mbox, -            exists, -            recent)) +            self.mbox, exists, recent))          for l in self.listeners: -            logger.debug('notifying...')              l.newMessages(exists, recent)      # commands, do not rename methods @@ -507,7 +505,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          # we should postpone the removal          # XXX move to memory store?? -        self._soledad.delete_doc(self._get_mbox()) +        self._soledad.delete_doc(self._get_mbox_doc())      def _close_cb(self, result):          self.closed = True @@ -756,7 +754,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          :type observer: deferred          """          # XXX implement also sequence (uid = 0) -        # XXX we should prevent cclient from setting Recent flag? +        # XXX we should prevent client from setting Recent flag?          leap_assert(not isinstance(flags, basestring),                      "flags cannot be a string")          flags = tuple(flags) | 
