From 7f85494b1d1c357260860437bf386a77722040a1 Mon Sep 17 00:00:00 2001
From: 23rd <23rd@vivaldi.net>
Date: Wed, 27 Nov 2024 14:27:31 +0300
Subject: [PATCH] Moved out UnreadState to td_ui.

---
 Telegram/SourceFiles/dialogs/dialogs_common.h | 136 ++++++++++++++++++
 Telegram/SourceFiles/dialogs/dialogs_entry.h  | 124 +---------------
 .../dialogs/dialogs_indexed_list.h            |   4 +-
 .../SourceFiles/dialogs/dialogs_main_list.h   |   1 +
 .../dialogs/ui/dialogs_video_userpic.cpp      |   1 +
 Telegram/cmake/td_ui.cmake                    |   1 +
 6 files changed, 146 insertions(+), 121 deletions(-)
 create mode 100644 Telegram/SourceFiles/dialogs/dialogs_common.h

diff --git a/Telegram/SourceFiles/dialogs/dialogs_common.h b/Telegram/SourceFiles/dialogs/dialogs_common.h
new file mode 100644
index 000000000..d3e16f898
--- /dev/null
+++ b/Telegram/SourceFiles/dialogs/dialogs_common.h
@@ -0,0 +1,136 @@
+/*
+This file is part of Telegram Desktop,
+the official desktop application for the Telegram messaging service.
+
+For license and copyright information please follow this link:
+https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
+*/
+#pragma once
+
+namespace Ui {
+class RippleAnimation;
+} // namespace Ui
+
+namespace Dialogs {
+
+class Row;
+
+enum class SortMode {
+	Date    = 0x00,
+	Name    = 0x01,
+	Add     = 0x02,
+};
+
+struct PositionChange {
+	int from = -1;
+	int to = -1;
+	int height = 0;
+};
+
+struct UnreadState {
+	int messages = 0;
+	int messagesMuted = 0;
+	int chats = 0;
+	int chatsMuted = 0;
+	int chatsTopic = 0;
+	int chatsTopicMuted = 0;
+	int marks = 0;
+	int marksMuted = 0;
+	int reactions = 0;
+	int reactionsMuted = 0;
+	int forums = 0;
+	int forumsMuted = 0;
+	int mentions = 0;
+	bool known = false;
+
+	UnreadState &operator+=(const UnreadState &other) {
+		messages += other.messages;
+		messagesMuted += other.messagesMuted;
+		chats += other.chats;
+		chatsMuted += other.chatsMuted;
+		chatsTopic += other.chatsTopic;
+		chatsTopicMuted += other.chatsTopicMuted;
+		marks += other.marks;
+		marksMuted += other.marksMuted;
+		reactions += other.reactions;
+		reactionsMuted += other.reactionsMuted;
+		forums += other.forums;
+		forumsMuted += other.forumsMuted;
+		mentions += other.mentions;
+		return *this;
+	}
+	UnreadState &operator-=(const UnreadState &other) {
+		messages -= other.messages;
+		messagesMuted -= other.messagesMuted;
+		chats -= other.chats;
+		chatsMuted -= other.chatsMuted;
+		chatsTopic -= other.chatsTopic;
+		chatsTopicMuted -= other.chatsTopicMuted;
+		marks -= other.marks;
+		marksMuted -= other.marksMuted;
+		reactions -= other.reactions;
+		reactionsMuted -= other.reactionsMuted;
+		forums -= other.forums;
+		forumsMuted -= other.forumsMuted;
+		mentions -= other.mentions;
+		return *this;
+	}
+};
+
+inline UnreadState operator+(const UnreadState &a, const UnreadState &b) {
+	auto result = a;
+	result += b;
+	return result;
+}
+
+inline UnreadState operator-(const UnreadState &a, const UnreadState &b) {
+	auto result = a;
+	result -= b;
+	return result;
+}
+
+struct BadgesState {
+	int unreadCounter = 0;
+	bool unread : 1 = false;
+	bool unreadMuted : 1 = false;
+	bool mention : 1 = false;
+	bool mentionMuted : 1 = false;
+	bool reaction : 1 = false;
+	bool reactionMuted : 1 = false;
+
+	friend inline constexpr auto operator<=>(
+		BadgesState,
+		BadgesState) = default;
+
+	[[nodiscard]] bool empty() const {
+		return !unread && !mention && !reaction;
+	}
+};
+
+enum class CountInBadge : uchar {
+	Default,
+	Chats,
+	Messages,
+};
+
+enum class IncludeInBadge : uchar {
+	Default,
+	Unmuted,
+	All,
+	UnmutedOrAll,
+};
+
+struct RowsByLetter {
+	not_null<Row*> main;
+	base::flat_map<QChar, not_null<Row*>> letters;
+};
+
+struct RightButton final {
+	QImage bg;
+	QImage selectedBg;
+	QImage activeBg;
+	Ui::Text::String text;
+	std::unique_ptr<Ui::RippleAnimation> ripple;
+};
+
+} // namespace Dialogs
diff --git a/Telegram/SourceFiles/dialogs/dialogs_entry.h b/Telegram/SourceFiles/dialogs/dialogs_entry.h
index 83935c5ba..e52b45048 100644
--- a/Telegram/SourceFiles/dialogs/dialogs_entry.h
+++ b/Telegram/SourceFiles/dialogs/dialogs_entry.h
@@ -10,10 +10,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 #include "base/flat_map.h"
 #include "base/weak_ptr.h"
 #include "base/flags.h"
