diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 35a1f8513e..25d8914997 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -491,7 +491,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_connection_save" = "Save"; "lng_proxy_settings" = "Proxy settings"; -"lng_proxy_use" = "Use proxy"; +"lng_proxy_disable" = "Disable proxy"; +"lng_proxy_use_system_settings" = "Use system proxy settings"; +"lng_proxy_use_custom" = "Use custom proxy"; "lng_proxy_use_for_calls" = "Use proxy for calls"; "lng_proxy_about" = "Proxy servers may be helpful in accessing Telegram if there is no connection in a specific region."; "lng_proxy_add" = "Add proxy"; diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 6230b4ee06..6448329526 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -195,11 +195,8 @@ void ApiWrap::refreshProxyPromotion() { getProxyPromotionDelayed(now, next); return; } - const auto proxy = Global::UseProxy() - ? Global::SelectedProxy() - : ProxyData(); const auto key = [&]() -> std::pair { - if (!Global::UseProxy()) { + if (Global::ProxySettings() != ProxyData::Settings::Enabled) { return {}; } const auto &proxy = Global::SelectedProxy(); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 8330c2d5bf..9038f12737 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -362,7 +362,7 @@ void Application::refreshGlobalProxy() { #ifndef TDESKTOP_DISABLE_NETWORK_PROXY const auto proxy = [&] { if (Global::started()) { - return Global::UseProxy() + return (Global::ProxySettings() == ProxyData::Settings::Enabled) ? Global::SelectedProxy() : ProxyData(); } @@ -372,8 +372,11 @@ void Application::refreshGlobalProxy() { || proxy.type == ProxyData::Type::Http) { QNetworkProxy::setApplicationProxy( ToNetworkProxy(ToDirectIpProxy(proxy))); - } else { + } else if (!Global::started() + || Global::ProxySettings() == ProxyData::Settings::System) { QNetworkProxyFactory::setUseSystemConfiguration(true); + } else { + QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy); } #endif // TDESKTOP_DISABLE_NETWORK_PROXY } diff --git a/Telegram/SourceFiles/boxes/connection_box.cpp b/Telegram/SourceFiles/boxes/connection_box.cpp index 876ad3af78..8d7110ab79 100644 --- a/Telegram/SourceFiles/boxes/connection_box.cpp +++ b/Telegram/SourceFiles/boxes/connection_box.cpp @@ -110,7 +110,7 @@ private: not_null _controller; QPointer _tryIPv6; - QPointer _useProxy; + std::shared_ptr> _proxySettings; QPointer> _proxyForCalls; QPointer _about; base::unique_qptr _noRows; @@ -504,10 +504,29 @@ void ProxiesBox::setupContent() { lang(lng_connection_try_ipv6), Global::TryIPv6()), st::proxyTryIPv6Padding); - _useProxy = inner->add( - object_ptr( + _proxySettings + = std::make_shared>( + Global::ProxySettings()); + inner->add( + object_ptr>( inner, - lang(lng_proxy_use)), + _proxySettings, + ProxyData::Settings::Disabled, + lang(lng_proxy_disable)), + st::proxyUsePadding); + inner->add( + object_ptr>( + inner, + _proxySettings, + ProxyData::Settings::System, + lang(lng_proxy_use_system_settings)), + st::proxyUsePadding); + inner->add( + object_ptr>( + inner, + _proxySettings, + ProxyData::Settings::Enabled, + lang(lng_proxy_use_custom)), st::proxyUsePadding); _proxyForCalls = inner->add( object_ptr>( @@ -543,9 +562,9 @@ void ProxiesBox::setupContent() { inner, st::proxyRowPadding.bottom())); - subscribe(_useProxy->checkedChanged, [=](bool checked) { - if (!_controller->setProxyEnabled(checked)) { - _useProxy->setChecked(false); + _proxySettings->setChangedCallback([=](ProxyData::Settings value) { + if (!_controller->setProxySettings(value)) { + _proxySettings->setValue(Global::ProxySettings()); addNewProxy(); } refreshProxyForCalls(); @@ -553,11 +572,11 @@ void ProxiesBox::setupContent() { subscribe(_tryIPv6->checkedChanged, [=](bool checked) { _controller->setTryIPv6(checked); }); - _controller->proxyEnabledValue( - ) | rpl::start_with_next([=](bool enabled) { - _useProxy->setChecked(enabled); - }, _useProxy->lifetime()); - _useProxy->finishAnimating(); + _controller->proxySettingsValue( + ) | rpl::start_with_next([=](ProxyData::Settings value) { + _proxySettings->setValue(value); + }, inner->lifetime()); + subscribe(_proxyForCalls->entity()->checkedChanged, [=](bool checked) { _controller->setProxyForCalls(checked); }); @@ -588,7 +607,8 @@ void ProxiesBox::refreshProxyForCalls() { return; } _proxyForCalls->toggle( - _useProxy->checked() && _currentProxySupportsCallsId != 0, + (_proxySettings->value() == ProxyData::Settings::Enabled + && _currentProxySupportsCallsId != 0), anim::type::normal); } @@ -1032,7 +1052,7 @@ ProxiesBoxController::ProxiesBoxController() }) | ranges::to_vector; subscribe(Global::RefConnectionTypeChanged(), [=] { - _proxyEnabledChanges.fire_copy(Global::UseProxy()); + _proxySettingsChanges.fire_copy(Global::ProxySettings()); const auto i = findByProxy(Global::SelectedProxy()); if (i != end(_list)) { updateView(*i); @@ -1074,7 +1094,9 @@ void ProxiesBoxController::ShowApplyConfirmation( if (ranges::find(proxies, proxy) == end(proxies)) { proxies.push_back(proxy); } - Messenger::Instance().setCurrentProxy(proxy, true); + Messenger::Instance().setCurrentProxy( + proxy, + ProxyData::Settings::Enabled); Local::writeSettings(); if (const auto strong = box->data()) { strong->closeBox(); @@ -1083,9 +1105,10 @@ void ProxiesBoxController::ShowApplyConfirmation( } } -rpl::producer ProxiesBoxController::proxyEnabledValue() const { - return _proxyEnabledChanges.events_starting_with_copy( - Global::UseProxy() +auto ProxiesBoxController::proxySettingsValue() const +-> rpl::producer { + return _proxySettingsChanges.events_starting_with_copy( + Global::ProxySettings() ) | rpl::distinct_until_changed(); } @@ -1227,7 +1250,8 @@ void ProxiesBoxController::shareItem(int id) { void ProxiesBoxController::applyItem(int id) { auto item = findById(id); - if (Global::UseProxy() && Global::SelectedProxy() == item->data) { + if ((Global::ProxySettings() == ProxyData::Settings::Enabled) + && Global::SelectedProxy() == item->data) { return; } else if (item->deleted) { return; @@ -1235,7 +1259,9 @@ void ProxiesBoxController::applyItem(int id) { auto j = findByProxy(Global::SelectedProxy()); - Messenger::Instance().setCurrentProxy(item->data, true); + Messenger::Instance().setCurrentProxy( + item->data, + ProxyData::Settings::Enabled); saveDelayed(); if (j != end(_list)) { @@ -1254,11 +1280,11 @@ void ProxiesBoxController::setDeleted(int id, bool deleted) { if (item->data == Global::SelectedProxy()) { _lastSelectedProxy = base::take(Global::RefSelectedProxy()); - if (Global::UseProxy()) { + if (Global::ProxySettings() == ProxyData::Settings::Enabled) { _lastSelectedProxyUsed = true; Messenger::Instance().setCurrentProxy( ProxyData(), - false); + ProxyData::Settings::System); saveDelayed(); } else { _lastSelectedProxyUsed = false; @@ -1278,12 +1304,12 @@ void ProxiesBoxController::setDeleted(int id, bool deleted) { } if (!Global::SelectedProxy() && _lastSelectedProxy == item->data) { - Assert(!Global::UseProxy()); + Assert(Global::ProxySettings() != ProxyData::Settings::Enabled); if (base::take(_lastSelectedProxyUsed)) { Messenger::Instance().setCurrentProxy( base::take(_lastSelectedProxy), - true); + ProxyData::Settings::Enabled); } else { Global::SetSelectedProxy(base::take(_lastSelectedProxy)); } @@ -1372,10 +1398,10 @@ void ProxiesBoxController::addNewItem(const ProxyData &proxy) { applyItem(_list.back().id); } -bool ProxiesBoxController::setProxyEnabled(bool enabled) { - if (Global::UseProxy() == enabled) { +bool ProxiesBoxController::setProxySettings(ProxyData::Settings value) { + if (Global::ProxySettings() == value) { return true; - } else if (enabled) { + } else if (value == ProxyData::Settings::Enabled) { if (Global::ProxiesList().empty()) { return false; } else if (!Global::SelectedProxy()) { @@ -1388,7 +1414,7 @@ bool ProxiesBoxController::setProxyEnabled(bool enabled) { } Messenger::Instance().setCurrentProxy( Global::SelectedProxy(), - enabled); + value); saveDelayed(); return true; } @@ -1398,7 +1424,8 @@ void ProxiesBoxController::setProxyForCalls(bool enabled) { return; } Global::SetUseProxyForCalls(enabled); - if (Global::UseProxy() && Global::SelectedProxy().supportsCalls()) { + if ((Global::ProxySettings() == ProxyData::Settings::Enabled) + && Global::SelectedProxy().supportsCalls()) { Global::RefConnectionTypeChanged().notify(); } saveDelayed(); @@ -1438,7 +1465,8 @@ void ProxiesBoxController::updateView(const Item &item) { Unexpected("Proxy type in ProxiesBoxController::updateView."); }(); const auto state = [&] { - if (!selected || !Global::UseProxy()) { + if (!selected + || (Global::ProxySettings() != ProxyData::Settings::Enabled)) { return item.state; } else if (MTP::dcstate() == MTP::ConnectedState) { return ItemState::Online; diff --git a/Telegram/SourceFiles/boxes/connection_box.h b/Telegram/SourceFiles/boxes/connection_box.h index 5ffeac7756..6958ded70a 100644 --- a/Telegram/SourceFiles/boxes/connection_box.h +++ b/Telegram/SourceFiles/boxes/connection_box.h @@ -74,10 +74,10 @@ public: void applyItem(int id); object_ptr editItemBox(int id); object_ptr addNewItemBox(); - bool setProxyEnabled(bool enabled); + bool setProxySettings(ProxyData::Settings value); void setProxyForCalls(bool enabled); void setTryIPv6(bool enabled); - rpl::producer proxyEnabledValue() const; + rpl::producer proxySettingsValue() const; rpl::producer views() const; @@ -117,7 +117,7 @@ private: std::vector _list; rpl::event_stream _views; base::Timer _saveTimer; - rpl::event_stream _proxyEnabledChanges; + rpl::event_stream _proxySettingsChanges; ProxyData _lastSelectedProxy; bool _lastSelectedProxyUsed = false; diff --git a/Telegram/SourceFiles/calls/calls_call.cpp b/Telegram/SourceFiles/calls/calls_call.cpp index e3624105c7..7a9bae5ae6 100644 --- a/Telegram/SourceFiles/calls/calls_call.cpp +++ b/Telegram/SourceFiles/calls/calls_call.cpp @@ -597,7 +597,8 @@ void Call::createAndStartController(const MTPDphoneCall &call) { _controller->SetConfig(config); _controller->SetEncryptionKey(reinterpret_cast(_authKey.data()), (_type == Type::Outgoing)); _controller->SetCallbacks(callbacks); - if (Global::UseProxy() && Global::UseProxyForCalls()) { + if (Global::UseProxyForCalls() + && (Global::ProxySettings() == ProxyData::Settings::Enabled)) { const auto proxy = Global::SelectedProxy(); if (proxy.supportsCalls()) { Assert(proxy.type == ProxyData::Type::Socks5); diff --git a/Telegram/SourceFiles/core/utils.h b/Telegram/SourceFiles/core/utils.h index 4bd51a30ba..678707f699 100644 --- a/Telegram/SourceFiles/core/utils.h +++ b/Telegram/SourceFiles/core/utils.h @@ -334,6 +334,11 @@ enum DBIWorkMode { }; struct ProxyData { + enum class Settings { + System, + Enabled, + Disabled, + }; enum class Type { None, Socks5, diff --git a/Telegram/SourceFiles/facades.cpp b/Telegram/SourceFiles/facades.cpp index 65a7d707f9..2784f9def9 100644 --- a/Telegram/SourceFiles/facades.cpp +++ b/Telegram/SourceFiles/facades.cpp @@ -662,7 +662,7 @@ struct Data { bool TryIPv6 = (cPlatform() == dbipWindows) ? false : true; std::vector ProxiesList; ProxyData SelectedProxy; - bool UseProxy = false; + ProxyData::Settings ProxySettings = ProxyData::Settings::System; bool UseProxyForCalls = false; base::Observable ConnectionTypeChanged; @@ -791,7 +791,7 @@ DefineVar(Global, bool, NotificationsDemoIsShown); DefineVar(Global, bool, TryIPv6); DefineVar(Global, std::vector, ProxiesList); DefineVar(Global, ProxyData, SelectedProxy); -DefineVar(Global, bool, UseProxy); +DefineVar(Global, ProxyData::Settings, ProxySettings); DefineVar(Global, bool, UseProxyForCalls); DefineRefVar(Global, base::Observable, ConnectionTypeChanged); diff --git a/Telegram/SourceFiles/facades.h b/Telegram/SourceFiles/facades.h index 8f58b0bcf0..e1d2d1f30b 100644 --- a/Telegram/SourceFiles/facades.h +++ b/Telegram/SourceFiles/facades.h @@ -317,7 +317,7 @@ DeclareVar(bool, NotificationsDemoIsShown); DeclareVar(bool, TryIPv6); DeclareVar(std::vector, ProxiesList); DeclareVar(ProxyData, SelectedProxy); -DeclareVar(bool, UseProxy); +DeclareVar(ProxyData::Settings, ProxySettings); DeclareVar(bool, UseProxyForCalls); DeclareRefVar(base::Observable, ConnectionTypeChanged); diff --git a/Telegram/SourceFiles/messenger.cpp b/Telegram/SourceFiles/messenger.cpp index 2b6113e1d3..8ab59e4d65 100644 --- a/Telegram/SourceFiles/messenger.cpp +++ b/Telegram/SourceFiles/messenger.cpp @@ -283,18 +283,19 @@ bool Messenger::eventFilter(QObject *object, QEvent *e) { void Messenger::setCurrentProxy( const ProxyData &proxy, - bool enabled) { + ProxyData::Settings settings) { const auto key = [&](const ProxyData &proxy) { if (proxy.type == ProxyData::Type::Mtproto) { return std::make_pair(proxy.host, proxy.port); } return std::make_pair(QString(), uint32(0)); }; - const auto previousKey = key(Global::UseProxy() - ? Global::SelectedProxy() - : ProxyData()); + const auto previousKey = key( + (Global::ProxySettings() == ProxyData::Settings::Enabled + ? Global::SelectedProxy() + : ProxyData())); Global::SetSelectedProxy(proxy); - Global::SetUseProxy(enabled); + Global::SetProxySettings(settings); Sandbox::refreshGlobalProxy(); if (_mtproto) { _mtproto->restart(); @@ -309,10 +310,16 @@ void Messenger::setCurrentProxy( } void Messenger::badMtprotoConfigurationError() { - if (Global::UseProxy() && !_badProxyDisableBox) { + if (Global::ProxySettings() == ProxyData::Settings::Enabled + && !_badProxyDisableBox) { + const auto disableCallback = [=] { + setCurrentProxy( + Global::SelectedProxy(), + ProxyData::Settings::System); + }; _badProxyDisableBox = Ui::show(Box( Lang::Hard::ProxyConfigError(), - [=] { setCurrentProxy(Global::SelectedProxy(), false); })); + disableCallback)); } } diff --git a/Telegram/SourceFiles/messenger.h b/Telegram/SourceFiles/messenger.h index b6e13cc4d8..2f8ddadf02 100644 --- a/Telegram/SourceFiles/messenger.h +++ b/Telegram/SourceFiles/messenger.h @@ -107,7 +107,9 @@ public: MTP::DcOptions *dcOptions() { return _dcOptions.get(); } - void setCurrentProxy(const ProxyData &proxy, bool enabled); + void setCurrentProxy( + const ProxyData &proxy, + ProxyData::Settings settings); void badMtprotoConfigurationError(); // Set from legacy storage. diff --git a/Telegram/SourceFiles/mtproto/config_loader.cpp b/Telegram/SourceFiles/mtproto/config_loader.cpp index eddde21d46..ee5f6c0a05 100644 --- a/Telegram/SourceFiles/mtproto/config_loader.cpp +++ b/Telegram/SourceFiles/mtproto/config_loader.cpp @@ -102,7 +102,7 @@ void ConfigLoader::enumerate() { } void ConfigLoader::refreshSpecialLoader() { - if (Global::UseProxy()) { + if (Global::ProxySettings() == ProxyData::Settings::Enabled) { _specialLoader.reset(); return; } @@ -157,7 +157,7 @@ void ConfigLoader::addSpecialEndpoint( void ConfigLoader::sendSpecialRequest() { terminateSpecialRequest(); - if (Global::UseProxy()) { + if (Global::ProxySettings() == ProxyData::Settings::Enabled) { _specialLoader.reset(); return; } diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.cpp b/Telegram/SourceFiles/mtproto/mtp_instance.cpp index 21a56e74b0..a900d37ca6 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.cpp +++ b/Telegram/SourceFiles/mtproto/mtp_instance.cpp @@ -329,7 +329,8 @@ void Instance::Private::applyDomainIps( for (auto &proxy : Global::RefProxiesList()) { applyToProxy(proxy); } - if (applyToProxy(Global::RefSelectedProxy()) && Global::UseProxy()) { + if (applyToProxy(Global::RefSelectedProxy()) + && (Global::ProxySettings() == ProxyData::Settings::Enabled)) { for (auto &session : _sessions) { session.second->refreshOptions(); } @@ -358,7 +359,8 @@ void Instance::Private::setGoodProxyDomain( for (auto &proxy : Global::RefProxiesList()) { applyToProxy(proxy); } - if (applyToProxy(Global::RefSelectedProxy()) && Global::UseProxy()) { + if (applyToProxy(Global::RefSelectedProxy()) + && (Global::ProxySettings() == ProxyData::Settings::Enabled)) { Sandbox::refreshGlobalProxy(); } } diff --git a/Telegram/SourceFiles/mtproto/session.cpp b/Telegram/SourceFiles/mtproto/session.cpp index b055c382f9..be7573c10c 100644 --- a/Telegram/SourceFiles/mtproto/session.cpp +++ b/Telegram/SourceFiles/mtproto/session.cpp @@ -171,9 +171,10 @@ void Session::restart() { void Session::refreshOptions() { const auto &proxy = Global::SelectedProxy(); - const auto proxyType = Global::UseProxy() - ? proxy.type - : ProxyData::Type::None; + const auto proxyType = + (Global::ProxySettings() == ProxyData::Settings::Enabled + ? proxy.type + : ProxyData::Type::None); const auto useTcp = (proxyType != ProxyData::Type::Http); const auto useHttp = (proxyType != ProxyData::Type::Mtproto); const auto useIPv4 = true; @@ -182,7 +183,9 @@ void Session::refreshOptions() { _instance->systemLangCode(), _instance->cloudLangCode(), _instance->langPackName(), - Global::UseProxy() ? proxy : ProxyData(), + (Global::ProxySettings() == ProxyData::Settings::Enabled + ? proxy + : ProxyData()), useIPv4, useIPv6, useHttp, diff --git a/Telegram/SourceFiles/settings/settings_advanced.cpp b/Telegram/SourceFiles/settings/settings_advanced.cpp index b75c31c839..d836a0c590 100644 --- a/Telegram/SourceFiles/settings/settings_advanced.cpp +++ b/Telegram/SourceFiles/settings/settings_advanced.cpp @@ -43,7 +43,7 @@ void SetupConnectionType(not_null container) { #ifndef TDESKTOP_DISABLE_NETWORK_PROXY const auto connectionType = [] { const auto transport = MTP::dctransport(); - if (!Global::UseProxy()) { + if (Global::ProxySettings() != ProxyData::Settings::Enabled) { return transport.isEmpty() ? lang(lng_connection_auto_connecting) : lng_connection_auto(lt_transport, transport); diff --git a/Telegram/SourceFiles/storage/localstorage.cpp b/Telegram/SourceFiles/storage/localstorage.cpp index fd034cc4d2..fac293a1e4 100644 --- a/Telegram/SourceFiles/storage/localstorage.cpp +++ b/Telegram/SourceFiles/storage/localstorage.cpp @@ -612,7 +612,8 @@ enum { dbictHttpAuto = 1, // not used dbictHttpProxy = 2, dbictTcpProxy = 3, - dbictProxiesList = 4, + dbictProxiesListOld = 4, + dbictProxiesList = 5, }; typedef QMap DraftsMap; @@ -1214,7 +1215,9 @@ bool _readSetting(quint32 blockId, QDataStream &stream, int version, ReadSetting } break; }; Global::SetSelectedProxy(proxy ? proxy : ProxyData()); - Global::SetUseProxy(proxy ? true : false); + Global::SetProxySettings(proxy + ? ProxyData::Settings::Enabled + : ProxyData::Settings::System); if (proxy) { Global::SetProxiesList({ 1, proxy }); } else { @@ -1248,14 +1251,16 @@ bool _readSetting(quint32 blockId, QDataStream &stream, int version, ReadSetting : ProxyData::Type::None; return proxy; }; - if (connectionType == dbictProxiesList) { + if (connectionType == dbictProxiesListOld + || connectionType == dbictProxiesList) { qint32 count = 0, index = 0; stream >> count >> index; - if (std::abs(index) > count) { - Global::SetUseProxyForCalls(true); + qint32 settings = 0, calls = 0; + if (connectionType == dbictProxiesList) { + stream >> settings >> calls; + } else if (std::abs(index) > count) { + calls = 1; index -= (index > 0 ? count : -count); - } else { - Global::SetUseProxyForCalls(false); } auto list = std::vector(); @@ -1273,13 +1278,31 @@ bool _readSetting(quint32 blockId, QDataStream &stream, int version, ReadSetting return false; } Global::SetProxiesList(list); - Global::SetUseProxy(index > 0 && index <= list.size()); - index = std::abs(index); + if (connectionType == dbictProxiesListOld) { + settings = static_cast( + (index > 0 && index <= list.size() + ? ProxyData::Settings::Enabled + : ProxyData::Settings::System)); + index = std::abs(index); + } if (index > 0 && index <= list.size()) { Global::SetSelectedProxy(list[index - 1]); } else { Global::SetSelectedProxy(ProxyData()); } + + const auto unchecked = static_cast(settings); + switch (unchecked) { + case ProxyData::Settings::Disabled: + case ProxyData::Settings::System: + case ProxyData::Settings::Enabled: + Global::SetProxySettings(unchecked); + break; + default: + Global::SetProxySettings(ProxyData::Settings::System); + break; + } + Global::SetUseProxyForCalls(calls == 1); } else { const auto proxy = readProxy(); if (!_checkStreamStatus(stream)) { @@ -1290,14 +1313,14 @@ bool _readSetting(quint32 blockId, QDataStream &stream, int version, ReadSetting Global::SetSelectedProxy(proxy); if (connectionType == dbictTcpProxy || connectionType == dbictHttpProxy) { - Global::SetUseProxy(true); + Global::SetProxySettings(ProxyData::Settings::Enabled); } else { - Global::SetUseProxy(false); + Global::SetProxySettings(ProxyData::Settings::System); } } else { Global::SetProxiesList({}); Global::SetSelectedProxy(ProxyData()); - Global::SetUseProxy(false); + Global::SetProxySettings(ProxyData::Settings::System); } } Sandbox::refreshGlobalProxy(); @@ -2576,10 +2599,9 @@ void writeSettings() { data.stream << quint32(dbiConnectionType) << qint32(dbictProxiesList); data.stream << qint32(proxies.size()); - const auto index = qint32(proxyIt - begin(proxies)) - + qint32(Global::UseProxyForCalls() ? proxies.size() : 0) - + 1; - data.stream << (Global::UseProxy() ? index : -index); + data.stream << qint32(proxyIt - begin(proxies)) + 1; + data.stream << qint32(Global::ProxySettings()); + data.stream << qint32(Global::UseProxyForCalls() ? 1 : 0); for (const auto &proxy : proxies) { data.stream << qint32(kProxyTypeShift + int(proxy.type)); data.stream << proxy.host << qint32(proxy.port) << proxy.user << proxy.password; diff --git a/Telegram/SourceFiles/window/window_connecting_widget.cpp b/Telegram/SourceFiles/window/window_connecting_widget.cpp index 3710b90907..0e91b92faf 100644 --- a/Telegram/SourceFiles/window/window_connecting_widget.cpp +++ b/Telegram/SourceFiles/window/window_connecting_widget.cpp @@ -345,7 +345,8 @@ void ConnectingWidget::refreshState() { const auto state = [&]() -> State { const auto under = isOver(); const auto mtp = MTP::dcstate(); - const auto throughProxy = Global::UseProxy(); + const auto throughProxy + = (Global::ProxySettings() == ProxyData::Settings::Enabled); if (mtp == MTP::ConnectingState || mtp == MTP::DisconnectedState || (mtp < 0 && mtp > -600)) {