158 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| 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
 | |
| 
 | |
| #include "data/data_statistics_chart.h"
 | |
| 
 | |
| namespace Data {
 | |
| 
 | |
| struct StatisticsMessageInteractionInfo final {
 | |
| 	MsgId messageId;
 | |
| 	StoryId storyId = StoryId(0);
 | |
| 	int viewsCount = 0;
 | |
| 	int forwardsCount = 0;
 | |
| 	int reactionsCount = 0;
 | |
| };
 | |
| 
 | |
| struct StatisticsMessageSenderInfo final {
 | |
| 	UserId userId = UserId(0);
 | |
| 	int sentMessageCount = 0;
 | |
| 	int averageCharacterCount = 0;
 | |
| };
 | |
| 
 | |
| struct StatisticsAdministratorActionsInfo final {
 | |
| 	UserId userId = UserId(0);
 | |
| 	int deletedMessageCount = 0;
 | |
| 	int bannedUserCount = 0;
 | |
| 	int restrictedUserCount = 0;
 | |
| };
 | |
| 
 | |
| struct StatisticsInviterInfo final {
 | |
| 	UserId userId = UserId(0);
 | |
| 	int addedMemberCount = 0;
 | |
| };
 | |
| 
 | |
| struct StatisticalValue final {
 | |
| 	float64 value = 0.;
 | |
| 	float64 previousValue = 0.;
 | |
| 	float64 growthRatePercentage = 0.;
 | |
| };
 | |
| 
 | |
| struct ChannelStatistics final {
 | |
| 	[[nodiscard]] bool empty() const {
 | |
| 		return !startDate || !endDate;
 | |
| 	}
 | |
| 	[[nodiscard]] explicit operator bool() const {
 | |
| 		return !empty();
 | |
| 	}
 | |
| 
 | |
| 	int startDate = 0;
 | |
| 	int endDate = 0;
 | |
| 
 | |
| 	StatisticalValue memberCount;
 | |
| 	StatisticalValue meanViewCount;
 | |
| 	StatisticalValue meanShareCount;
 | |
| 	StatisticalValue meanReactionCount;
 | |
| 	StatisticalValue meanStoryViewCount;
 | |
| 	StatisticalValue meanStoryShareCount;
 | |
| 	StatisticalValue meanStoryReactionCount;
 | |
| 
 | |
| 	float64 enabledNotificationsPercentage = 0.;
 | |
| 
 | |
| 	StatisticalGraph memberCountGraph;
 | |
| 	StatisticalGraph joinGraph;
 | |
| 	StatisticalGraph muteGraph;
 | |
| 	StatisticalGraph viewCountByHourGraph;
 | |
| 	StatisticalGraph viewCountBySourceGraph;
 | |
| 	StatisticalGraph joinBySourceGraph;
 | |
| 	StatisticalGraph languageGraph;
 | |
| 	StatisticalGraph messageInteractionGraph;
 | |
| 	StatisticalGraph instantViewInteractionGraph;
 | |
| 	StatisticalGraph reactionsByEmotionGraph;
 | |
| 	StatisticalGraph storyInteractionsGraph;
 | |
| 	StatisticalGraph storyReactionsByEmotionGraph;
 | |
| 
 | |
| 	std::vector<StatisticsMessageInteractionInfo> recentMessageInteractions;
 | |
| 
 | |
| };
 | |
| 
 | |
| struct SupergroupStatistics final {
 | |
| 	[[nodiscard]] bool empty() const {
 | |
| 		return !startDate || !endDate;
 | |
| 	}
 | |
| 	[[nodiscard]] explicit operator bool() const {
 | |
| 		return !empty();
 | |
| 	}
 | |
| 
 | |
| 	int startDate = 0;
 | |
| 	int endDate = 0;
 | |
| 
 | |
| 	StatisticalValue memberCount;
 | |
| 	StatisticalValue messageCount;
 | |
| 	StatisticalValue viewerCount;
 | |
| 	StatisticalValue senderCount;
 | |
| 
 | |
| 	StatisticalGraph memberCountGraph;
 | |
| 	StatisticalGraph joinGraph;
 | |
| 	StatisticalGraph joinBySourceGraph;
 | |
| 	StatisticalGraph languageGraph;
 | |
| 	StatisticalGraph messageContentGraph;
 | |
| 	StatisticalGraph actionGraph;
 | |
| 	StatisticalGraph dayGraph;
 | |
| 	StatisticalGraph weekGraph;
 | |
| 
 | |
| 	std::vector<StatisticsMessageSenderInfo> topSenders;
 | |
| 	std::vector<StatisticsAdministratorActionsInfo> topAdministrators;
 | |
| 	std::vector<StatisticsInviterInfo> topInviters;
 | |
| 
 | |
| };
 | |
| 
 | |
| struct MessageStatistics final {
 | |
| 	explicit operator bool() const {
 | |
| 		return !messageInteractionGraph.chart.empty() || views;
 | |
| 	}
 | |
| 	Data::StatisticalGraph messageInteractionGraph;
 | |
| 	Data::StatisticalGraph reactionsByEmotionGraph;
 | |
| 	int publicForwards = 0;
 | |
| 	int privateForwards = 0;
 | |
| 	int views = 0;
 | |
| 	int reactions = 0;
 | |
| };
 | |
| // At the moment, the structures are identical.
 | |
| using StoryStatistics = MessageStatistics;
 | |
| 
 | |
| struct AnyStatistics final {
 | |
| 	Data::ChannelStatistics channel;
 | |
| 	Data::SupergroupStatistics supergroup;
 | |
| 	Data::MessageStatistics message;
 | |
| 	Data::StoryStatistics story;
 | |
| };
 | |
| 
 | |
| struct RecentPostId final {
 | |
| 	FullMsgId messageId;
 | |
| 	FullStoryId storyId;
 | |
| 
 | |
| 	[[nodiscard]] bool valid() const {
 | |
| 		return messageId || storyId;
 | |
| 	}
 | |
| 	explicit operator bool() const {
 | |
| 		return valid();
 | |
| 	}
 | |
| 	friend inline auto operator<=>(RecentPostId, RecentPostId) = default;
 | |
| 	friend inline bool operator==(RecentPostId, RecentPostId) = default;
 | |
| };
 | |
| 
 | |
| struct PublicForwardsSlice final {
 | |
| 	using OffsetToken = QString;
 | |
| 	QVector<RecentPostId> list;
 | |
| 	int total = 0;
 | |
| 	bool allLoaded = false;
 | |
| 	OffsetToken token;
 | |
| };
 | |
| 
 | |
| } // namespace Data
 | 
