api_views.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. #include "base/timer.h"
  10. class ApiWrap;
  11. class PeerData;
  12. namespace Main {
  13. class Session;
  14. } // namespace Main
  15. namespace Api {
  16. class ViewsManager final {
  17. public:
  18. explicit ViewsManager(not_null<ApiWrap*> api);
  19. void scheduleIncrement(not_null<HistoryItem*> item);
  20. void removeIncremented(not_null<PeerData*> peer);
  21. void pollExtendedMedia(not_null<HistoryItem*> item, bool force = false);
  22. private:
  23. struct PollExtendedMediaRequest {
  24. crl::time when = 0;
  25. mtpRequestId id = 0;
  26. base::flat_set<MsgId> ids;
  27. base::flat_set<MsgId> sent;
  28. bool forced = false;
  29. };
  30. void viewsIncrement();
  31. void sendPollRequests();
  32. void sendPollRequests(
  33. const base::flat_map<
  34. not_null<PeerData*>,
  35. QVector<MTPint>> &prepared);
  36. void done(
  37. QVector<MTPint> ids,
  38. const MTPmessages_MessageViews &result,
  39. mtpRequestId requestId);
  40. void fail(const MTP::Error &error, mtpRequestId requestId);
  41. const not_null<Main::Session*> _session;
  42. MTP::Sender _api;
  43. base::flat_map<not_null<PeerData*>, base::flat_set<MsgId>> _incremented;
  44. base::flat_map<not_null<PeerData*>, base::flat_set<MsgId>> _toIncrement;
  45. base::flat_map<not_null<PeerData*>, mtpRequestId> _incrementRequests;
  46. base::flat_map<mtpRequestId, not_null<PeerData*>> _incrementByRequest;
  47. base::Timer _incrementTimer;
  48. base::flat_map<
  49. not_null<PeerData*>,
  50. PollExtendedMediaRequest> _pollRequests;
  51. base::Timer _pollTimer;
  52. };
  53. } // namespace Api