110 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
	
		
			2.4 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_boosts.h"
 | 
						|
#include "data/data_statistics.h"
 | 
						|
#include "mtproto/sender.h"
 | 
						|
 | 
						|
class ApiWrap;
 | 
						|
class ChannelData;
 | 
						|
class PeerData;
 | 
						|
 | 
						|
namespace Api {
 | 
						|
 | 
						|
class Statistics final {
 | 
						|
public:
 | 
						|
	explicit Statistics(not_null<ApiWrap*> api);
 | 
						|
 | 
						|
	[[nodiscard]] rpl::producer<rpl::no_value, QString> request(
 | 
						|
		not_null<PeerData*> peer);
 | 
						|
	using GraphResult = rpl::producer<Data::StatisticalGraph, QString>;
 | 
						|
	[[nodiscard]] GraphResult requestZoom(
 | 
						|
		not_null<PeerData*> peer,
 | 
						|
		const QString &token,
 | 
						|
		float64 x);
 | 
						|
	[[nodiscard]] GraphResult requestMessage(
 | 
						|
		not_null<PeerData*> peer,
 | 
						|
		MsgId msgId);
 | 
						|
 | 
						|
	[[nodiscard]] Data::ChannelStatistics channelStats() const;
 | 
						|
	[[nodiscard]] Data::SupergroupStatistics supergroupStats() const;
 | 
						|
 | 
						|
private:
 | 
						|
	Data::ChannelStatistics _channelStats;
 | 
						|
	Data::SupergroupStatistics _supergroupStats;
 | 
						|
	MTP::Sender _api;
 | 
						|
 | 
						|
	std::deque<Fn<void()>> _zoomDeque;
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
class PublicForwards final {
 | 
						|
public:
 | 
						|
	explicit PublicForwards(not_null<ChannelData*> channel, FullMsgId fullId);
 | 
						|
 | 
						|
	void request(
 | 
						|
		const Data::PublicForwardsSlice::OffsetToken &token,
 | 
						|
		Fn<void(Data::PublicForwardsSlice)> done);
 | 
						|
 | 
						|
private:
 | 
						|
	const not_null<ChannelData*> _channel;
 | 
						|
	const FullMsgId _fullId;
 | 
						|
	mtpRequestId _requestId = 0;
 | 
						|
	int _lastTotal = 0;
 | 
						|
 | 
						|
	MTP::Sender _api;
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
class MessageStatistics final {
 | 
						|
public:
 | 
						|
	explicit MessageStatistics(
 | 
						|
		not_null<ChannelData*> channel,
 | 
						|
		FullMsgId fullId);
 | 
						|
 | 
						|
	void request(Fn<void(Data::MessageStatistics)> done);
 | 
						|
 | 
						|
	[[nodiscard]] Data::PublicForwardsSlice firstSlice() const;
 | 
						|
 | 
						|
private:
 | 
						|
	PublicForwards _publicForwards;
 | 
						|
	const not_null<ChannelData*> _channel;
 | 
						|
	const FullMsgId _fullId;
 | 
						|
 | 
						|
	Data::PublicForwardsSlice _firstSlice;
 | 
						|
 | 
						|
	mtpRequestId _requestId = 0;
 | 
						|
	MTP::Sender _api;
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
class Boosts final {
 | 
						|
public:
 | 
						|
	explicit Boosts(not_null<PeerData*> peer);
 | 
						|
 | 
						|
	[[nodiscard]] rpl::producer<rpl::no_value, QString> request();
 | 
						|
	void requestBoosts(
 | 
						|
		const Data::BoostsListSlice::OffsetToken &token,
 | 
						|
		Fn<void(Data::BoostsListSlice)> done);
 | 
						|
 | 
						|
	[[nodiscard]] Data::BoostStatus boostStatus() const;
 | 
						|
 | 
						|
	static constexpr auto kFirstSlice = int(10);
 | 
						|
	static constexpr auto kLimit = int(40);
 | 
						|
 | 
						|
private:
 | 
						|
	const not_null<PeerData*> _peer;
 | 
						|
	Data::BoostStatus _boostStatus;
 | 
						|
 | 
						|
	MTP::Sender _api;
 | 
						|
	mtpRequestId _requestId = 0;
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
} // namespace Api
 |