/* 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 */ #include "api/api_global_privacy.h" #include "apiwrap.h" #include "main/main_session.h" #include "main/main_account.h" #include "main/main_app_config.h" namespace Api { GlobalPrivacy::GlobalPrivacy(not_null api) : _session(&api->session()) , _api(&api->instance()) { } void GlobalPrivacy::reload(Fn callback) { if (callback) { _callbacks.push_back(std::move(callback)); } if (_requestId) { return; } _requestId = _api.request(MTPaccount_GetGlobalPrivacySettings( )).done([=](const MTPGlobalPrivacySettings &result) { _requestId = 0; apply(result); for (const auto &callback : base::take(_callbacks)) { callback(); } }).fail([=](const MTP::Error &error) { _requestId = 0; for (const auto &callback : base::take(_callbacks)) { callback(); } }).send(); _session->account().appConfig().value( ) | rpl::start_with_next([=] { _showArchiveAndMute = _session->account().appConfig().get( u"autoarchive_setting_available"_q, false); }, _session->lifetime()); } bool GlobalPrivacy::archiveAndMuteCurrent() const { return _archiveAndMute.current(); } rpl::producer GlobalPrivacy::archiveAndMute() const { return _archiveAndMute.value(); } rpl::producer GlobalPrivacy::showArchiveAndMute() const { using namespace rpl::mappers; return rpl::combine( archiveAndMute(), _showArchiveAndMute.value(), _1 || _2); } rpl::producer<> GlobalPrivacy::suggestArchiveAndMute() const { return _session->account().appConfig().suggestionRequested( u"AUTOARCHIVE_POPULAR"_q); } void GlobalPrivacy::dismissArchiveAndMuteSuggestion() { _session->account().appConfig().dismissSuggestion( u"AUTOARCHIVE_POPULAR"_q); } void GlobalPrivacy::update(bool archiveAndMute) { using Flag = MTPDglobalPrivacySettings::Flag; _api.request(_requestId).cancel(); _requestId = _api.request(MTPaccount_SetGlobalPrivacySettings( MTP_globalPrivacySettings( MTP_flags(Flag::f_archive_and_mute_new_noncontact_peers), MTP_bool(archiveAndMute)) )).done([=](const MTPGlobalPrivacySettings &result) { _requestId = 0; apply(result); }).fail([=](const MTP::Error &error) { _requestId = 0; }).send(); _archiveAndMute = archiveAndMute; } void GlobalPrivacy::apply(const MTPGlobalPrivacySettings &data) { data.match([&](const MTPDglobalPrivacySettings &data) { _archiveAndMute = data.varchive_and_mute_new_noncontact_peers() ? mtpIsTrue(*data.varchive_and_mute_new_noncontact_peers()) : false; }); } } // namespace Api