From cb3e649e619ae2f420ec33e847c9e144a0b91246 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 25 Apr 2019 14:01:09 +0400 Subject: [PATCH] Correctly handle cloud archive unread state. --- Telegram/SourceFiles/data/data_folder.cpp | 29 +++++++++++++---------- Telegram/SourceFiles/data/data_folder.h | 1 + 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/Telegram/SourceFiles/data/data_folder.cpp b/Telegram/SourceFiles/data/data_folder.cpp index 0acd2a583..31bdd17b1 100644 --- a/Telegram/SourceFiles/data/data_folder.cpp +++ b/Telegram/SourceFiles/data/data_folder.cpp @@ -337,22 +337,31 @@ void Folder::applyDialog(const MTPDdialogFolder &data) { void Folder::updateCloudUnread(const MTPDdialogFolder &data) { const auto notifier = unreadStateChangeNotifier(!_chatsList.loaded()); - _cloudUnread.messagesMuted = data.vunread_muted_messages_count.v; - _cloudUnread.messages = _cloudUnread.messagesMuted + _cloudUnread.messages = data.vunread_muted_messages_count.v + data.vunread_unmuted_messages_count.v; - _cloudUnread.chatsMuted = data.vunread_muted_peers_count.v; - _cloudUnread.chats = _cloudUnread.chatsMuted - + data.vunread_unmuted_peers_count.v; + _cloudUnread.chats = data.vunread_muted_peers_count.v + + data.vunread_unmuted_peers_count.v; + finalizeCloudUnread(); + _cloudUnread.known = true; } +void Folder::finalizeCloudUnread() { + // Cloud state for archive folder always counts everything as muted. + _cloudUnread.messagesMuted = _cloudUnread.messages; + _cloudUnread.chatsMuted = _cloudUnread.chats; + + // We don't know the real value of marked chats counts in _cloudUnread. + _cloudUnread.marksMuted = _cloudUnread.marks = 0; +} + Dialogs::UnreadState Folder::chatListUnreadState() const { const auto localUnread = _chatsList.unreadState(); auto result = _chatsList.loaded() ? localUnread : _cloudUnread; result.messagesMuted = result.messages; result.chatsMuted = result.chats; - // We don't know the real value of marked chats counts. + // We don't know the real value of marked chats counts in _cloudUnread. result.marksMuted = result.marks = localUnread.marks; return result; @@ -386,9 +395,7 @@ void Folder::unreadStateChanged( if (updateCloudUnread) { Assert(nowState.known); _cloudUnread += nowState - wasState; - - // We don't know the real value of marked chats counts. - _cloudUnread.marks = _cloudUnread.marksMuted = 0; + finalizeCloudUnread(); } } @@ -417,9 +424,7 @@ void Folder::unreadEntryChanged( } else { _cloudUnread -= state; } - - // We don't know the real value of marked chats counts. - _cloudUnread.marks = _cloudUnread.marksMuted = 0; + finalizeCloudUnread(); } } diff --git a/Telegram/SourceFiles/data/data_folder.h b/Telegram/SourceFiles/data/data_folder.h index 1350b8007..1fb2a5ac3 100644 --- a/Telegram/SourceFiles/data/data_folder.h +++ b/Telegram/SourceFiles/data/data_folder.h @@ -92,6 +92,7 @@ private: void addUnreadHistory(not_null history); void removeUnreadHistory(not_null history); void reorderUnreadHistories(); + void finalizeCloudUnread(); FolderId _id = 0; Dialogs::MainList _chatsList;