api_global_privacy.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 "mtproto/sender.h"
  9. class ApiWrap;
  10. namespace Main {
  11. class Session;
  12. } // namespace Main
  13. namespace Api {
  14. enum class UnarchiveOnNewMessage {
  15. None,
  16. NotInFoldersUnmuted,
  17. AnyUnmuted,
  18. };
  19. [[nodiscard]] PeerId ParsePaidReactionShownPeer(
  20. not_null<Main::Session*> session,
  21. const MTPPaidReactionPrivacy &value);
  22. class GlobalPrivacy final {
  23. public:
  24. explicit GlobalPrivacy(not_null<ApiWrap*> api);
  25. void reload(Fn<void()> callback = nullptr);
  26. void updateArchiveAndMute(bool value);
  27. void updateUnarchiveOnNewMessage(UnarchiveOnNewMessage value);
  28. [[nodiscard]] bool archiveAndMuteCurrent() const;
  29. [[nodiscard]] rpl::producer<bool> archiveAndMute() const;
  30. [[nodiscard]] auto unarchiveOnNewMessageCurrent() const
  31. -> UnarchiveOnNewMessage;
  32. [[nodiscard]] auto unarchiveOnNewMessage() const
  33. -> rpl::producer<UnarchiveOnNewMessage>;
  34. [[nodiscard]] rpl::producer<bool> showArchiveAndMute() const;
  35. [[nodiscard]] rpl::producer<> suggestArchiveAndMute() const;
  36. void dismissArchiveAndMuteSuggestion();
  37. void updateHideReadTime(bool hide);
  38. [[nodiscard]] bool hideReadTimeCurrent() const;
  39. [[nodiscard]] rpl::producer<bool> hideReadTime() const;
  40. [[nodiscard]] bool newRequirePremiumCurrent() const;
  41. [[nodiscard]] rpl::producer<bool> newRequirePremium() const;
  42. [[nodiscard]] int newChargeStarsCurrent() const;
  43. [[nodiscard]] rpl::producer<int> newChargeStars() const;
  44. void updateMessagesPrivacy(bool requirePremium, int chargeStars);
  45. void loadPaidReactionShownPeer();
  46. void updatePaidReactionShownPeer(PeerId shownPeer);
  47. [[nodiscard]] PeerId paidReactionShownPeerCurrent() const;
  48. [[nodiscard]] rpl::producer<PeerId> paidReactionShownPeer() const;
  49. private:
  50. void apply(const MTPGlobalPrivacySettings &settings);
  51. void update(
  52. bool archiveAndMute,
  53. UnarchiveOnNewMessage unarchiveOnNewMessage,
  54. bool hideReadTime,
  55. bool newRequirePremium,
  56. int newChargeStars);
  57. const not_null<Main::Session*> _session;
  58. MTP::Sender _api;
  59. mtpRequestId _requestId = 0;
  60. rpl::variable<bool> _archiveAndMute = false;
  61. rpl::variable<UnarchiveOnNewMessage> _unarchiveOnNewMessage
  62. = UnarchiveOnNewMessage::None;
  63. rpl::variable<bool> _showArchiveAndMute = false;
  64. rpl::variable<bool> _hideReadTime = false;
  65. rpl::variable<bool> _newRequirePremium = false;
  66. rpl::variable<int> _newChargeStars = 0;
  67. rpl::variable<PeerId> _paidReactionShownPeer = false;
  68. std::vector<Fn<void()>> _callbacks;
  69. bool _paidReactionShownPeerLoaded = false;
  70. };
  71. } // namespace Api