api_credits.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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_credits.h"
  10. #include "data/data_credits_earn.h"
  11. #include "mtproto/sender.h"
  12. namespace Data {
  13. class SavedStarGiftId;
  14. } // namespace Data
  15. namespace Main {
  16. class Session;
  17. } // namespace Main
  18. class UserData;
  19. namespace Api {
  20. class CreditsTopupOptions final {
  21. public:
  22. CreditsTopupOptions(not_null<PeerData*> peer);
  23. [[nodiscard]] rpl::producer<rpl::no_value, QString> request();
  24. [[nodiscard]] Data::CreditTopupOptions options() const;
  25. private:
  26. const not_null<PeerData*> _peer;
  27. Data::CreditTopupOptions _options;
  28. MTP::Sender _api;
  29. };
  30. class CreditsGiveawayOptions final {
  31. public:
  32. CreditsGiveawayOptions(not_null<PeerData*> peer);
  33. [[nodiscard]] rpl::producer<rpl::no_value, QString> request();
  34. [[nodiscard]] Data::CreditsGiveawayOptions options() const;
  35. private:
  36. const not_null<PeerData*> _peer;
  37. Data::CreditsGiveawayOptions _options;
  38. MTP::Sender _api;
  39. };
  40. class CreditsStatus final {
  41. public:
  42. CreditsStatus(not_null<PeerData*> peer);
  43. void request(
  44. const Data::CreditsStatusSlice::OffsetToken &token,
  45. Fn<void(Data::CreditsStatusSlice)> done);
  46. private:
  47. const not_null<PeerData*> _peer;
  48. mtpRequestId _requestId = 0;
  49. MTP::Sender _api;
  50. };
  51. class CreditsHistory final {
  52. public:
  53. CreditsHistory(not_null<PeerData*> peer, bool in, bool out);
  54. void request(
  55. const Data::CreditsStatusSlice::OffsetToken &token,
  56. Fn<void(Data::CreditsStatusSlice)> done);
  57. void requestSubscriptions(
  58. const Data::CreditsStatusSlice::OffsetToken &token,
  59. Fn<void(Data::CreditsStatusSlice)> done);
  60. private:
  61. using HistoryTL = MTPpayments_GetStarsTransactions;
  62. const not_null<PeerData*> _peer;
  63. const HistoryTL::Flags _flags;
  64. mtpRequestId _requestId = 0;
  65. MTP::Sender _api;
  66. };
  67. class CreditsEarnStatistics final : public StatisticsRequestSender {
  68. public:
  69. explicit CreditsEarnStatistics(not_null<PeerData*>);
  70. [[nodiscard]] rpl::producer<rpl::no_value, QString> request();
  71. [[nodiscard]] Data::CreditsEarnStatistics data() const;
  72. private:
  73. const bool _isUser = false;
  74. Data::CreditsEarnStatistics _data;
  75. mtpRequestId _requestId = 0;
  76. };
  77. [[nodiscard]] rpl::producer<not_null<PeerData*>> PremiumPeerBot(
  78. not_null<Main::Session*> session);
  79. void EditCreditsSubscription(
  80. not_null<Main::Session*> session,
  81. const QString &id,
  82. bool cancel,
  83. Fn<void()> done,
  84. Fn<void(QString)> fail);
  85. [[nodiscard]] MTPInputSavedStarGift InputSavedStarGiftId(
  86. const Data::SavedStarGiftId &id);
  87. } // namespace Api