data_saved_messages.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 "dialogs/dialogs_main_list.h"
  9. namespace Main {
  10. class Session;
  11. } // namespace Main
  12. namespace Data {
  13. class Session;
  14. class SavedSublist;
  15. class SavedMessages final {
  16. public:
  17. explicit SavedMessages(not_null<Session*> owner);
  18. ~SavedMessages();
  19. [[nodiscard]] bool supported() const;
  20. [[nodiscard]] Session &owner() const;
  21. [[nodiscard]] Main::Session &session() const;
  22. [[nodiscard]] not_null<Dialogs::MainList*> chatsList();
  23. [[nodiscard]] not_null<SavedSublist*> sublist(not_null<PeerData*> peer);
  24. void loadMore();
  25. void loadMore(not_null<SavedSublist*> sublist);
  26. void apply(const MTPDupdatePinnedSavedDialogs &update);
  27. void apply(const MTPDupdateSavedDialogPinned &update);
  28. private:
  29. void loadPinned();
  30. void apply(const MTPmessages_SavedDialogs &result, bool pinned);
  31. void sendLoadMore();
  32. void sendLoadMore(not_null<SavedSublist*> sublist);
  33. void sendLoadMoreRequests();
  34. const not_null<Session*> _owner;
  35. Dialogs::MainList _chatsList;
  36. base::flat_map<
  37. not_null<PeerData*>,
  38. std::unique_ptr<SavedSublist>> _sublists;
  39. base::flat_map<not_null<SavedSublist*>, mtpRequestId> _loadMoreRequests;
  40. mtpRequestId _loadMoreRequestId = 0;
  41. mtpRequestId _pinnedRequestId = 0;
  42. TimeId _offsetDate = 0;
  43. MsgId _offsetId = 0;
  44. PeerData *_offsetPeer = nullptr;
  45. SingleQueuedInvokation _loadMore;
  46. base::flat_set<not_null<SavedSublist*>> _loadMoreSublistsScheduled;
  47. bool _loadMoreScheduled = false;
  48. bool _pinnedLoaded = false;
  49. bool _unsupported = false;
  50. };
  51. } // namespace Data