diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index c2dce9a9df..840b4a7e7a 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -3002,12 +3002,17 @@ HistoryItem *Session::addNewMessage( return result; } -int Session::unreadBadge() const { - return computeUnreadBadge(_chatsList.unreadState()); +int Session::unreadWithMentionsBadge() const { + auto state = _chatsList.unreadState(); + if (state.mentions) { + state.messages -= state.mentions; + } + return computeUnreadBadge(state) + state.mentions; } -bool Session::unreadBadgeMuted() const { - return computeUnreadBadgeMuted(_chatsList.unreadState()); +bool Session::unreadWithMentionsBadgeMuted() const { + const auto state = _chatsList.unreadState(); + return !state.mentions && computeUnreadBadgeMuted(state); } int Session::unreadBadgeIgnoreOne(Dialogs::Key key) const { diff --git a/Telegram/SourceFiles/data/data_session.h b/Telegram/SourceFiles/data/data_session.h index fba78f17ba..c2207470f7 100644 --- a/Telegram/SourceFiles/data/data_session.h +++ b/Telegram/SourceFiles/data/data_session.h @@ -579,8 +579,8 @@ public: MessageFlags localFlags, NewMessageType type); - [[nodiscard]] int unreadBadge() const; - [[nodiscard]] bool unreadBadgeMuted() const; + [[nodiscard]] int unreadWithMentionsBadge() const; + [[nodiscard]] bool unreadWithMentionsBadgeMuted() const; [[nodiscard]] int unreadBadgeIgnoreOne(Dialogs::Key key) const; [[nodiscard]] bool unreadBadgeMutedIgnoreOne(Dialogs::Key key) const; [[nodiscard]] int unreadOnlyMutedBadge() const; diff --git a/Telegram/SourceFiles/main/main_domain.cpp b/Telegram/SourceFiles/main/main_domain.cpp index 714f7e2919..28d42de3eb 100644 --- a/Telegram/SourceFiles/main/main_domain.cpp +++ b/Telegram/SourceFiles/main/main_domain.cpp @@ -247,8 +247,8 @@ void Domain::updateUnreadBadge() { for (const auto &[index, account] : _accounts) { if (const auto session = account->maybeSession()) { const auto data = &session->data(); - _unreadBadge += data->unreadBadge(); - if (!data->unreadBadgeMuted()) { + _unreadBadge += data->unreadWithMentionsBadge(); + if (!data->unreadWithMentionsBadgeMuted()) { _unreadBadgeMuted = false; } } diff --git a/Telegram/SourceFiles/settings/settings_information.cpp b/Telegram/SourceFiles/settings/settings_information.cpp index 898673ba39..d8fcdd093a 100644 --- a/Telegram/SourceFiles/settings/settings_information.cpp +++ b/Telegram/SourceFiles/settings/settings_information.cpp @@ -118,8 +118,8 @@ ComposedBadge::ComposedBadge( ) | rpl::map([=] { auto &owner = session->data(); return Badge::UnreadBadge{ - owner.unreadBadge(), - owner.unreadBadgeMuted(), + owner.unreadWithMentionsBadge(), + owner.unreadWithMentionsBadgeMuted(), }; })); rpl::combine( diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index 9c52ca45d6..b2cea95471 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -916,8 +916,8 @@ OthersUnreadState OtherAccountsUnreadStateCurrent( if (account.get() == current) { continue; } else if (const auto session = account->maybeSession()) { - counter += session->data().unreadBadge(); - if (!session->data().unreadBadgeMuted()) { + counter += session->data().unreadWithMentionsBadge(); + if (!session->data().unreadWithMentionsBadgeMuted()) { allMuted = false; } }