/* 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 "mtproto/sender.h" class ApiWrap; namespace Main { class Session; } // namespace Main namespace Api { class UserPrivacy final { public: enum class Key { PhoneNumber, AddedByPhone, LastSeen, Calls, Invites, CallsPeer2Peer, Forwards, ProfilePhoto, }; enum class Option { Everyone, Contacts, Nobody, }; struct Rule { Option option = Option::Everyone; std::vector> always; std::vector> never; bool ignoreAlways = false; bool ignoreNever = false; }; explicit UserPrivacy(not_null api); void save( Key key, const UserPrivacy::Rule &rule); void apply( mtpTypeId type, const MTPVector &rules, bool allLoaded); void reload(Key key); rpl::producer value(Key key); private: const not_null _session; void pushPrivacy(Key key, const MTPVector &rules); base::flat_map _privacySaveRequests; base::flat_map _privacyRequestIds; base::flat_map _privacyValues; std::map> _privacyChanges; MTP::Sender _api; }; } // namespace Api