data_forum_icons.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 "base/timer.h"
  9. namespace Main {
  10. class Session;
  11. } // namespace Main
  12. namespace Data {
  13. class DocumentMedia;
  14. class Session;
  15. class Forum;
  16. class ForumIcons final {
  17. public:
  18. explicit ForumIcons(not_null<Session*> owner);
  19. ~ForumIcons();
  20. [[nodiscard]] Session &owner() const {
  21. return *_owner;
  22. }
  23. [[nodiscard]] Main::Session &session() const;
  24. void refreshDefault();
  25. void requestDefaultIfUnknown();
  26. [[nodiscard]] const std::vector<DocumentId> &list() const;
  27. [[nodiscard]] rpl::producer<> defaultUpdates() const;
  28. void scheduleUserpicsReset(not_null<Forum*> forum);
  29. void clearUserpicsReset(not_null<Forum*> forum);
  30. private:
  31. void requestDefault();
  32. void resetUserpics();
  33. void resetUserpicsFor(not_null<Forum*> forum);
  34. void updateDefault(const MTPDmessages_stickerSet &data);
  35. const not_null<Session*> _owner;
  36. std::vector<DocumentId> _default;
  37. rpl::event_stream<> _defaultUpdated;
  38. mtpRequestId _defaultRequestId = 0;
  39. base::flat_map<not_null<Forum*>, crl::time> _resetUserpicsWhen;
  40. base::Timer _resetUserpicsTimer;
  41. rpl::lifetime _lifetime;
  42. };
  43. } // namespace Data