main_session_settings.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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 "data/data_auto_download.h"
  9. #include "ui/rect_part.h"
  10. namespace Support {
  11. enum class SwitchSettings;
  12. } // namespace Support
  13. namespace ChatHelpers {
  14. enum class SelectorTab;
  15. } // namespace ChatHelpers
  16. namespace Main {
  17. class SessionSettings final {
  18. public:
  19. SessionSettings();
  20. [[nodiscard]] QByteArray serialize() const;
  21. void addFromSerialized(const QByteArray &serialized);
  22. void setSupportSwitch(Support::SwitchSettings value) {
  23. _supportSwitch = value;
  24. }
  25. [[nodiscard]] Support::SwitchSettings supportSwitch() const {
  26. return _supportSwitch;
  27. }
  28. void setSupportFixChatsOrder(bool fix) {
  29. _supportFixChatsOrder = fix;
  30. }
  31. [[nodiscard]] bool supportFixChatsOrder() const {
  32. return _supportFixChatsOrder;
  33. }
  34. void setSupportTemplatesAutocomplete(bool enabled) {
  35. _supportTemplatesAutocomplete = enabled;
  36. }
  37. [[nodiscard]] bool supportTemplatesAutocomplete() const {
  38. return _supportTemplatesAutocomplete;
  39. }
  40. void setSupportChatsTimeSlice(int slice);
  41. [[nodiscard]] int supportChatsTimeSlice() const;
  42. [[nodiscard]] rpl::producer<int> supportChatsTimeSliceValue() const;
  43. void setSupportAllSearchResults(bool all);
  44. [[nodiscard]] bool supportAllSearchResults() const;
  45. [[nodiscard]] rpl::producer<bool> supportAllSearchResultsValue() const;
  46. void setSupportAllSilent(bool enabled) {
  47. _supportAllSilent = enabled;
  48. }
  49. [[nodiscard]] bool supportAllSilent() const {
  50. return _supportAllSilent;
  51. }
  52. [[nodiscard]] ChatHelpers::SelectorTab selectorTab() const {
  53. return _selectorTab;
  54. }
  55. void setSelectorTab(ChatHelpers::SelectorTab tab) {
  56. _selectorTab = tab;
  57. }
  58. void setGroupStickersSectionHidden(PeerId peerId) {
  59. _groupStickersSectionHidden.insert(peerId);
  60. }
  61. [[nodiscard]] bool isGroupStickersSectionHidden(PeerId peerId) const {
  62. return _groupStickersSectionHidden.contains(peerId);
  63. }
  64. void removeGroupStickersSectionHidden(PeerId peerId) {
  65. _groupStickersSectionHidden.remove(peerId);
  66. }
  67. void setGroupEmojiSectionHidden(PeerId peerId) {
  68. _groupEmojiSectionHidden.insert(peerId);
  69. }
  70. [[nodiscard]] bool isGroupEmojiSectionHidden(PeerId peerId) const {
  71. return _groupEmojiSectionHidden.contains(peerId);
  72. }
  73. void removeGroupEmojiSectionHidden(PeerId peerId) {
  74. _groupEmojiSectionHidden.remove(peerId);
  75. }
  76. [[nodiscard]] Data::AutoDownload::Full &autoDownload() {
  77. return _autoDownload;
  78. }
  79. [[nodiscard]] const Data::AutoDownload::Full &autoDownload() const {
  80. return _autoDownload;
  81. }
  82. void setArchiveCollapsed(bool collapsed);
  83. [[nodiscard]] bool archiveCollapsed() const;
  84. [[nodiscard]] rpl::producer<bool> archiveCollapsedChanges() const;
  85. void setArchiveInMainMenu(bool inMainMenu);
  86. [[nodiscard]] bool archiveInMainMenu() const;
  87. [[nodiscard]] rpl::producer<bool> archiveInMainMenuChanges() const;
  88. void setSkipArchiveInSearch(bool skip);
  89. [[nodiscard]] bool skipArchiveInSearch() const;
  90. [[nodiscard]] rpl::producer<bool> skipArchiveInSearchChanges() const;
  91. [[nodiscard]] bool hadLegacyCallsPeerToPeerNobody() const {
  92. return _hadLegacyCallsPeerToPeerNobody;
  93. }
  94. [[nodiscard]] MsgId hiddenPinnedMessageId(
  95. PeerId peerId,
  96. MsgId topicRootId = 0) const;
  97. void setHiddenPinnedMessageId(
  98. PeerId peerId,
  99. MsgId topicRootId,
  100. MsgId msgId);
  101. [[nodiscard]] bool dialogsFiltersEnabled() const {
  102. return _dialogsFiltersEnabled;
  103. }
  104. void setDialogsFiltersEnabled(bool value) {
  105. _dialogsFiltersEnabled = value;
  106. }
  107. [[nodiscard]] bool photoEditorHintShown() const;
  108. void incrementPhotoEditorHintShown();
  109. [[nodiscard]] std::vector<TimeId> mutePeriods() const;
  110. void addMutePeriod(TimeId period);
  111. [[nodiscard]] TimeId lastNonPremiumLimitDownload() const {
  112. return _lastNonPremiumLimitDownload;
  113. }
  114. [[nodiscard]] TimeId lastNonPremiumLimitUpload() const {
  115. return _lastNonPremiumLimitUpload;
  116. }
  117. void setLastNonPremiumLimitDownload(TimeId when) {
  118. _lastNonPremiumLimitDownload = when;
  119. }
  120. void setLastNonPremiumLimitUpload(TimeId when) {
  121. _lastNonPremiumLimitUpload = when;
  122. }
  123. private:
  124. static constexpr auto kDefaultSupportChatsLimitSlice = 7 * 24 * 60 * 60;
  125. static constexpr auto kPhotoEditorHintMaxShowsCount = 5;
  126. struct ThreadId {
  127. PeerId peerId;
  128. MsgId topicRootId;
  129. friend inline constexpr auto operator<=>(
  130. ThreadId,
  131. ThreadId) = default;
  132. };
  133. ChatHelpers::SelectorTab _selectorTab; // per-window
  134. base::flat_set<PeerId> _groupStickersSectionHidden;
  135. base::flat_set<PeerId> _groupEmojiSectionHidden;
  136. bool _hadLegacyCallsPeerToPeerNobody = false;
  137. Data::AutoDownload::Full _autoDownload;
  138. rpl::variable<bool> _archiveCollapsed = false;
  139. rpl::variable<bool> _archiveInMainMenu = false;
  140. rpl::variable<bool> _skipArchiveInSearch = false;
  141. base::flat_map<ThreadId, MsgId> _hiddenPinnedMessages;
  142. bool _dialogsFiltersEnabled = false;
  143. int _photoEditorHintShowsCount = 0;
  144. std::vector<TimeId> _mutePeriods;
  145. TimeId _lastNonPremiumLimitDownload = 0;
  146. TimeId _lastNonPremiumLimitUpload = 0;
  147. Support::SwitchSettings _supportSwitch;
  148. bool _supportFixChatsOrder = true;
  149. bool _supportTemplatesAutocomplete = true;
  150. bool _supportAllSilent = false;
  151. rpl::variable<int> _supportChatsTimeSlice
  152. = kDefaultSupportChatsLimitSlice;
  153. rpl::variable<bool> _supportAllSearchResults = false;
  154. };
  155. } // namespace Main