103 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
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<ApiWrap*> api)
 | 
						|
: _session(&api->session())
 | 
						|
, _api(&api->instance()) {
 | 
						|
}
 | 
						|
 | 
						|
void GlobalPrivacy::reload(Fn<void()> 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 RPCError &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<bool>(
 | 
						|
			u"autoarchive_setting_available"_q,
 | 
						|
			false);
 | 
						|
	}, _session->lifetime());
 | 
						|
}
 | 
						|
 | 
						|
bool GlobalPrivacy::archiveAndMuteCurrent() const {
 | 
						|
	return _archiveAndMute.current();
 | 
						|
}
 | 
						|
 | 
						|
rpl::producer<bool> GlobalPrivacy::archiveAndMute() const {
 | 
						|
	return _archiveAndMute.value();
 | 
						|
}
 | 
						|
 | 
						|
rpl::producer<bool> 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 RPCError &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
 |