mirror of https://github.com/procxx/kepka.git
				
				
				
			
							parent
							
								
									ef64d9c188
								
							
						
					
					
						commit
						e482f041a8
					
				|  | @ -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"; | ||||
|  |  | |||
|  | @ -195,11 +195,8 @@ void ApiWrap::refreshProxyPromotion() { | |||
| 		getProxyPromotionDelayed(now, next); | ||||
| 		return; | ||||
| 	} | ||||
| 	const auto proxy = Global::UseProxy() | ||||
| 		? Global::SelectedProxy() | ||||
| 		: ProxyData(); | ||||
| 	const auto key = [&]() -> std::pair<QString, uint32> { | ||||
| 		if (!Global::UseProxy()) { | ||||
| 		if (Global::ProxySettings() != ProxyData::Settings::Enabled) { | ||||
| 			return {}; | ||||
| 		} | ||||
| 		const auto &proxy = Global::SelectedProxy(); | ||||
|  |  | |||
|  | @ -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
 | ||||
| } | ||||
|  |  | |||
|  | @ -110,7 +110,7 @@ private: | |||
| 
 | ||||
| 	not_null<ProxiesBoxController*> _controller; | ||||
| 	QPointer<Ui::Checkbox> _tryIPv6; | ||||
| 	QPointer<Ui::Checkbox> _useProxy; | ||||
| 	std::shared_ptr<Ui::RadioenumGroup<ProxyData::Settings>> _proxySettings; | ||||
| 	QPointer<Ui::SlideWrap<Ui::Checkbox>> _proxyForCalls; | ||||
| 	QPointer<Ui::DividerLabel> _about; | ||||
| 	base::unique_qptr<Ui::RpWidget> _noRows; | ||||
|  | @ -504,10 +504,29 @@ void ProxiesBox::setupContent() { | |||
| 			lang(lng_connection_try_ipv6), | ||||
| 			Global::TryIPv6()), | ||||
| 		st::proxyTryIPv6Padding); | ||||
| 	_useProxy = inner->add( | ||||
| 		object_ptr<Ui::Checkbox>( | ||||
| 	_proxySettings | ||||
| 		= std::make_shared<Ui::RadioenumGroup<ProxyData::Settings>>( | ||||
| 			Global::ProxySettings()); | ||||
| 	inner->add( | ||||
| 		object_ptr<Ui::Radioenum<ProxyData::Settings>>( | ||||
| 			inner, | ||||
| 			lang(lng_proxy_use)), | ||||
| 			_proxySettings, | ||||
| 			ProxyData::Settings::Disabled, | ||||
| 			lang(lng_proxy_disable)), | ||||
| 		st::proxyUsePadding); | ||||
| 	inner->add( | ||||
| 		object_ptr<Ui::Radioenum<ProxyData::Settings>>( | ||||
| 			inner, | ||||
| 			_proxySettings, | ||||
| 			ProxyData::Settings::System, | ||||
| 			lang(lng_proxy_use_system_settings)), | ||||
| 		st::proxyUsePadding); | ||||
| 	inner->add( | ||||
| 		object_ptr<Ui::Radioenum<ProxyData::Settings>>( | ||||
| 			inner, | ||||
| 			_proxySettings, | ||||
| 			ProxyData::Settings::Enabled, | ||||
| 			lang(lng_proxy_use_custom)), | ||||
| 		st::proxyUsePadding); | ||||
| 	_proxyForCalls = inner->add( | ||||
| 		object_ptr<Ui::SlideWrap<Ui::Checkbox>>( | ||||
|  | @ -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<bool> ProxiesBoxController::proxyEnabledValue() const { | ||||
| 	return _proxyEnabledChanges.events_starting_with_copy( | ||||
| 		Global::UseProxy() | ||||
| auto ProxiesBoxController::proxySettingsValue() const | ||||
| -> rpl::producer<ProxyData::Settings> { | ||||
| 	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; | ||||
|  |  | |||
|  | @ -74,10 +74,10 @@ public: | |||
| 	void applyItem(int id); | ||||
| 	object_ptr<BoxContent> editItemBox(int id); | ||||
| 	object_ptr<BoxContent> addNewItemBox(); | ||||
| 	bool setProxyEnabled(bool enabled); | ||||
| 	bool setProxySettings(ProxyData::Settings value); | ||||
| 	void setProxyForCalls(bool enabled); | ||||
| 	void setTryIPv6(bool enabled); | ||||
| 	rpl::producer<bool> proxyEnabledValue() const; | ||||
| 	rpl::producer<ProxyData::Settings> proxySettingsValue() const; | ||||
| 
 | ||||
| 	rpl::producer<ItemView> views() const; | ||||
| 
 | ||||
|  | @ -117,7 +117,7 @@ private: | |||
| 	std::vector<Item> _list; | ||||
| 	rpl::event_stream<ItemView> _views; | ||||
| 	base::Timer _saveTimer; | ||||
| 	rpl::event_stream<bool> _proxyEnabledChanges; | ||||
| 	rpl::event_stream<ProxyData::Settings> _proxySettingsChanges; | ||||
| 
 | ||||
| 	ProxyData _lastSelectedProxy; | ||||
| 	bool _lastSelectedProxyUsed = false; | ||||
|  |  | |||
|  | @ -597,7 +597,8 @@ void Call::createAndStartController(const MTPDphoneCall &call) { | |||
| 	_controller->SetConfig(config); | ||||
| 	_controller->SetEncryptionKey(reinterpret_cast<char*>(_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); | ||||
|  |  | |||
|  | @ -334,6 +334,11 @@ enum DBIWorkMode { | |||
| }; | ||||
| 
 | ||||
| struct ProxyData { | ||||
| 	enum class Settings { | ||||
| 		System, | ||||
| 		Enabled, | ||||
| 		Disabled, | ||||
| 	}; | ||||
| 	enum class Type { | ||||
| 		None, | ||||
| 		Socks5, | ||||
|  |  | |||
|  | @ -662,7 +662,7 @@ struct Data { | |||
| 	bool TryIPv6 = (cPlatform() == dbipWindows) ? false : true; | ||||
| 	std::vector<ProxyData> ProxiesList; | ||||
| 	ProxyData SelectedProxy; | ||||
| 	bool UseProxy = false; | ||||
| 	ProxyData::Settings ProxySettings = ProxyData::Settings::System; | ||||
| 	bool UseProxyForCalls = false; | ||||
| 	base::Observable<void> ConnectionTypeChanged; | ||||
| 
 | ||||
|  | @ -791,7 +791,7 @@ DefineVar(Global, bool, NotificationsDemoIsShown); | |||
| DefineVar(Global, bool, TryIPv6); | ||||
| DefineVar(Global, std::vector<ProxyData>, ProxiesList); | ||||
| DefineVar(Global, ProxyData, SelectedProxy); | ||||
| DefineVar(Global, bool, UseProxy); | ||||
| DefineVar(Global, ProxyData::Settings, ProxySettings); | ||||
| DefineVar(Global, bool, UseProxyForCalls); | ||||
| DefineRefVar(Global, base::Observable<void>, ConnectionTypeChanged); | ||||
| 
 | ||||
|  |  | |||
|  | @ -317,7 +317,7 @@ DeclareVar(bool, NotificationsDemoIsShown); | |||
| DeclareVar(bool, TryIPv6); | ||||
| DeclareVar(std::vector<ProxyData>, ProxiesList); | ||||
| DeclareVar(ProxyData, SelectedProxy); | ||||
| DeclareVar(bool, UseProxy); | ||||
| DeclareVar(ProxyData::Settings, ProxySettings); | ||||
| DeclareVar(bool, UseProxyForCalls); | ||||
| DeclareRefVar(base::Observable<void>, ConnectionTypeChanged); | ||||
| 
 | ||||
|  |  | |||
|  | @ -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() | ||||
| 	const auto previousKey = key( | ||||
| 		(Global::ProxySettings() == ProxyData::Settings::Enabled | ||||
| 			? Global::SelectedProxy() | ||||
| 		: ProxyData()); | ||||
| 			: 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<InformBox>( | ||||
| 			Lang::Hard::ProxyConfigError(), | ||||
| 			[=] { setCurrentProxy(Global::SelectedProxy(), false); })); | ||||
| 			disableCallback)); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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.
 | ||||
|  |  | |||
|  | @ -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; | ||||
| 	} | ||||
|  |  | |||
|  | @ -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(); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -171,9 +171,10 @@ void Session::restart() { | |||
| 
 | ||||
| void Session::refreshOptions() { | ||||
| 	const auto &proxy = Global::SelectedProxy(); | ||||
| 	const auto proxyType = Global::UseProxy() | ||||
| 	const auto proxyType = | ||||
| 		(Global::ProxySettings() == ProxyData::Settings::Enabled | ||||
| 			? proxy.type | ||||
| 		: ProxyData::Type::None; | ||||
| 			: 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, | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ void SetupConnectionType(not_null<Ui::VerticalLayout*> 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); | ||||
|  |  | |||
|  | @ -612,7 +612,8 @@ enum { | |||
| 	dbictHttpAuto = 1, // not used
 | ||||
| 	dbictHttpProxy = 2, | ||||
| 	dbictTcpProxy = 3, | ||||
| 	dbictProxiesList = 4, | ||||
| 	dbictProxiesListOld = 4, | ||||
| 	dbictProxiesList = 5, | ||||
| }; | ||||
| 
 | ||||
| typedef QMap<PeerId, FileKey> 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<ProxyData>(); | ||||
|  | @ -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()); | ||||
| 			if (connectionType == dbictProxiesListOld) { | ||||
| 				settings = static_cast<qint32>( | ||||
| 					(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<ProxyData::Settings>(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; | ||||
|  |  | |||
|  | @ -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)) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue