diff --git a/Telegram/Resources/scheme.tl b/Telegram/Resources/scheme.tl index f5796d78ef..3a72d4d5c8 100644 --- a/Telegram/Resources/scheme.tl +++ b/Telegram/Resources/scheme.tl @@ -467,7 +467,7 @@ upload.fileCdnRedirect#f18cda44 dc_id:int file_token:bytes encryption_key:bytes dcOption#18b7a10d flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true cdn:flags.3?true static:flags.4?true id:int ip_address:string port:int secret:flags.10?bytes = DcOption; -config#86b5778e flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true ignore_phone_entities:flags.5?true revoke_pm_inbox:flags.6?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int stickers_faved_limit:int channels_read_media_period:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string suggested_lang_code:flags.2?string lang_pack_version:flags.2?int = Config; +config#eb7bb160 flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true ignore_phone_entities:flags.5?true revoke_pm_inbox:flags.6?true blocked_mode:flags.8?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int stickers_faved_limit:int channels_read_media_period:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string autoupdate_url_prefix:flags.7?string suggested_lang_code:flags.2?string lang_pack_version:flags.2?int = Config; nearestDc#8e1a1775 country:string this_dc:int nearest_dc:int = NearestDc; diff --git a/Telegram/SourceFiles/facades.cpp b/Telegram/SourceFiles/facades.cpp index acde25cd93..90bd0096a1 100644 --- a/Telegram/SourceFiles/facades.cpp +++ b/Telegram/SourceFiles/facades.cpp @@ -528,6 +528,7 @@ struct Data { int32 CallConnectTimeoutMs = 30000; int32 CallPacketTimeoutMs = 10000; bool PhoneCallsEnabled = true; + bool BlockedMode = false; base::Observable PhoneCallsEnabledChanged; HiddenPinnedMessagesMap HiddenPinnedMessages; @@ -651,6 +652,7 @@ DefineVar(Global, int32, CallRingTimeoutMs); DefineVar(Global, int32, CallConnectTimeoutMs); DefineVar(Global, int32, CallPacketTimeoutMs); DefineVar(Global, bool, PhoneCallsEnabled); +DefineVar(Global, bool, BlockedMode); DefineRefVar(Global, base::Observable, PhoneCallsEnabledChanged); DefineVar(Global, HiddenPinnedMessagesMap, HiddenPinnedMessages); diff --git a/Telegram/SourceFiles/facades.h b/Telegram/SourceFiles/facades.h index 697c47d8b5..357c287590 100644 --- a/Telegram/SourceFiles/facades.h +++ b/Telegram/SourceFiles/facades.h @@ -345,6 +345,7 @@ DeclareVar(int32, CallRingTimeoutMs); DeclareVar(int32, CallConnectTimeoutMs); DeclareVar(int32, CallPacketTimeoutMs); DeclareVar(bool, PhoneCallsEnabled); +DeclareVar(bool, BlockedMode); DeclareRefVar(base::Observable, PhoneCallsEnabledChanged); typedef QMap HiddenPinnedMessagesMap; diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.cpp b/Telegram/SourceFiles/mtproto/mtp_instance.cpp index 3a1609556d..fceb1d5703 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.cpp +++ b/Telegram/SourceFiles/mtproto/mtp_instance.cpp @@ -26,6 +26,7 @@ namespace MTP { namespace { constexpr auto kConfigBecomesOldIn = 2 * 60 * TimeMs(1000); +constexpr auto kConfigBecomesOldForBlockedIn = 8 * TimeMs(1000); } // namespace @@ -126,6 +127,7 @@ private: void logoutGuestDcs(); bool logoutGuestDone(mtpRequestId requestId); + void requestConfigIfExpired(); void configLoadDone(const MTPConfig &result); bool configLoadFail(const RPCError &error); @@ -160,6 +162,7 @@ private: QString _userPhone; mtpRequestId _cdnConfigLoadRequestId = 0; TimeMs _lastConfigLoadedTime = 0; + TimeMs _configExpiresAt = 0; std::map _keysForWrite; mutable QReadWriteLock _keysForWriteLock; @@ -303,7 +306,22 @@ void Instance::Private::setUserPhone(const QString &phone) { } void Instance::Private::requestConfigIfOld() { - if (getms(true) - _lastConfigLoadedTime >= kConfigBecomesOldIn) { + const auto timeout = Global::BlockedMode() + ? kConfigBecomesOldForBlockedIn + : kConfigBecomesOldIn; + if (getms(true) - _lastConfigLoadedTime >= timeout) { + requestConfig(); + } +} + +void Instance::Private::requestConfigIfExpired() { + const auto requestIn = (_configExpiresAt - getms(true)); + if (requestIn > 0) { + App::CallDelayed( + std::min(requestIn, 3600 * TimeMs(1000)), + _instance, + [=] { requestConfigIfExpired(); }); + } else { requestConfig(); } } @@ -639,10 +657,16 @@ void Instance::Private::configLoadDone(const MTPConfig &result) { Global::SetPhoneCallsEnabled(data.is_phonecalls_enabled()); Global::RefPhoneCallsEnabledChanged().notify(); } + Global::SetBlockedMode(data.is_blocked_mode()); + Lang::CurrentCloudManager().setSuggestedLanguage(data.has_suggested_lang_code() ? qs(data.vsuggested_lang_code) : QString()); Local::writeSettings(); + _configExpiresAt = getms(true) + + (data.vexpires.v - unixtime()) * TimeMs(1000); + requestConfigIfExpired(); + emit _instance->configLoaded(); }