data_history_messages.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 "storage/storage_sparse_ids_list.h"
  9. class History;
  10. class SparseIdsSlice;
  11. class SparseIdsMergedSlice;
  12. namespace Data {
  13. struct MessagesSlice;
  14. struct MessagePosition;
  15. class HistoryMessages final {
  16. public:
  17. void addNew(MsgId messageId);
  18. void addExisting(MsgId messageId, MsgRange noSkipRange);
  19. void addSlice(
  20. std::vector<MsgId> &&messageIds,
  21. MsgRange noSkipRange,
  22. std::optional<int> count);
  23. void removeOne(MsgId messageId);
  24. void removeAll();
  25. void invalidateBottom();
  26. [[nodiscard]] Storage::SparseIdsListResult snapshot(
  27. const Storage::SparseIdsListQuery &query) const;
  28. [[nodiscard]] auto sliceUpdated() const
  29. -> rpl::producer<Storage::SparseIdsSliceUpdate>;
  30. [[nodiscard]] rpl::producer<MsgId> oneRemoved() const;
  31. [[nodiscard]] rpl::producer<> allRemoved() const;
  32. [[nodiscard]] rpl::producer<> bottomInvalidated() const;
  33. private:
  34. Storage::SparseIdsList _chat;
  35. rpl::event_stream<MsgId> _oneRemoved;
  36. rpl::event_stream<> _allRemoved;
  37. rpl::event_stream<> _bottomInvalidated;
  38. };
  39. [[nodiscard]] rpl::producer<SparseIdsSlice> HistoryViewer(
  40. not_null<History*> history,
  41. MsgId aroundId,
  42. int limitBefore,
  43. int limitAfter);
  44. [[nodiscard]] rpl::producer<SparseIdsMergedSlice> HistoryMergedViewer(
  45. not_null<History*> history,
  46. /*Universal*/MsgId universalAroundId,
  47. int limitBefore,
  48. int limitAfter);
  49. [[nodiscard]] rpl::producer<MessagesSlice> HistoryMessagesViewer(
  50. not_null<History*> history,
  51. MessagePosition aroundId,
  52. int limitBefore,
  53. int limitAfter);
  54. } // namespace Data