tdesktop/Telegram/SourceFiles/main/main_session_settings.h

162 lines
4.7 KiB
C
Raw Normal View History

2019-08-23 13:52:59 +00:00
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include "data/data_auto_download.h"
2019-09-13 12:22:54 +00:00
#include "ui/rect_part.h"
2019-08-23 13:52:59 +00:00
namespace Support {
enum class SwitchSettings;
} // namespace Support
namespace ChatHelpers {
enum class SelectorTab;
} // namespace ChatHelpers
namespace Main {
class SessionSettings final {
2019-08-23 13:52:59 +00:00
public:
SessionSettings();
2019-08-23 13:52:59 +00:00
[[nodiscard]] QByteArray serialize() const;
2020-06-19 17:13:43 +00:00
void addFromSerialized(const QByteArray &serialized);
2019-08-23 13:52:59 +00:00
void setSupportSwitch(Support::SwitchSettings value) {
_supportSwitch = value;
2019-08-23 13:52:59 +00:00
}
[[nodiscard]] Support::SwitchSettings supportSwitch() const {
return _supportSwitch;
2019-08-23 13:52:59 +00:00
}
void setSupportFixChatsOrder(bool fix) {
_supportFixChatsOrder = fix;
2019-08-23 13:52:59 +00:00
}
[[nodiscard]] bool supportFixChatsOrder() const {
return _supportFixChatsOrder;
2019-08-23 13:52:59 +00:00
}
void setSupportTemplatesAutocomplete(bool enabled) {
_supportTemplatesAutocomplete = enabled;
2019-08-23 13:52:59 +00:00
}
[[nodiscard]] bool supportTemplatesAutocomplete() const {
return _supportTemplatesAutocomplete;
2019-08-23 13:52:59 +00:00
}
void setSupportChatsTimeSlice(int slice);
[[nodiscard]] int supportChatsTimeSlice() const;
[[nodiscard]] rpl::producer<int> supportChatsTimeSliceValue() const;
void setSupportAllSearchResults(bool all);
[[nodiscard]] bool supportAllSearchResults() const;
[[nodiscard]] rpl::producer<bool> supportAllSearchResultsValue() const;
void setSupportAllSilent(bool enabled) {
_supportAllSilent = enabled;
}
[[nodiscard]] bool supportAllSilent() const {
return _supportAllSilent;
}
2019-08-23 13:52:59 +00:00
[[nodiscard]] ChatHelpers::SelectorTab selectorTab() const {
return _selectorTab;
2019-08-23 13:52:59 +00:00
}
void setSelectorTab(ChatHelpers::SelectorTab tab) {
_selectorTab = tab;
2019-08-23 13:52:59 +00:00
}
void setGroupStickersSectionHidden(PeerId peerId) {
_groupStickersSectionHidden.insert(peerId);
2019-08-23 13:52:59 +00:00
}
[[nodiscard]] bool isGroupStickersSectionHidden(PeerId peerId) const {
return _groupStickersSectionHidden.contains(peerId);
2019-08-23 13:52:59 +00:00
}
void removeGroupStickersSectionHidden(PeerId peerId) {
_groupStickersSectionHidden.remove(peerId);
2019-08-23 13:52:59 +00:00
}
void setMediaLastPlaybackPosition(DocumentId id, crl::time time);
[[nodiscard]] crl::time mediaLastPlaybackPosition(DocumentId id) const;
2019-08-23 13:52:59 +00:00
[[nodiscard]] Data::AutoDownload::Full &autoDownload() {
return _autoDownload;
2019-08-23 13:52:59 +00:00
}
[[nodiscard]] const Data::AutoDownload::Full &autoDownload() const {
return _autoDownload;
2019-08-23 13:52:59 +00:00
}
void setArchiveCollapsed(bool collapsed);
[[nodiscard]] bool archiveCollapsed() const;
[[nodiscard]] rpl::producer<bool> archiveCollapsedChanges() const;
void setArchiveInMainMenu(bool inMainMenu);
[[nodiscard]] bool archiveInMainMenu() const;
[[nodiscard]] rpl::producer<bool> archiveInMainMenuChanges() const;
void setSkipArchiveInSearch(bool skip);
[[nodiscard]] bool skipArchiveInSearch() const;
[[nodiscard]] rpl::producer<bool> skipArchiveInSearchChanges() const;
[[nodiscard]] bool hadLegacyCallsPeerToPeerNobody() const {
return _hadLegacyCallsPeerToPeerNobody;
2020-01-29 08:58:07 +00:00
}
2020-01-28 12:41:08 +00:00
2022-10-28 05:19:27 +00:00
[[nodiscard]] MsgId hiddenPinnedMessageId(
PeerId peerId,
MsgId topicRootId = 0) const;
void setHiddenPinnedMessageId(
PeerId peerId,
MsgId topicRootId,
MsgId msgId);
[[nodiscard]] bool dialogsFiltersEnabled() const {
return _dialogsFiltersEnabled;
}
void setDialogsFiltersEnabled(bool value) {
_dialogsFiltersEnabled = value;
}
[[nodiscard]] bool photoEditorHintShown() const;
void incrementPhotoEditorHintShown();
[[nodiscard]] std::vector<TimeId> mutePeriods() const;
void addMutePeriod(TimeId period);
2019-08-23 13:52:59 +00:00
private:
static constexpr auto kDefaultSupportChatsLimitSlice = 7 * 24 * 60 * 60;
static constexpr auto kPhotoEditorHintMaxShowsCount = 5;
2022-10-28 05:19:27 +00:00
struct ThreadId {
PeerId peerId;
MsgId topicRootId;
friend inline constexpr auto operator<=>(
ThreadId,
ThreadId) = default;
};
ChatHelpers::SelectorTab _selectorTab; // per-window
base::flat_set<PeerId> _groupStickersSectionHidden;
bool _hadLegacyCallsPeerToPeerNobody = false;
Data::AutoDownload::Full _autoDownload;
rpl::variable<bool> _archiveCollapsed = false;
rpl::variable<bool> _archiveInMainMenu = false;
rpl::variable<bool> _skipArchiveInSearch = false;
std::vector<std::pair<DocumentId, crl::time>> _mediaLastPlaybackPosition;
2022-10-28 05:19:27 +00:00
base::flat_map<ThreadId, MsgId> _hiddenPinnedMessages;
bool _dialogsFiltersEnabled = false;
int _photoEditorHintShowsCount = 0;
std::vector<TimeId> _mutePeriods;
Support::SwitchSettings _supportSwitch;
bool _supportFixChatsOrder = true;
bool _supportTemplatesAutocomplete = true;
bool _supportAllSilent = false;
rpl::variable<int> _supportChatsTimeSlice
= kDefaultSupportChatsLimitSlice;
rpl::variable<bool> _supportAllSearchResults = false;
2019-08-23 13:52:59 +00:00
};
} // namespace Main