api_messages_search.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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/qt/qt_compare.h"
  9. #include "data/data_message_reaction_id.h"
  10. class HistoryItem;
  11. class History;
  12. class PeerData;
  13. namespace Data {
  14. struct ReactionId;
  15. } // namespace Data
  16. namespace Api {
  17. struct FoundMessages {
  18. int total = -1;
  19. MessageIdsList messages;
  20. QString nextToken;
  21. };
  22. class MessagesSearch final {
  23. public:
  24. struct Request {
  25. QString query;
  26. PeerData *from = nullptr;
  27. std::vector<Data::ReactionId> tags;
  28. MsgId topMsgId;
  29. friend inline bool operator==(
  30. const Request &,
  31. const Request &) = default;
  32. friend inline auto operator<=>(
  33. const Request &,
  34. const Request &) = default;
  35. };
  36. explicit MessagesSearch(not_null<History*> history);
  37. ~MessagesSearch();
  38. void searchMessages(Request request);
  39. void searchMore();
  40. [[nodiscard]] rpl::producer<FoundMessages> messagesFounds() const;
  41. private:
  42. using TLMessages = MTPmessages_Messages;
  43. void searchRequest();
  44. void searchReceived(
  45. const TLMessages &result,
  46. mtpRequestId requestId,
  47. const QString &nextToken);
  48. const not_null<History*> _history;
  49. base::flat_map<QString, TLMessages> _cacheOfStartByToken;
  50. Request _request;
  51. MsgId _offsetId;
  52. int _searchInHistoryRequest = 0; // Not real mtpRequestId.
  53. mtpRequestId _requestId = 0;
  54. rpl::event_stream<FoundMessages> _messagesFounds;
  55. };
  56. } // namespace Api