-#include "dialogs/dialogs_key.h"
+#include "dialogs/dialogs_common.h"
 #include "ui/unread_badge.h"
 
 class HistoryItem;
+class History;
 class UserData;
 
 namespace Main {
@@ -26,10 +27,10 @@ class Forum;
 class Folder;
 class ForumTopic;
 class SavedSublist;
+class Thread;
 } // namespace Data
 
 namespace Ui {
-class RippleAnimation;
 struct PeerUserpicView;
 } // namespace Ui
 
@@ -40,128 +41,11 @@ struct PaintContext;
 
 namespace Dialogs {
 
+struct UnreadState;
 class Row;
 class IndexedList;
 class MainList;
 
-struct RightButton final {
-	QImage bg;
-	QImage selectedBg;
-	QImage activeBg;
-	Ui::Text::String text;
-	std::unique_ptr<Ui::RippleAnimation> ripple;
-};
-
-struct RowsByLetter {
-	not_null<Row*> main;
-	base::flat_map<QChar, not_null<Row*>> letters;
-};
-
-enum class SortMode {
-	Date    = 0x00,
-	Name    = 0x01,
-	Add     = 0x02,
-};
-
-struct PositionChange {
-	int from = -1;
-	int to = -1;
-	int height = 0;
-};
-
-struct UnreadState {
-	int messages = 0;
-	int messagesMuted = 0;
-	int chats = 0;
-	int chatsMuted = 0;
-	int chatsTopic = 0;
-	int chatsTopicMuted = 0;
-	int marks = 0;
-	int marksMuted = 0;
-	int reactions = 0;
-	int reactionsMuted = 0;
-	int forums = 0;
-	int forumsMuted = 0;
-	int mentions = 0;
-	bool known = false;
-
-	UnreadState &operator+=(const UnreadState &other) {
-		messages += other.messages;
-		messagesMuted += other.messagesMuted;
-		chats += other.chats;
-		chatsMuted += other.chatsMuted;
-		chatsTopic += other.chatsTopic;
-		chatsTopicMuted += other.chatsTopicMuted;
-		marks += other.marks;
-		marksMuted += other.marksMuted;
-		reactions += other.reactions;
-		reactionsMuted += other.reactionsMuted;
-		forums += other.forums;
-		forumsMuted += other.forumsMuted;
-		mentions += other.mentions;
-		return *this;
-	}
-	UnreadState &operator-=(const UnreadState &other) {
-		messages -= other.messages;
-		messagesMuted -= other.messagesMuted;
-		chats -= other.chats;
-		chatsMuted -= other.chatsMuted;
-		chatsTopic -= other.chatsTopic;
-		chatsTopicMuted -= other.chatsTopicMuted;
-		marks -= other.marks;
-		marksMuted -= other.marksMuted;
-		reactions -= other.reactions;
-		reactionsMuted -= other.reactionsMuted;
-		forums -= other.forums;
-		forumsMuted -= other.forumsMuted;
-		mentions -= other.mentions;
-		return *this;
-	}
-};
-
-inline UnreadState operator+(const UnreadState &a, const UnreadState &b) {
-	auto result = a;
-	result += b;
-	return result;
-}
-
-inline UnreadState operator-(const UnreadState &a, const UnreadState &b) {
-	auto result = a;
-	result -= b;
-	return result;
-}
-
-struct BadgesState {
-	int unreadCounter = 0;
-	bool unread : 1 = false;
-	bool unreadMuted : 1 = false;
-	bool mention : 1 = false;
-	bool mentionMuted : 1 = false;
-	bool reaction : 1 = false;
-	bool reactionMuted : 1 = false;
-
-	friend inline constexpr auto operator<=>(
-		BadgesState,
-		BadgesState) = default;
-
-	[[nodiscard]] bool empty() const {
-		return !unread && !mention && !reaction;
-	}
-};
-
-enum class CountInBadge : uchar {
-	Default,
-	Chats,
-	Messages,
-};
-
-enum class IncludeInBadge : uchar {
-	Default,
-	Unmuted,
-	All,
-	UnmutedOrAll,
-};
-
 [[nodiscard]] BadgesState BadgesForUnread(
 	const UnreadState &state,
 	CountInBadge count = CountInBadge::Default,
diff --git a/Telegram/SourceFiles/dialogs/dialogs_indexed_list.h b/Telegram/SourceFiles/dialogs/dialogs_indexed_list.h
index 62128d92e..dfdf3b1de 100644
--- a/Telegram/SourceFiles/dialogs/dialogs_indexed_list.h
+++ b/Telegram/SourceFiles/dialogs/dialogs_indexed_list.h
@@ -7,13 +7,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 */
 #pragma once
 
-#include "dialogs/dialogs_entry.h"
 #include "dialogs/dialogs_list.h"
 
 class History;
 
 namespace Dialogs {
 
+struct RowsByLetter;
+class Row;
+
 class IndexedList {
 public:
 	IndexedList(SortMode sortMode, FilterId filterId = 0);
diff --git a/Telegram/SourceFiles/dialogs/dialogs_main_list.h b/Telegram/SourceFiles/dialogs/dialogs_main_list.h
index 157e48e31..1a5f86c3a 100644
--- a/Telegram/SourceFiles/dialogs/dialogs_main_list.h
+++ b/Telegram/SourceFiles/dialogs/dialogs_main_list.h
@@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 */
 #pragma once
 
+#include "dialogs/dialogs_common.h"
 #include "dialogs/dialogs_indexed_list.h"
 #include "dialogs/dialogs_pinned_list.h"
 
diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_video_userpic.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_video_userpic.cpp
index 188d512e8..9f970a30d 100644
--- a/Telegram/SourceFiles/dialogs/ui/dialogs_video_userpic.cpp
+++ b/Telegram/SourceFiles/dialogs/ui/dialogs_video_userpic.cpp
@@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 #include "data/data_photo_media.h"
 #include "data/data_file_origin.h"
 #include "data/data_session.h"
+#include "dialogs/dialogs_entry.h"
 #include "dialogs/ui/dialogs_layout.h"
 #include "ui/painter.h"
 #include "styles/style_dialogs.h"
diff --git a/Telegram/cmake/td_ui.cmake b/Telegram/cmake/td_ui.cmake
index 54d8bc92b..fa35b57d9 100644
--- a/Telegram/cmake/td_ui.cmake
+++ b/Telegram/cmake/td_ui.cmake
@@ -95,6 +95,7 @@ PRIVATE
     data/data_statistics_chart.h
     data/data_subscriptions.h
 
+    dialogs/dialogs_common.h
     dialogs/dialogs_three_state_icon.h
     dialogs/ui/chat_search_empty.cpp
     dialogs/ui/chat_search_empty.h