diff options
-rw-r--r-- | mail/changes/bug_5177_fix_unread_signal_to_ui | 1 | ||||
-rw-r--r-- | mail/src/leap/mail/imap/mailbox.py | 37 |
2 files changed, 24 insertions, 14 deletions
diff --git a/mail/changes/bug_5177_fix_unread_signal_to_ui b/mail/changes/bug_5177_fix_unread_signal_to_ui new file mode 100644 index 0000000..eac79f2 --- /dev/null +++ b/mail/changes/bug_5177_fix_unread_signal_to_ui @@ -0,0 +1 @@ + o Fix unread notifications to client UI. Only INBOX is notified. Closes: #5177 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): |