Moved proxy global variables from facades to core settings.

This commit is contained in:
23rd 2021-06-11 01:49:08 +03:00
parent 707b36dc12
commit 6d08542afa
24 changed files with 497 additions and 184 deletions

View File

@ -373,6 +373,8 @@ PRIVATE
core/core_cloud_password.h
core/core_settings.cpp
core/core_settings.h
core/core_settings_proxy.cpp
core/core_settings_proxy.h
core/crash_report_window.cpp
core/crash_report_window.h
core/crash_reports.cpp

View File

@ -212,6 +212,11 @@ ApiWrap::ApiWrap(not_null<Main::Session*> session)
}, _session->lifetime());
setupSupportMode();
Core::App().settings().proxy().connectionTypeValue(
) | rpl::start_with_next([=] {
refreshTopPromotion();
}, _session->lifetime());
});
}
@ -261,10 +266,10 @@ void ApiWrap::refreshTopPromotion() {
return;
}
const auto key = [&]() -> std::pair<QString, uint32> {
if (Global::ProxySettings() != MTP::ProxyData::Settings::Enabled) {
if (!Core::App().settings().proxy().isEnabled()) {
return {};
}
const auto &proxy = Global::SelectedProxy();
const auto &proxy = Core::App().settings().proxy().selected();
if (proxy.type != MTP::ProxyData::Type::Mtproto) {
return {};
}

View File

@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/qthelp_url.h"
#include "base/call_delayed.h"
#include "core/application.h"
#include "core/core_settings.h"
#include "main/main_account.h"
#include "mtproto/facade.h"
#include "ui/widgets/checkbox.h"
@ -27,7 +28,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/effects/radial_animation.h"
#include "ui/text/text_options.h"
#include "ui/basic_click_handlers.h"
#include "facades.h"
#include "styles/style_layers.h"
#include "styles/style_boxes.h"
#include "styles/style_chat_helpers.h"
@ -186,7 +186,10 @@ class ProxiesBox : public Ui::BoxContent {
public:
using View = ProxiesBoxController::ItemView;
ProxiesBox(QWidget*, not_null<ProxiesBoxController*> controller);
ProxiesBox(
QWidget*,
not_null<ProxiesBoxController*> controller,
Core::SettingsProxy &settings);
protected:
void prepare() override;
@ -201,6 +204,7 @@ private:
void refreshProxyForCalls();
not_null<ProxiesBoxController*> _controller;
Core::SettingsProxy &_settings;
QPointer<Ui::Checkbox> _tryIPv6;
std::shared_ptr<Ui::RadioenumGroup<ProxyData::Settings>> _proxySettings;
QPointer<Ui::SlideWrap<Ui::Checkbox>> _proxyForCalls;
@ -566,8 +570,10 @@ void ProxyRow::showMenu() {
ProxiesBox::ProxiesBox(
QWidget*,
not_null<ProxiesBoxController*> controller)
not_null<ProxiesBoxController*> controller,
Core::SettingsProxy &settings)
: _controller(controller)
, _settings(settings)
, _initialWrap(this) {
_controller->views(
) | rpl::start_with_next([=](View &&view) {
@ -591,11 +597,11 @@ void ProxiesBox::setupContent() {
object_ptr<Ui::Checkbox>(
inner,
tr::lng_connection_try_ipv6(tr::now),
Global::TryIPv6()),
_settings.tryIPv6()),
st::proxyTryIPv6Padding);
_proxySettings
= std::make_shared<Ui::RadioenumGroup<ProxyData::Settings>>(
Global::ProxySettings());
_settings.settings());
inner->add(
object_ptr<Ui::Radioenum<ProxyData::Settings>>(
inner,
@ -623,7 +629,7 @@ void ProxiesBox::setupContent() {
object_ptr<Ui::Checkbox>(
inner,
tr::lng_proxy_use_for_calls(tr::now),
Global::UseProxyForCalls()),
_settings.useProxyForCalls()),
style::margins(
0,
st::proxyUsePadding.top(),
@ -652,7 +658,7 @@ void ProxiesBox::setupContent() {
_proxySettings->setChangedCallback([=](ProxyData::Settings value) {
if (!_controller->setProxySettings(value)) {
_proxySettings->setValue(Global::ProxySettings());
_proxySettings->setValue(_settings.settings());
addNewProxy();
}
refreshProxyForCalls();
@ -1051,20 +1057,22 @@ void ProxyBox::addLabel(
ProxiesBoxController::ProxiesBoxController(not_null<Main::Account*> account)
: _account(account)
, _settings(Core::App().settings().proxy())
, _saveTimer([] { Local::writeSettings(); }) {
_list = ranges::views::all(
Global::ProxiesList()
_settings.list()
) | ranges::views::transform([&](const ProxyData &proxy) {
return Item{ ++_idCounter, proxy };
}) | ranges::to_vector;
subscribe(Global::RefConnectionTypeChanged(), [=] {
_proxySettingsChanges.fire_copy(Global::ProxySettings());
const auto i = findByProxy(Global::SelectedProxy());
_settings.connectionTypeChanges(
) | rpl::start_with_next([=] {
_proxySettingsChanges.fire_copy(_settings.settings());
const auto i = findByProxy(_settings.selected());
if (i != end(_list)) {
updateView(*i);
}
});
}, _lifetime);
for (auto &item : _list) {
refreshChecker(item);
@ -1112,7 +1120,7 @@ void ProxiesBoxController::ShowApplyConfirmation(
? "\n\n" + tr::lng_proxy_sponsor_warning(tr::now)
: QString());
auto callback = [=](Fn<void()> &&close) {
auto &proxies = Global::RefProxiesList();
auto &proxies = Core::App().settings().proxy().list();
if (!ranges::contains(proxies, proxy)) {
proxies.push_back(proxy);
}
@ -1139,7 +1147,7 @@ void ProxiesBoxController::ShowApplyConfirmation(
auto ProxiesBoxController::proxySettingsValue() const
-> rpl::producer<ProxyData::Settings> {
return _proxySettingsChanges.events_starting_with_copy(
Global::ProxySettings()
_settings.settings()
) | rpl::distinct_until_changed();
}
@ -1182,7 +1190,8 @@ void ProxiesBoxController::refreshChecker(Item &item) {
Variants::Address address) {
const auto &list = options.data[address][type];
if (list.empty()
|| (address == Variants::IPv6 && !Global::TryIPv6())) {
|| ((address == Variants::IPv6)
&& !Core::App().settings().proxy().tryIPv6())) {
checker = nullptr;
return;
}
@ -1244,7 +1253,7 @@ object_ptr<Ui::BoxContent> ProxiesBoxController::CreateOwningBox(
}
object_ptr<Ui::BoxContent> ProxiesBoxController::create() {
auto result = Box<ProxiesBox>(this);
auto result = Box<ProxiesBox>(this, _settings);
for (const auto &item : _list) {
updateView(item);
}
@ -1282,14 +1291,13 @@ void ProxiesBoxController::shareItem(int id) {
void ProxiesBoxController::applyItem(int id) {
auto item = findById(id);
if ((Global::ProxySettings() == ProxyData::Settings::Enabled)
&& Global::SelectedProxy() == item->data) {
if (_settings.isEnabled() && (_settings.selected() == item->data)) {
return;
} else if (item->deleted) {
return;
}
auto j = findByProxy(Global::SelectedProxy());
auto j = findByProxy(_settings.selected());
Core::App().setCurrentProxy(
item->data,
@ -1307,12 +1315,13 @@ void ProxiesBoxController::setDeleted(int id, bool deleted) {
item->deleted = deleted;
if (deleted) {
auto &proxies = Global::RefProxiesList();
auto &proxies = _settings.list();
proxies.erase(ranges::remove(proxies, item->data), end(proxies));
if (item->data == Global::SelectedProxy()) {
_lastSelectedProxy = base::take(Global::RefSelectedProxy());
if (Global::ProxySettings() == ProxyData::Settings::Enabled) {
if (item->data == _settings.selected()) {
_lastSelectedProxy = _settings.selected();
_settings.setSelected(MTP::ProxyData());
if (_settings.isEnabled()) {
_lastSelectedProxyUsed = true;
Core::App().setCurrentProxy(
ProxyData(),
@ -1323,7 +1332,7 @@ void ProxiesBoxController::setDeleted(int id, bool deleted) {
}
}
} else {
auto &proxies = Global::RefProxiesList();
auto &proxies = _settings.list();
if (ranges::find(proxies, item->data) == end(proxies)) {
auto insertBefore = item + 1;
while (insertBefore != end(_list) && insertBefore->deleted) {
@ -1335,15 +1344,15 @@ void ProxiesBoxController::setDeleted(int id, bool deleted) {
proxies.insert(insertBeforeIt, item->data);
}
if (!Global::SelectedProxy() && _lastSelectedProxy == item->data) {
Assert(Global::ProxySettings() != ProxyData::Settings::Enabled);
if (!_settings.selected() && _lastSelectedProxy == item->data) {
Assert(!_settings.isEnabled());
if (base::take(_lastSelectedProxyUsed)) {
Core::App().setCurrentProxy(
base::take(_lastSelectedProxy),
ProxyData::Settings::Enabled);
} else {
Global::SetSelectedProxy(base::take(_lastSelectedProxy));
_settings.setSelected(base::take(_lastSelectedProxy));
}
}
}
@ -1371,7 +1380,7 @@ object_ptr<Ui::BoxContent> ProxiesBoxController::editItemBox(int id) {
void ProxiesBoxController::replaceItemWith(
std::vector<Item>::iterator which,
std::vector<Item>::iterator with) {
auto &proxies = Global::RefProxiesList();
auto &proxies = _settings.list();
proxies.erase(ranges::remove(proxies, which->data), end(proxies));
_views.fire({ which->id });
@ -1391,7 +1400,7 @@ void ProxiesBoxController::replaceItemValue(
restoreItem(which->id);
}
auto &proxies = Global::RefProxiesList();
auto &proxies = _settings.list();
const auto i = ranges::find(proxies, which->data);
Assert(i != end(proxies));
*i = proxy;
@ -1422,7 +1431,7 @@ object_ptr<Ui::BoxContent> ProxiesBoxController::addNewItemBox() {
}
void ProxiesBoxController::addNewItem(const ProxyData &proxy) {
auto &proxies = Global::RefProxiesList();
auto &proxies = _settings.list();
proxies.push_back(proxy);
_list.push_back({ ++_idCounter, proxy });
@ -1431,43 +1440,42 @@ void ProxiesBoxController::addNewItem(const ProxyData &proxy) {
}
bool ProxiesBoxController::setProxySettings(ProxyData::Settings value) {
if (Global::ProxySettings() == value) {
if (_settings.settings() == value) {
return true;
} else if (value == ProxyData::Settings::Enabled) {
if (Global::ProxiesList().empty()) {
if (_settings.list().empty()) {
return false;
} else if (!Global::SelectedProxy()) {
Global::SetSelectedProxy(Global::ProxiesList().back());
auto j = findByProxy(Global::SelectedProxy());
} else if (!_settings.selected()) {
_settings.setSelected(_settings.list().back());
auto j = findByProxy(_settings.selected());
if (j != end(_list)) {
updateView(*j);
}
}
}
Core::App().setCurrentProxy(Global::SelectedProxy(), value);
Core::App().setCurrentProxy(_settings.selected(), value);
saveDelayed();
return true;
}
void ProxiesBoxController::setProxyForCalls(bool enabled) {
if (Global::UseProxyForCalls() == enabled) {
if (_settings.useProxyForCalls() == enabled) {
return;
}
Global::SetUseProxyForCalls(enabled);
if ((Global::ProxySettings() == ProxyData::Settings::Enabled)
&& Global::SelectedProxy().supportsCalls()) {
Global::RefConnectionTypeChanged().notify();
_settings.setUseProxyForCalls(enabled);
if (_settings.isEnabled() && _settings.selected().supportsCalls()) {
_settings.connectionTypeChangesNotify();
}
saveDelayed();
}
void ProxiesBoxController::setTryIPv6(bool enabled) {
if (Global::TryIPv6() == enabled) {
if (Core::App().settings().proxy().tryIPv6() == enabled) {
return;
}
Global::SetTryIPv6(enabled);
Core::App().settings().proxy().setTryIPv6(enabled);
_account->mtp().restart();
Global::RefConnectionTypeChanged().notify();
_settings.connectionTypeChangesNotify();
saveDelayed();
}
@ -1480,7 +1488,7 @@ auto ProxiesBoxController::views() const -> rpl::producer<ItemView> {
}
void ProxiesBoxController::updateView(const Item &item) {
const auto selected = (Global::SelectedProxy() == item.data);
const auto selected = (_settings.selected() == item.data);
const auto deleted = item.deleted;
const auto type = [&] {
switch (item.data.type) {
@ -1494,8 +1502,7 @@ void ProxiesBoxController::updateView(const Item &item) {
Unexpected("Proxy type in ProxiesBoxController::updateView.");
}();
const auto state = [&] {
if (!selected
|| (Global::ProxySettings() != ProxyData::Settings::Enabled)) {
if (!selected || !_settings.isEnabled()) {
return item.state;
} else if (_account->mtp().dcstate() == MTP::ConnectedState) {
return ItemState::Online;

View File

@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/timer.h"
#include "base/object_ptr.h"
#include "core/core_settings.h"
#include "mtproto/connection_abstract.h"
#include "mtproto/mtproto_proxy_data.h"
@ -28,7 +29,7 @@ namespace Main {
class Account;
} // namespace Main
class ProxiesBoxController : public base::Subscriber {
class ProxiesBoxController {
public:
using ProxyData = MTP::ProxyData;
using Type = ProxyData::Type;
@ -110,6 +111,7 @@ private:
void addNewItem(const ProxyData &proxy);
const not_null<Main::Account*> _account;
Core::SettingsProxy &_settings;
int _idCounter = 0;
std::vector<Item> _list;
rpl::event_stream<ItemView> _views;
@ -119,4 +121,6 @@ private:
ProxyData _lastSelectedProxy;
bool _lastSelectedProxyUsed = false;
rpl::lifetime _lifetime;
};

View File

@ -28,7 +28,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "webrtc/webrtc_create_adm.h"
#include "data/data_user.h"
#include "data/data_session.h"
#include "facades.h"
#include <tgcalls/Instance.h>
#include <tgcalls/VideoCaptureInterface.h>
@ -805,16 +804,19 @@ void Call::createAndStartController(const MTPDphoneCall &call) {
AppendServer(descriptor.rtcServers, connection);
}
if (Global::UseProxyForCalls()
&& (Global::ProxySettings() == MTP::ProxyData::Settings::Enabled)) {
const auto &selected = Global::SelectedProxy();
if (selected.supportsCalls() && !selected.host.isEmpty()) {
Assert(selected.type == MTP::ProxyData::Type::Socks5);
descriptor.proxy = std::make_unique<tgcalls::Proxy>();
descriptor.proxy->host = selected.host.toStdString();
descriptor.proxy->port = selected.port;
descriptor.proxy->login = selected.user.toStdString();
descriptor.proxy->password = selected.password.toStdString();
{
auto &settingsProxy = Core::App().settings().proxy();
using ProxyData = MTP::ProxyData;
if (settingsProxy.useProxyForCalls() && settingsProxy.isEnabled()) {
const auto &selected = settingsProxy.selected();
if (selected.supportsCalls() && !selected.host.isEmpty()) {
Assert(selected.type == ProxyData::Type::Socks5);
descriptor.proxy = std::make_unique<tgcalls::Proxy>();
descriptor.proxy->host = selected.host.toStdString();
descriptor.proxy->port = selected.port;
descriptor.proxy->login = selected.user.toStdString();
descriptor.proxy->password = selected.password.toStdString();
}
}
}

View File

@ -523,17 +523,17 @@ void Application::setCurrentProxy(
const MTP::ProxyData &proxy,
MTP::ProxyData::Settings settings) {
const auto current = [&] {
return (Global::ProxySettings() == MTP::ProxyData::Settings::Enabled)
? Global::SelectedProxy()
return _settings.proxy().isEnabled()
? _settings.proxy().selected()
: MTP::ProxyData();
};
const auto was = current();
Global::SetSelectedProxy(proxy);
Global::SetProxySettings(settings);
_settings.proxy().setSelected(proxy);
_settings.proxy().setSettings(settings);
const auto now = current();
refreshGlobalProxy();
_proxyChanges.fire({ was, now });
Global::RefConnectionTypeChanged().notify();
_settings.proxy().connectionTypeChangesNotify();
}
auto Application::proxyChanges() const -> rpl::producer<ProxyChange> {
@ -541,11 +541,10 @@ auto Application::proxyChanges() const -> rpl::producer<ProxyChange> {
}
void Application::badMtprotoConfigurationError() {
if (Global::ProxySettings() == MTP::ProxyData::Settings::Enabled
&& !_badProxyDisableBox) {
if (_settings.proxy().isEnabled() && !_badProxyDisableBox) {
const auto disableCallback = [=] {
setCurrentProxy(
Global::SelectedProxy(),
_settings.proxy().selected(),
MTP::ProxyData::Settings::System);
};
_badProxyDisableBox = Ui::show(Box<InformBox>(

View File

@ -77,6 +77,7 @@ Settings::Settings()
QByteArray Settings::serialize() const {
const auto themesAccentColors = _themesAccentColors.serialize();
const auto windowPosition = Serialize(_windowPosition);
const auto proxy = _proxy.serialize();
auto recentEmojiPreloadGenerated = std::vector<RecentEmojiId>();
if (_recentEmojiPreload.empty()) {
@ -97,7 +98,8 @@ QByteArray Settings::serialize() const {
+ Serialize::stringSize(_callOutputDeviceId)
+ Serialize::stringSize(_callInputDeviceId)
+ Serialize::stringSize(_callVideoInputDeviceId)
+ sizeof(qint32) * 5;
+ sizeof(qint32) * 5
+ Serialize::bytearraySize(proxy);
for (const auto &[key, value] : _soundOverrides) {
size += Serialize::stringSize(key) + Serialize::stringSize(value);
}
@ -198,7 +200,8 @@ QByteArray Settings::serialize() const {
stream
<< qint32(_disableOpenGL ? 1 : 0)
<< qint32(_groupCallNoiseSuppression ? 1 : 0)
<< _workMode.current();
<< _workMode.current()
<< proxy;
}
return result;
}
@ -277,6 +280,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) {
qint32 disableOpenGL = _disableOpenGL ? 1 : 0;
qint32 groupCallNoiseSuppression = _groupCallNoiseSuppression ? 1 : 0;
qint32 workMode = static_cast<qint32>(_workMode.current());
QByteArray proxy;
stream >> themesAccentColors;
if (!stream.atEnd()) {
@ -414,12 +418,17 @@ void Settings::addFromSerialized(const QByteArray &serialized) {
if (!stream.atEnd()) {
stream >> workMode;
}
if (!stream.atEnd()) {
stream >> proxy;
}
if (stream.status() != QDataStream::Ok) {
LOG(("App Error: "
"Bad data for Core::Settings::constructFromSerialized()"));
return;
} else if (!_themesAccentColors.setFromSerialized(themesAccentColors)) {
return;
} else if (!_proxy.setFromSerialized(proxy)) {
return;
}
_adaptiveForWide = (adaptiveForWide == 1);
_moderateModeEnabled = (moderateModeEnabled == 1);

View File

@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include "core/core_settings_proxy.h"
#include "window/themes/window_themes_embedded.h"
#include "ui/chat/attach/attach_send_files_way.h"
#include "platform/platform_notifications_manager.h"
@ -67,6 +68,10 @@ public:
return _saveDelayed.events();
}
[[nodiscard]] SettingsProxy &proxy() {
return _proxy;
}
[[nodiscard]] static bool IsLeftCorner(ScreenCorner corner) {
return (corner == ScreenCorner::TopLeft)
|| (corner == ScreenCorner::BottomLeft);
@ -597,6 +602,8 @@ private:
ushort rating = 0;
};
SettingsProxy _proxy;
rpl::variable<bool> _adaptiveForWide = true;
bool _moderateModeEnabled = false;
rpl::variable<float64> _songVolume = kDefaultVolume;

View File

@ -0,0 +1,238 @@
/*
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 "core/core_settings_proxy.h"
#include "base/platform/base_platform_info.h"
#include "storage/serialize_common.h"
namespace Core {
namespace {
[[nodiscard]] qint32 ProxySettingsToInt(MTP::ProxyData::Settings settings) {
switch(settings) {
case MTP::ProxyData::Settings::System: return 0;
case MTP::ProxyData::Settings::Enabled: return 1;
case MTP::ProxyData::Settings::Disabled: return 2;
}
Unexpected("Bad type in ProxySettingsToInt");
}
[[nodiscard]] MTP::ProxyData::Settings IntToProxySettings(qint32 value) {
switch(value) {
case 0: return MTP::ProxyData::Settings::System;
case 1: return MTP::ProxyData::Settings::Enabled;
case 2: return MTP::ProxyData::Settings::Disabled;
}
Unexpected("Bad type in IntToProxySettings");
}
[[nodiscard]] MTP::ProxyData DeserializeProxyData(const QByteArray &data) {
QDataStream stream(data);
stream.setVersion(QDataStream::Qt_5_1);
qint32 proxyType, port;
MTP::ProxyData proxy;
stream
>> proxyType
>> proxy.host
>> port
>> proxy.user
>> proxy.password;
proxy.port = port;
proxy.type = [&] {
switch(proxyType) {
case 0: return MTP::ProxyData::Type::None;
case 1: return MTP::ProxyData::Type::Socks5;
case 2: return MTP::ProxyData::Type::Http;
case 3: return MTP::ProxyData::Type::Mtproto;
}
Unexpected("Bad type in DeserializeProxyData");
}();
return proxy;
}
[[nodiscard]] QByteArray SerializeProxyData(const MTP::ProxyData &proxy) {
auto result = QByteArray();
const auto size = 1 * sizeof(qint32)
+ Serialize::stringSize(proxy.host)
+ 1 * sizeof(qint32)
+ Serialize::stringSize(proxy.user)
+ Serialize::stringSize(proxy.password);
result.reserve(size);
{
const auto proxyType = [&] {
switch(proxy.type) {
case MTP::ProxyData::Type::None: return 0;
case MTP::ProxyData::Type::Socks5: return 1;
case MTP::ProxyData::Type::Http: return 2;
case MTP::ProxyData::Type::Mtproto: return 3;
}
Unexpected("Bad type in SerializeProxyData");
}();
QDataStream stream(&result, QIODevice::WriteOnly);
stream.setVersion(QDataStream::Qt_5_1);
stream
<< qint32(proxyType)
<< proxy.host
<< qint32(proxy.port)
<< proxy.user
<< proxy.password;
}
return result;
}
} // namespace
SettingsProxy::SettingsProxy()
: _tryIPv6(!Platform::IsWindows()) {
}
QByteArray SettingsProxy::serialize() const {
auto result = QByteArray();
auto stream = QDataStream(&result, QIODevice::WriteOnly);
const auto serializedSelected = SerializeProxyData(_selected);
const auto serializedList = ranges::views::all(
_list
) | ranges::views::transform(SerializeProxyData) | ranges::to_vector;
const auto size = 3 * sizeof(qint32)
+ Serialize::bytearraySize(serializedSelected)
+ 1 * sizeof(qint32)
+ ranges::accumulate(
serializedList,
0,
ranges::plus(),
&Serialize::bytearraySize);
result.reserve(size);
stream.setVersion(QDataStream::Qt_5_1);
stream
<< qint32(_tryIPv6 ? 1 : 0)
<< qint32(_useProxyForCalls ? 1 : 0)
<< ProxySettingsToInt(_settings)
<< serializedSelected
<< qint32(_list.size());
for (const auto &i : serializedList) {
stream << i;
}
stream.device()->close();
return result;
}
bool SettingsProxy::setFromSerialized(const QByteArray &serialized) {
if (serialized.isEmpty()) {
return true;
}
auto stream = QDataStream(serialized);
auto tryIPv6 = qint32(_tryIPv6 ? 1 : 0);
auto useProxyForCalls = qint32(_useProxyForCalls ? 1 : 0);
auto settings = ProxySettingsToInt(_settings);
auto listCount = qint32(_list.size());
auto selectedProxy = QByteArray();
if (!stream.atEnd()) {
stream
>> tryIPv6
>> useProxyForCalls
>> settings
>> selectedProxy
>> listCount;
if (stream.status() == QDataStream::Ok) {
for (auto i = 0; i != listCount; ++i) {
QByteArray data;
stream >> data;
_list.push_back(DeserializeProxyData(data));
}
}
}
if (stream.status() != QDataStream::Ok) {
LOG(("App Error: "
"Bad data for Core::SettingsProxy::setFromSerialized()"));
return false;
}
_tryIPv6 = (tryIPv6 == 1);
_useProxyForCalls = (useProxyForCalls == 1);
_settings = IntToProxySettings(settings);
_selected = DeserializeProxyData(selectedProxy);
return true;
}
bool SettingsProxy::isEnabled() const {
return _settings == MTP::ProxyData::Settings::Enabled;
}
bool SettingsProxy::isSystem() const {
return _settings == MTP::ProxyData::Settings::System;
}
bool SettingsProxy::isDisabled() const {
return _settings == MTP::ProxyData::Settings::Disabled;
}
bool SettingsProxy::tryIPv6() const {
return _tryIPv6;
}
void SettingsProxy::setTryIPv6(bool value) {
_tryIPv6 = value;
}
bool SettingsProxy::useProxyForCalls() const {
return _useProxyForCalls;
}
void SettingsProxy::setUseProxyForCalls(bool value) {
_useProxyForCalls = value;
}
MTP::ProxyData::Settings SettingsProxy::settings() const {
return _settings;
}
void SettingsProxy::setSettings(MTP::ProxyData::Settings value) {
_settings = value;
}
MTP::ProxyData SettingsProxy::selected() const {
return _selected;
}
void SettingsProxy::setSelected(MTP::ProxyData value) {
_selected = value;
}
const std::vector<MTP::ProxyData> &SettingsProxy::list() const {
return _list;
}
std::vector<MTP::ProxyData> &SettingsProxy::list() {
return _list;
}
rpl::producer<> SettingsProxy::connectionTypeValue() const {
return _connectionTypeChanges.events_starting_with({});
}
rpl::producer<> SettingsProxy::connectionTypeChanges() const {
return _connectionTypeChanges.events();
}
void SettingsProxy::connectionTypeChangesNotify() {
_connectionTypeChanges.fire({});
}
} // namespace Core

View File

@ -0,0 +1,56 @@
/*
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
*/
#pragma once
#include "mtproto/mtproto_proxy_data.h"
namespace Core {
class SettingsProxy final {
public:
SettingsProxy();
[[nodiscard]] bool isEnabled() const;
[[nodiscard]] bool isSystem() const;
[[nodiscard]] bool isDisabled() const;
[[nodiscard]] rpl::producer<> connectionTypeChanges() const;
[[nodiscard]] rpl::producer<> connectionTypeValue() const;
void connectionTypeChangesNotify();
[[nodiscard]] bool tryIPv6() const;
void setTryIPv6(bool value);
[[nodiscard]] bool useProxyForCalls() const;
void setUseProxyForCalls(bool value);
[[nodiscard]] MTP::ProxyData::Settings settings() const;
void setSettings(MTP::ProxyData::Settings value);
[[nodiscard]] MTP::ProxyData selected() const;
void setSelected(MTP::ProxyData value);
[[nodiscard]] const std::vector<MTP::ProxyData> &list() const;
[[nodiscard]] std::vector<MTP::ProxyData> &list();
[[nodiscard]] QByteArray serialize() const;
bool setFromSerialized(const QByteArray &serialized);
private:
bool _tryIPv6 = false;
bool _useProxyForCalls = false;
MTP::ProxyData::Settings _settings = MTP::ProxyData::Settings::System;
MTP::ProxyData _selected;
std::vector<MTP::ProxyData> _list;
rpl::event_stream<> _connectionTypeChanges;
};
} // namespace Core

View File

@ -26,7 +26,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/qthelp_regex.h"
#include "base/qt_adapters.h"
#include "ui/effects/animations.h"
#include "facades.h"
#include "app.h"
#include <QtGui/QSessionManager>
@ -450,17 +449,17 @@ void Sandbox::checkForQuit() {
}
void Sandbox::refreshGlobalProxy() {
const auto proxy = !Global::started()
const auto proxy = !Core::IsAppLaunched()
? _sandboxProxy
: (Global::ProxySettings() == MTP::ProxyData::Settings::Enabled)
? Global::SelectedProxy()
: Core::App().settings().proxy().isEnabled()
? Core::App().settings().proxy().selected()
: MTP::ProxyData();
if (proxy.type == MTP::ProxyData::Type::Socks5
|| proxy.type == MTP::ProxyData::Type::Http) {
QNetworkProxy::setApplicationProxy(
MTP::ToNetworkProxy(MTP::ToDirectIpProxy(proxy)));
} else if (!Global::started()
|| Global::ProxySettings() == MTP::ProxyData::Settings::System) {
} else if (!Core::IsAppLaunched()
|| Core::App().settings().proxy().isSystem()) {
QNetworkProxyFactory::setUseSystemConfiguration(true);
} else {
QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);

View File

@ -47,7 +47,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/unixtime.h"
#include "support/support_helper.h"
#include "apiwrap.h"
#include "facades.h"
#include "styles/style_window.h"
#include "styles/style_dialogs.h"
#include "styles/style_chat.h"
@ -172,8 +171,7 @@ TopBarWidget::TopBarWidget(
updateInfoToggleActive();
}, lifetime());
rpl::single(rpl::empty_value()) | rpl::then(
base::ObservableViewer(Global::RefConnectionTypeChanged())
Core::App().settings().proxy().connectionTypeValue(
) | rpl::start_with_next([=] {
updateConnectingState();
}, lifetime());

View File

@ -30,7 +30,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_session.h"
#include "main/main_domain.h"
#include "main/main_session_settings.h"
#include "facades.h"
namespace Main {
namespace {
@ -448,7 +447,7 @@ void Account::startMtp(std::unique_ptr<MTP::Config> config) {
});
_mtp->setStateChangedHandler([=](MTP::ShiftedDcId dc, int32 state) {
if (dc == _mtp->mainDcId()) {
Global::RefConnectionTypeChanged().notify();
Core::App().settings().proxy().connectionTypeChangesNotify();
}
});
_mtp->setSessionResetHandler([=](MTP::ShiftedDcId shiftedDcId) {

View File

@ -10,7 +10,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "apiwrap.h"
#include "api/api_updates.h"
#include "api/api_send_progress.h"
#include "core/application.h"
#include "main/main_account.h"
#include "main/main_domain.h"
#include "main/main_session_settings.h"
@ -34,7 +33,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/unixtime.h"
#include "calls/calls_instance.h"
#include "support/support_helper.h"
#include "facades.h"
#ifndef TDESKTOP_DISABLE_SPELLCHECK
#include "chat_helpers/spellchecker_common.h"
@ -88,10 +86,6 @@ Session::Session(
, _saveSettingsTimer([=] { saveSettings(); }) {
Expects(_settings != nullptr);
subscribe(Global::RefConnectionTypeChanged(), [=] {
_api->refreshTopPromotion();
});
_api->refreshTopPromotion();
_api->requestTermsUpdate();
_api->requestFullPeer(_user);

View File

@ -13,7 +13,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "mtproto/mtproto_dc_options.h"
#include "mtproto/mtproto_config.h"
#include "mtproto/mtp_instance.h"
#include "facades.h"
namespace MTP {
namespace details {
@ -28,9 +27,11 @@ ConfigLoader::ConfigLoader(
not_null<Instance*> instance,
const QString &phone,
Fn<void(const MTPConfig &result)> onDone,
FailHandler onFail)
FailHandler onFail,
bool proxyEnabled)
: _instance(instance)
, _phone(phone)
, _proxyEnabled(proxyEnabled)
, _doneHandler(onDone)
, _failHandler(onFail) {
_enumDCTimer.setCallback([this] { enumerate(); });
@ -115,7 +116,7 @@ void ConfigLoader::enumerate() {
}
void ConfigLoader::refreshSpecialLoader() {
if (Global::ProxySettings() == ProxyData::Settings::Enabled) {
if (_proxyEnabled) {
_specialLoader.reset();
return;
}
@ -174,7 +175,7 @@ void ConfigLoader::addSpecialEndpoint(
void ConfigLoader::sendSpecialRequest() {
terminateSpecialRequest();
if (Global::ProxySettings() == ProxyData::Settings::Enabled) {
if (_proxyEnabled) {
_specialLoader.reset();
return;
}
@ -233,5 +234,9 @@ void ConfigLoader::specialConfigLoaded(const MTPConfig &result) {
_instance->dcOptions().setFromList(data.vdc_options());
}
void ConfigLoader::setProxyEnabled(bool value) {
_proxyEnabled = value;
}
} // namespace details
} // namespace MTP

View File

@ -26,11 +26,13 @@ public:
not_null<Instance*> instance,
const QString &phone,
Fn<void(const MTPConfig &result)> onDone,
FailHandler onFail);
FailHandler onFail,
bool proxyEnabled);
~ConfigLoader();
void load();
void setPhone(const QString &phone);
void setProxyEnabled(bool value);
private:
mtpRequestId sendRequest(ShiftedDcId shiftedDcId);
@ -67,6 +69,7 @@ private:
DcId _specialEnumCurrent = 0;
mtpRequestId _specialEnumRequest = 0;
QString _phone;
bool _proxyEnabled = false;
Fn<void(const MTPConfig &result)> _doneHandler;
FailHandler _failHandler;

View File

@ -20,13 +20,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_account.h" // Account::configUpdated.
#include "apiwrap.h"
#include "core/application.h"
#include "core/core_settings.h"
#include "lang/lang_instance.h"
#include "lang/lang_cloud_manager.h"
#include "base/unixtime.h"
#include "base/call_delayed.h"
#include "base/timer.h"
#include "base/network_reachability.h"
#include "facades.h" // Proxies list.
namespace MTP {
namespace {
@ -279,6 +279,8 @@ private:
base::Timer _checkDelayedTimer;
Core::SettingsProxy &_proxySettings;
rpl::lifetime _lifetime;
};
@ -299,7 +301,8 @@ Instance::Private::Private(
, _instance(instance)
, _mode(mode)
, _config(std::move(fields.config))
, _networkReachability(base::NetworkReachability::Instance()) {
, _networkReachability(base::NetworkReachability::Instance())
, _proxySettings(Core::App().settings().proxy()) {
Expects(_config != nullptr);
const auto idealThreadPoolSize = QThread::idealThreadCount();
@ -338,6 +341,13 @@ Instance::Private::Private(
_mainDcId = fields.mainDcId;
_mainDcIdForced = true;
}
_proxySettings.connectionTypeChanges(
) | rpl::start_with_next([=] {
if (_configLoader) {
_configLoader->setProxyEnabled(_proxySettings.isEnabled());
}
}, _lifetime);
}
void Instance::Private::start() {
@ -397,11 +407,12 @@ void Instance::Private::applyDomainIps(
}
return true;
};
for (auto &proxy : Global::RefProxiesList()) {
for (auto &proxy : _proxySettings.list()) {
applyToProxy(proxy);
}
if (applyToProxy(Global::RefSelectedProxy())
&& (Global::ProxySettings() == ProxyData::Settings::Enabled)) {
auto selected = _proxySettings.selected();
if (applyToProxy(selected) && _proxySettings.isEnabled()) {
_proxySettings.setSelected(selected);
for (const auto &[shiftedDcId, session] : _sessions) {
session->refreshOptions();
}
@ -427,11 +438,13 @@ void Instance::Private::setGoodProxyDomain(
}
return true;
};
for (auto &proxy : Global::RefProxiesList()) {
for (auto &proxy : _proxySettings.list()) {
applyToProxy(proxy);
}
if (applyToProxy(Global::RefSelectedProxy())
&& (Global::ProxySettings() == ProxyData::Settings::Enabled)) {
auto selected = _proxySettings.selected();
if (applyToProxy(selected) && _proxySettings.isEnabled()) {
_proxySettings.setSelected(selected);
Core::App().refreshGlobalProxy();
}
}
@ -473,7 +486,8 @@ void Instance::Private::requestConfig() {
[=](const MTPConfig &result) { configLoadDone(result); },
[=](const Error &error, const Response &) {
return configLoadFail(error);
});
},
_proxySettings.isEnabled());
_configLoader->load();
}

View File

@ -10,9 +10,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "mtproto/details/mtproto_dcenter.h"
#include "mtproto/session_private.h"
#include "mtproto/mtproto_auth_key.h"
#include "core/application.h"
#include "core/core_settings.h"
#include "base/unixtime.h"
#include "base/openssl_help.h"
#include "facades.h"
namespace MTP {
namespace details {
@ -238,22 +239,19 @@ void Session::restart() {
}
void Session::refreshOptions() {
const auto &proxy = Global::SelectedProxy();
const auto proxyType =
(Global::ProxySettings() == ProxyData::Settings::Enabled
? proxy.type
: ProxyData::Type::None);
auto &settings = Core::App().settings().proxy();
const auto &proxy = settings.selected();
const auto isEnabled = settings.isEnabled();
const auto proxyType = (isEnabled ? proxy.type : ProxyData::Type::None);
const auto useTcp = (proxyType != ProxyData::Type::Http);
const auto useHttp = (proxyType != ProxyData::Type::Mtproto);
const auto useIPv4 = true;
const auto useIPv6 = Global::TryIPv6();
const auto useIPv6 = settings.tryIPv6();
_data->setOptions(SessionOptions(
_instance->systemLangCode(),
_instance->cloudLangCode(),
_instance->langPackName(),
(Global::ProxySettings() == ProxyData::Settings::Enabled
? proxy
: ProxyData()),
(isEnabled ? proxy : ProxyData()),
useIPv4,
useIPv6,
useHttp,

View File

@ -33,7 +33,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_domain.h"
#include "main/main_session.h"
#include "mtproto/facade.h"
#include "facades.h"
#include "app.h"
#include "styles/style_settings.h"
@ -50,7 +49,7 @@ void SetupConnectionType(
not_null<Ui::VerticalLayout*> container) {
const auto connectionType = [=] {
const auto transport = account->mtp().dctransport();
if (Global::ProxySettings() != MTP::ProxyData::Settings::Enabled) {
if (!Core::App().settings().proxy().isEnabled()) {
return transport.isEmpty()
? tr::lng_connection_auto_connecting(tr::now)
: tr::lng_connection_auto(tr::now, lt_transport, transport);
@ -64,7 +63,7 @@ void SetupConnectionType(
container,
tr::lng_settings_connection_type(),
rpl::merge(
base::ObservableViewer(Global::RefConnectionTypeChanged()),
Core::App().settings().proxy().connectionTypeChanges(),
// Handle language switch.
tr::lng_connection_auto_connecting() | rpl::to_empty
) | rpl::map(connectionType),

View File

@ -19,7 +19,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/update_checker.h"
#include "platform/platform_specific.h"
#include "boxes/send_files_box.h"
#include "facades.h"
namespace Storage {
namespace details {
@ -457,7 +456,7 @@ bool ReadSetting(
context.legacyRead = true;
} break;
case dbiConnectionTypeOld: {
case dbiConnectionTypeOldOld: {
qint32 v;
stream >> v;
if (!CheckStreamStatus(stream)) return false;
@ -476,26 +475,27 @@ bool ReadSetting(
: MTP::ProxyData::Type::Http;
} break;
};
Global::SetSelectedProxy(proxy ? proxy : MTP::ProxyData());
Global::SetProxySettings(proxy
auto &proxySettings = Core::App().settings().proxy();
proxySettings.setSelected(proxy ? proxy : MTP::ProxyData());
proxySettings.setSettings(proxy
? MTP::ProxyData::Settings::Enabled
: MTP::ProxyData::Settings::System);
if (proxy) {
Global::SetProxiesList({ 1, proxy });
} else {
Global::SetProxiesList({});
}
proxySettings.list() = proxy
? std::vector<MTP::ProxyData>{ 1, proxy }
: std::vector<MTP::ProxyData>{};
Core::App().refreshGlobalProxy();
context.legacyRead = true;
} break;
case dbiConnectionType: {
case dbiConnectionTypeOld: {
qint32 connectionType;
stream >> connectionType;
if (!CheckStreamStatus(stream)) {
return false;
}
auto &proxySettings = Core::App().settings().proxy();
const auto readProxy = [&] {
qint32 proxyType, port;
MTP::ProxyData proxy;
@ -540,7 +540,7 @@ bool ReadSetting(
if (!CheckStreamStatus(stream)) {
return false;
}
Global::SetProxiesList(list);
proxySettings.list() = list;
if (connectionType == dbictProxiesListOld) {
settings = static_cast<qint32>(
(index > 0 && index <= list.size()
@ -548,49 +548,47 @@ bool ReadSetting(
: MTP::ProxyData::Settings::System));
index = std::abs(index);
}
if (index > 0 && index <= list.size()) {
Global::SetSelectedProxy(list[index - 1]);
} else {
Global::SetSelectedProxy(MTP::ProxyData());
}
proxySettings.setSelected((index > 0 && index <= list.size())
? list[index - 1]
: MTP::ProxyData());
const auto unchecked = static_cast<MTP::ProxyData::Settings>(settings);
switch (unchecked) {
case MTP::ProxyData::Settings::Enabled:
Global::SetProxySettings(Global::SelectedProxy()
proxySettings.setSettings(proxySettings.selected()
? MTP::ProxyData::Settings::Enabled
: MTP::ProxyData::Settings::System);
break;
case MTP::ProxyData::Settings::Disabled:
case MTP::ProxyData::Settings::System:
Global::SetProxySettings(unchecked);
proxySettings.setSettings(unchecked);
break;
default:
Global::SetProxySettings(MTP::ProxyData::Settings::System);
proxySettings.setSettings(MTP::ProxyData::Settings::System);
break;
}
Global::SetUseProxyForCalls(calls == 1);
proxySettings.setUseProxyForCalls(calls == 1);
} else {
const auto proxy = readProxy();
if (!CheckStreamStatus(stream)) {
return false;
}
if (proxy) {
Global::SetProxiesList({ 1, proxy });
Global::SetSelectedProxy(proxy);
if (connectionType == dbictTcpProxy
|| connectionType == dbictHttpProxy) {
Global::SetProxySettings(MTP::ProxyData::Settings::Enabled);
} else {
Global::SetProxySettings(MTP::ProxyData::Settings::System);
}
proxySettings.list() = { 1, proxy };
proxySettings.setSelected(proxy);
proxySettings.setSettings((connectionType == dbictTcpProxy
|| connectionType == dbictHttpProxy)
? MTP::ProxyData::Settings::Enabled
: MTP::ProxyData::Settings::System);
} else {
Global::SetProxiesList({});
Global::SetSelectedProxy(MTP::ProxyData());
Global::SetProxySettings(MTP::ProxyData::Settings::System);
proxySettings.list() = {};
proxySettings.setSelected(MTP::ProxyData());
proxySettings.setSettings(MTP::ProxyData::Settings::System);
}
}
Core::App().refreshGlobalProxy();
context.legacyRead = true;
} break;
case dbiThemeKeyOld: {
@ -639,12 +637,13 @@ bool ReadSetting(
context.languagesKey = languagesKey;
} break;
case dbiTryIPv6: {
case dbiTryIPv6Old: {
qint32 v;
stream >> v;
if (!CheckStreamStatus(stream)) return false;
Core::App().settings().proxy().setTryIPv6(v == 1);
Global::SetTryIPv6(v == 1);
context.legacyRead = true;
} break;
case dbiSeenTrayTooltip: {

View File

@ -92,7 +92,7 @@ enum {
dbiAutoUpdate = 0x0c,
dbiLastUpdateCheck = 0x0d,
dbiWindowPositionOld = 0x0e,
dbiConnectionTypeOld = 0x0f,
dbiConnectionTypeOldOld = 0x0f,
// 0x10 reserved
dbiDefaultAttach = 0x11,
dbiCatsAndDogsOld = 0x12,
@ -117,7 +117,7 @@ enum {
dbiEmojiVariantsOldOld = 0x25,
dbiRecentStickers = 0x26,
dbiDcOptionOld = 0x27,
dbiTryIPv6 = 0x28,
dbiTryIPv6Old = 0x28,
dbiSongVolumeOld = 0x29,
dbiWindowsNotificationsOld = 0x30,
dbiIncludeMutedOld = 0x31,
@ -146,7 +146,7 @@ enum {
dbiLastSeenWarningSeenOld = 0x4c,
dbiSessionSettings = 0x4d,
dbiLangPackKey = 0x4e,
dbiConnectionType = 0x4f,
dbiConnectionTypeOld = 0x4f,
dbiStickersFavedLimitOld = 0x50,
dbiSuggestStickersByEmojiOld = 0x51,
dbiSuggestEmojiOld = 0x52,

View File

@ -27,7 +27,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_session.h"
#include "window/themes/window_theme.h"
#include "lang/lang_instance.h"
#include "facades.h"
#include <QtCore/QDirIterator>
@ -466,19 +465,6 @@ void writeSettings() {
size += sizeof(quint32) + Serialize::bytearraySize(applicationSettings);
size += sizeof(quint32) + Serialize::stringSize(cDialogLastPath());
auto &proxies = Global::RefProxiesList();
const auto &proxy = Global::SelectedProxy();
auto proxyIt = ranges::find(proxies, proxy);
if (proxy.type != MTP::ProxyData::Type::None
&& proxyIt == end(proxies)) {
proxies.push_back(proxy);
proxyIt = end(proxies) - 1;
}
size += sizeof(quint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32);
for (const auto &proxy : proxies) {
size += sizeof(qint32) + Serialize::stringSize(proxy.host) + sizeof(qint32) + Serialize::stringSize(proxy.user) + Serialize::stringSize(proxy.password);
}
// Theme keys and night mode.
size += sizeof(quint32) + sizeof(quint64) * 2 + sizeof(quint32);
size += sizeof(quint32) + sizeof(quint64) * 2;
@ -500,17 +486,6 @@ void writeSettings() {
data.stream << quint32(dbiDialogLastPath) << cDialogLastPath();
data.stream << quint32(dbiAnimationsDisabled) << qint32(anim::Disabled() ? 1 : 0);
data.stream << quint32(dbiConnectionType) << qint32(dbictProxiesList);
data.stream << qint32(proxies.size());
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;
}
data.stream << quint32(dbiTryIPv6) << qint32(Global::TryIPv6());
data.stream
<< quint32(dbiThemeKey)
<< quint64(_themeKeyDay)

View File

@ -13,12 +13,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "mtproto/mtp_instance.h"
#include "mtproto/facade.h"
#include "main/main_account.h"
#include "core/application.h"
#include "core/core_settings.h"
#include "core/update_checker.h"
#include "window/themes/window_theme.h"
#include "boxes/connection_box.h"
#include "boxes/abstract_box.h"
#include "lang/lang_keys.h"
#include "facades.h"
#include "app.h"
#include "styles/style_window.h"
@ -224,9 +225,6 @@ ConnectionState::ConnectionState(
}
}, _lifetime);
subscribe(Global::RefConnectionTypeChanged(), [=] {
refreshState();
});
if (!Core::UpdaterDisabled()) {
Core::UpdateChecker checker;
rpl::merge(
@ -236,7 +234,11 @@ ConnectionState::ConnectionState(
refreshState();
}, _lifetime);
}
refreshState();
Core::App().settings().proxy().connectionTypeValue(
) | rpl::start_with_next([=] {
refreshState();
}, _lifetime);
}
void ConnectionState::createWidget() {
@ -291,8 +293,7 @@ void ConnectionState::refreshState() {
const auto under = _widget && _widget->isOver();
const auto ready = (Checker().state() == Checker::State::Ready);
const auto state = _account->mtp().dcstate();
const auto proxy
= (Global::ProxySettings() == MTP::ProxyData::Settings::Enabled);
const auto proxy = Core::App().settings().proxy().isEnabled();
if (state == MTP::ConnectingState
|| state == MTP::DisconnectedState
|| (state < 0 && state > -600)) {

View File

@ -21,7 +21,7 @@ class Account;
namespace Window {
class ConnectionState : private base::Subscriber {
class ConnectionState {
public:
ConnectionState(
not_null<Ui::RpWidget*> parent,