1 /* 2 This file is part of Telegram Desktop, 3 the official desktop application for the Telegram messaging service. 4 5 For license and copyright information please follow this link: 6 https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL 7 */ 8 #pragma once 9 10 #include "data/data_auto_download.h" 11 #include "ui/rect_part.h" 12 13 namespace Support { 14 enum class SwitchSettings; 15 } // namespace Support 16 17 namespace ChatHelpers { 18 enum class SelectorTab; 19 } // namespace ChatHelpers 20 21 namespace Main { 22 23 class SessionSettings final { 24 public: 25 SessionSettings(); 26 27 [[nodiscard]] QByteArray serialize() const; 28 void addFromSerialized(const QByteArray &serialized); 29 setSupportSwitch(Support::SwitchSettings value)30 void setSupportSwitch(Support::SwitchSettings value) { 31 _supportSwitch = value; 32 } supportSwitch()33 [[nodiscard]] Support::SwitchSettings supportSwitch() const { 34 return _supportSwitch; 35 } setSupportFixChatsOrder(bool fix)36 void setSupportFixChatsOrder(bool fix) { 37 _supportFixChatsOrder = fix; 38 } supportFixChatsOrder()39 [[nodiscard]] bool supportFixChatsOrder() const { 40 return _supportFixChatsOrder; 41 } setSupportTemplatesAutocomplete(bool enabled)42 void setSupportTemplatesAutocomplete(bool enabled) { 43 _supportTemplatesAutocomplete = enabled; 44 } supportTemplatesAutocomplete()45 [[nodiscard]] bool supportTemplatesAutocomplete() const { 46 return _supportTemplatesAutocomplete; 47 } 48 void setSupportChatsTimeSlice(int slice); 49 [[nodiscard]] int supportChatsTimeSlice() const; 50 [[nodiscard]] rpl::producer<int> supportChatsTimeSliceValue() const; 51 void setSupportAllSearchResults(bool all); 52 [[nodiscard]] bool supportAllSearchResults() const; 53 [[nodiscard]] rpl::producer<bool> supportAllSearchResultsValue() const; setSupportAllSilent(bool enabled)54 void setSupportAllSilent(bool enabled) { 55 _supportAllSilent = enabled; 56 } supportAllSilent()57 [[nodiscard]] bool supportAllSilent() const { 58 return _supportAllSilent; 59 } 60 selectorTab()61 [[nodiscard]] ChatHelpers::SelectorTab selectorTab() const { 62 return _selectorTab; 63 } setSelectorTab(ChatHelpers::SelectorTab tab)64 void setSelectorTab(ChatHelpers::SelectorTab tab) { 65 _selectorTab = tab; 66 } 67 setGroupStickersSectionHidden(PeerId peerId)68 void setGroupStickersSectionHidden(PeerId peerId) { 69 _groupStickersSectionHidden.insert(peerId); 70 } isGroupStickersSectionHidden(PeerId peerId)71 [[nodiscard]] bool isGroupStickersSectionHidden(PeerId peerId) const { 72 return _groupStickersSectionHidden.contains(peerId); 73 } removeGroupStickersSectionHidden(PeerId peerId)74 void removeGroupStickersSectionHidden(PeerId peerId) { 75 _groupStickersSectionHidden.remove(peerId); 76 } 77 78 void setMediaLastPlaybackPosition(DocumentId id, crl::time time); 79 [[nodiscard]] crl::time mediaLastPlaybackPosition(DocumentId id) const; 80 autoDownload()81 [[nodiscard]] Data::AutoDownload::Full &autoDownload() { 82 return _autoDownload; 83 } autoDownload()84 [[nodiscard]] const Data::AutoDownload::Full &autoDownload() const { 85 return _autoDownload; 86 } 87 88 void setArchiveCollapsed(bool collapsed); 89 [[nodiscard]] bool archiveCollapsed() const; 90 [[nodiscard]] rpl::producer<bool> archiveCollapsedChanges() const; 91 92 void setArchiveInMainMenu(bool inMainMenu); 93 [[nodiscard]] bool archiveInMainMenu() const; 94 [[nodiscard]] rpl::producer<bool> archiveInMainMenuChanges() const; 95 96 void setSkipArchiveInSearch(bool skip); 97 [[nodiscard]] bool skipArchiveInSearch() const; 98 [[nodiscard]] rpl::producer<bool> skipArchiveInSearchChanges() const; 99 hadLegacyCallsPeerToPeerNobody()100 [[nodiscard]] bool hadLegacyCallsPeerToPeerNobody() const { 101 return _hadLegacyCallsPeerToPeerNobody; 102 } 103 hiddenPinnedMessageId(PeerId peerId)104 [[nodiscard]] MsgId hiddenPinnedMessageId(PeerId peerId) const { 105 const auto i = _hiddenPinnedMessages.find(peerId); 106 return (i != end(_hiddenPinnedMessages)) ? i->second : 0; 107 } setHiddenPinnedMessageId(PeerId peerId,MsgId msgId)108 void setHiddenPinnedMessageId(PeerId peerId, MsgId msgId) { 109 if (msgId) { 110 _hiddenPinnedMessages[peerId] = msgId; 111 } else { 112 _hiddenPinnedMessages.remove(peerId); 113 } 114 } 115 dialogsFiltersEnabled()116 [[nodiscard]] bool dialogsFiltersEnabled() const { 117 return _dialogsFiltersEnabled; 118 } setDialogsFiltersEnabled(bool value)119 void setDialogsFiltersEnabled(bool value) { 120 _dialogsFiltersEnabled = value; 121 } 122 123 [[nodiscard]] bool photoEditorHintShown() const; 124 void incrementPhotoEditorHintShown(); 125 126 private: 127 static constexpr auto kDefaultSupportChatsLimitSlice = 7 * 24 * 60 * 60; 128 static constexpr auto kPhotoEditorHintMaxShowsCount = 5; 129 130 ChatHelpers::SelectorTab _selectorTab; // per-window 131 base::flat_set<PeerId> _groupStickersSectionHidden; 132 bool _hadLegacyCallsPeerToPeerNobody = false; 133 Data::AutoDownload::Full _autoDownload; 134 rpl::variable<bool> _archiveCollapsed = false; 135 rpl::variable<bool> _archiveInMainMenu = false; 136 rpl::variable<bool> _skipArchiveInSearch = false; 137 std::vector<std::pair<DocumentId, crl::time>> _mediaLastPlaybackPosition; 138 base::flat_map<PeerId, MsgId> _hiddenPinnedMessages; 139 bool _dialogsFiltersEnabled = false; 140 int _photoEditorHintShowsCount = 0; 141 142 Support::SwitchSettings _supportSwitch; 143 bool _supportFixChatsOrder = true; 144 bool _supportTemplatesAutocomplete = true; 145 bool _supportAllSilent = false; 146 rpl::variable<int> _supportChatsTimeSlice 147 = kDefaultSupportChatsLimitSlice; 148 rpl::variable<bool> _supportAllSearchResults = false; 149 150 }; 151 152 } // namespace Main 153