window_separate_id.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. class PeerData;
  9. namespace Data {
  10. class Thread;
  11. class Folder;
  12. class Forum;
  13. class SavedSublist;
  14. } // namespace Data
  15. namespace Main {
  16. class Account;
  17. class Session;
  18. } // namespace Main
  19. namespace Window {
  20. enum class SeparateType {
  21. Primary,
  22. Archive,
  23. Chat,
  24. Forum,
  25. SavedSublist,
  26. SharedMedia,
  27. };
  28. enum class SeparateSharedMediaType {
  29. None,
  30. Photos,
  31. Videos,
  32. Files,
  33. Audio,
  34. Links,
  35. Voices,
  36. GIF,
  37. };
  38. struct SeparateSharedMedia {
  39. SeparateSharedMediaType type = SeparateSharedMediaType::None;
  40. not_null<PeerData*> peer;
  41. MsgId topicRootId = MsgId();
  42. };
  43. struct SeparateId {
  44. SeparateId(std::nullptr_t);
  45. SeparateId(not_null<Main::Account*> account);
  46. SeparateId(SeparateType type, not_null<Main::Session*> session);
  47. SeparateId(SeparateType type, not_null<Data::Thread*> thread);
  48. SeparateId(not_null<Data::Thread*> thread);
  49. SeparateId(not_null<PeerData*> peer);
  50. SeparateId(SeparateSharedMedia data);
  51. SeparateType type = SeparateType::Primary;
  52. SeparateSharedMediaType sharedMedia = SeparateSharedMediaType::None;
  53. Main::Account *account = nullptr;
  54. Data::Thread *thread = nullptr; // For types except Main and Archive.
  55. PeerData *sharedMediaDataPeer = nullptr;
  56. MsgId sharedMediaDataTopicRootId = MsgId();
  57. [[nodiscard]] bool valid() const {
  58. return account != nullptr;
  59. }
  60. explicit operator bool() const {
  61. return valid();
  62. }
  63. [[nodiscard]] bool primary() const;
  64. [[nodiscard]] Data::Thread *chat() const;
  65. [[nodiscard]] Data::Forum *forum() const;
  66. [[nodiscard]] Data::Folder *folder() const;
  67. [[nodiscard]] Data::SavedSublist *sublist() const;
  68. [[nodiscard]] PeerData *sharedMediaPeer() const;
  69. [[nodiscard]] MsgId sharedMediaTopicRootId() const;
  70. [[nodiscard]] bool hasChatsList() const;
  71. friend inline auto operator<=>(
  72. const SeparateId &,
  73. const SeparateId &) = default;
  74. friend inline bool operator==(
  75. const SeparateId &,
  76. const SeparateId &) = default;
  77. };
  78. } // namespace Window