From 9c1701c62a972d66814cbf8a48a05b4031f72b81 Mon Sep 17 00:00:00 2001
From: 23rd <23rd@vivaldi.net>
Date: Wed, 13 Nov 2024 18:58:04 +0300
Subject: [PATCH] Added support of muted chats filters to chats filters strip.

---
 .../ui/widgets/chat_filters_tabs_slider.cpp      | 16 +++++++++++-----
 .../ui/widgets/chat_filters_tabs_slider.h        |  4 ++--
 .../ui/widgets/chat_filters_tabs_strip.cpp       |  3 ++-
 3 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp
index 0bf4704b3..2e51210ee 100644
--- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp
+++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp
@@ -70,19 +70,19 @@ void ChatsFiltersTabs::fitWidthToSections() {
 	}
 }
 
-void ChatsFiltersTabs::setUnreadCount(int index, int unreadCount) {
+void ChatsFiltersTabs::setUnreadCount(int index, int unreadCount, bool mute) {
 	const auto it = _unreadCounts.find(index);
 	if (it == _unreadCounts.end()) {
 		if (unreadCount) {
 			_unreadCounts.emplace(index, Unread{
-				.cache = cacheUnreadCount(unreadCount),
+				.cache = cacheUnreadCount(unreadCount, mute),
 				.count = unreadCount,
 			});
 		}
 	} else {
 		if (unreadCount) {
 			it->second.count = unreadCount;
-			it->second.cache = cacheUnreadCount(unreadCount);
+			it->second.cache = cacheUnreadCount(unreadCount, mute);
 		} else {
 			_unreadCounts.erase(it);
 		}
@@ -132,7 +132,7 @@ void ChatsFiltersTabs::setLockedFrom(int index) {
 	});
 }
 
-QImage ChatsFiltersTabs::cacheUnreadCount(int count) const {
+QImage ChatsFiltersTabs::cacheUnreadCount(int count, bool muted) const {
 	const auto widthIndex = (count < 10) ? 0 : (count < 100) ? 1 : 2;
 	auto image = QImage(
 		QSize(_cachedBadgeWidths[widthIndex], _cachedBadgeHeight)
@@ -145,7 +145,13 @@ QImage ChatsFiltersTabs::cacheUnreadCount(int count) const {
 		: QString::number(count);
 	{
 		auto p = QPainter(&image);
-		Ui::PaintUnreadBadge(p, string, 0, 0, _unreadSt, 0);
+		if (muted) {
+			auto copy = _unreadSt;
+			copy.muted = muted;
+			Ui::PaintUnreadBadge(p, string, 0, 0, copy, 0);
+		} else {
+			Ui::PaintUnreadBadge(p, string, 0, 0, _unreadSt, 0);
+		}
 	}
 	return image;
 }
diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.h b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.h
index 652ee2759..c66818fbd 100644
--- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.h
+++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.h
@@ -29,7 +29,7 @@ public:
 
 	[[nodiscard]] int centerOfSection(int section) const;
 	void fitWidthToSections();
-	void setUnreadCount(int index, int unreadCount);
+	void setUnreadCount(int index, int unreadCount, bool muted);
 	void setLockedFrom(int index);
 
 	[[nodiscard]] rpl::producer<int> contextMenuRequested() const;
@@ -62,7 +62,7 @@ protected:
 	std::vector<ShiftedSection> _sections;
 
 private:
-	[[nodiscard]] QImage cacheUnreadCount(int count) const;
+	[[nodiscard]] QImage cacheUnreadCount(int count, bool muted) const;
 	[[nodiscard]] int calculateLockedFromX() const;
 
 	using Index = int;
diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp
index b3a65f915..5c80f72ca 100644
--- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp
+++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp
@@ -330,7 +330,8 @@ not_null<Ui::RpWidget*> AddChatFiltersTabsStrip(
 					const auto muted = (state.chatsMuted + state.marksMuted);
 					const auto count = (state.chats + state.marks)
 						- (includeMuted ? 0 : muted);
-					slider->setUnreadCount(i, count);
+					const auto isMuted = includeMuted && (count == muted);
+					slider->setUnreadCount(i, count, isMuted);
 					slider->fitWidthToSections();
 				}, state->unreadLifetime);
 			}