diff options
Diffstat (limited to 'mail/src/leap')
| -rw-r--r-- | mail/src/leap/mail/imap/mailbox.py | 37 | 
1 files changed, 23 insertions, 14 deletions
| diff --git a/mail/src/leap/mail/imap/mailbox.py b/mail/src/leap/mail/imap/mailbox.py index 9b1f4e5..d8e6cb1 100644 --- a/mail/src/leap/mail/imap/mailbox.py +++ b/mail/src/leap/mail/imap/mailbox.py @@ -371,15 +371,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          :rtype: int          """          with self.next_uid_lock: -            if self._memstore: -                return self.last_uid + 1 -            else: -                # XXX after lock, it should be safe to -                # return just the increment here, and -                # have a different method that actually increments -                # the counter when really adding. -                self.last_uid += 1 -                return self.last_uid +            return self.last_uid + 1      def getMessageCount(self):          """ @@ -474,11 +466,12 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          d = self._do_add_message(message, flags=flags, date=date)          if PROFILE_CMD:              do_profile_cmd(d, "APPEND") -          # A better place for this would be  the COPY/APPEND dispatcher          # in server.py, but qtreactor hangs when I do that, so this seems          # to work fine for now.          d.addCallback(lambda r: self.reactor.callLater(0, self.notify_new)) +        d.addCallback(self.cb_signal_unread_to_ui) +        d.addErrback(lambda f: log.msg(f.getTraceback()))          return d      def _do_add_message(self, message, flags, date): @@ -613,6 +606,7 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          self.reactor.callInThread(self._do_fetch, messages_asked, uid, d)          if PROFILE_CMD:              do_profile_cmd(d, "FETCH") +        d.addCallback(self.cb_signal_unread_to_ui)          return d      # called in thread @@ -768,14 +762,27 @@ class SoledadMailbox(WithMsgFields, MBoxParser):              for msgid in seq_messg)          return result -    def signal_unread_to_ui(self, *args, **kwargs): +    def cb_signal_unread_to_ui(self, result):          """          Sends unread event to ui. +        Used as a callback in several commands. + +        :param result: ignored +        """ +        d = self._get_unseen_deferred() +        d.addCallback(self.__cb_signal_unread_to_ui) +        return result + +    @deferred_to_thread +    def _get_unseen_deferred(self): +        return self.getUnseenCount() -        :param args: ignored -        :param kwargs: ignored +    def __cb_signal_unread_to_ui(self, unseen): +        """ +        Send the unread signal to UI. +        :param unseen: number of unseen messages. +        :type unseen: int          """ -        unseen = self.getUnseenCount()          leap_events.signal(IMAP_UNREAD_MAIL, str(unseen))      def store(self, messages_asked, flags, mode, uid): @@ -816,6 +823,8 @@ class SoledadMailbox(WithMsgFields, MBoxParser):                                 mode, uid, d)          if PROFILE_CMD:              do_profile_cmd(d, "STORE") +        d.addCallback(self.cb_signal_unread_to_ui) +        d.addErrback(lambda f: log.msg(f.getTraceback()))          return d      def _do_store(self, messages_asked, flags, mode, uid, observer): | 
