api_statistics.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "api/api_statistics_sender.h"
  9. #include "data/data_boosts.h"
  10. #include "data/data_channel_earn.h"
  11. #include "data/data_statistics.h"
  12. class ChannelData;
  13. class PeerData;
  14. namespace Api {
  15. class Statistics final : public StatisticsRequestSender {
  16. public:
  17. explicit Statistics(not_null<ChannelData*> channel);
  18. [[nodiscard]] rpl::producer<rpl::no_value, QString> request();
  19. using GraphResult = rpl::producer<Data::StatisticalGraph, QString>;
  20. [[nodiscard]] GraphResult requestZoom(
  21. const QString &token,
  22. float64 x);
  23. [[nodiscard]] Data::ChannelStatistics channelStats() const;
  24. [[nodiscard]] Data::SupergroupStatistics supergroupStats() const;
  25. private:
  26. Data::ChannelStatistics _channelStats;
  27. Data::SupergroupStatistics _supergroupStats;
  28. std::deque<Fn<void()>> _zoomDeque;
  29. };
  30. class PublicForwards final : public StatisticsRequestSender {
  31. public:
  32. PublicForwards(
  33. not_null<ChannelData*> channel,
  34. Data::RecentPostId fullId);
  35. void request(
  36. const Data::PublicForwardsSlice::OffsetToken &token,
  37. Fn<void(Data::PublicForwardsSlice)> done);
  38. private:
  39. const Data::RecentPostId _fullId;
  40. mtpRequestId _requestId = 0;
  41. int _lastTotal = 0;
  42. };
  43. class MessageStatistics final : public StatisticsRequestSender {
  44. public:
  45. explicit MessageStatistics(
  46. not_null<ChannelData*> channel,
  47. FullMsgId fullId);
  48. explicit MessageStatistics(
  49. not_null<ChannelData*> channel,
  50. FullStoryId storyId);
  51. void request(Fn<void(Data::MessageStatistics)> done);
  52. [[nodiscard]] Data::PublicForwardsSlice firstSlice() const;
  53. private:
  54. PublicForwards _publicForwards;
  55. const FullMsgId _fullId;
  56. const FullStoryId _storyId;
  57. Data::PublicForwardsSlice _firstSlice;
  58. mtpRequestId _requestId = 0;
  59. };
  60. class EarnStatistics final : public StatisticsRequestSender {
  61. public:
  62. explicit EarnStatistics(not_null<PeerData*> peer);
  63. [[nodiscard]] rpl::producer<rpl::no_value, QString> request();
  64. void requestHistory(
  65. const Data::EarnHistorySlice::OffsetToken &token,
  66. Fn<void(Data::EarnHistorySlice)> done);
  67. [[nodiscard]] Data::EarnStatistics data() const;
  68. static constexpr auto kFirstSlice = int(5);
  69. static constexpr auto kLimit = int(10);
  70. private:
  71. const bool _isUser = false;
  72. Data::EarnStatistics _data;
  73. mtpRequestId _requestId = 0;
  74. };
  75. class Boosts final {
  76. public:
  77. explicit Boosts(not_null<PeerData*> peer);
  78. [[nodiscard]] rpl::producer<rpl::no_value, QString> request();
  79. void requestBoosts(
  80. const Data::BoostsListSlice::OffsetToken &token,
  81. Fn<void(Data::BoostsListSlice)> done);
  82. [[nodiscard]] Data::BoostStatus boostStatus() const;
  83. static constexpr auto kFirstSlice = int(10);
  84. static constexpr auto kLimit = int(40);
  85. private:
  86. const not_null<PeerData*> _peer;
  87. Data::BoostStatus _boostStatus;
  88. MTP::Sender _api;
  89. mtpRequestId _requestId = 0;
  90. };
  91. } // namespace Api