1 /*
2 This file is part of Telegram Desktop,
3 the official desktop application for the Telegram messaging service.
4 
5 For license and copyright information please follow this link:
6 https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
7 */
8 #pragma once
9 
10 #include "mtproto/mtproto_proxy_data.h"
11 
12 namespace Core {
13 
14 class SettingsProxy final {
15 public:
16 	SettingsProxy();
17 
18 	[[nodiscard]] bool isEnabled() const;
19 	[[nodiscard]] bool isSystem() const;
20 	[[nodiscard]] bool isDisabled() const;
21 
22 	[[nodiscard]] rpl::producer<> connectionTypeChanges() const;
23 	[[nodiscard]] rpl::producer<> connectionTypeValue() const;
24 	void connectionTypeChangesNotify();
25 
26 	[[nodiscard]] bool tryIPv6() const;
27 	void setTryIPv6(bool value);
28 
29 	[[nodiscard]] bool useProxyForCalls() const;
30 	void setUseProxyForCalls(bool value);
31 
32 	[[nodiscard]] MTP::ProxyData::Settings settings() const;
33 	void setSettings(MTP::ProxyData::Settings value);
34 
35 	[[nodiscard]] MTP::ProxyData selected() const;
36 	void setSelected(MTP::ProxyData value);
37 
38 	[[nodiscard]] const std::vector<MTP::ProxyData> &list() const;
39 	[[nodiscard]] std::vector<MTP::ProxyData> &list();
40 
41 	[[nodiscard]] QByteArray serialize() const;
42 	bool setFromSerialized(const QByteArray &serialized);
43 
44 private:
45 	bool _tryIPv6 = false;
46 	bool _useProxyForCalls = false;
47 	MTP::ProxyData::Settings _settings = MTP::ProxyData::Settings::System;
48 	MTP::ProxyData _selected;
49 	std::vector<MTP::ProxyData> _list;
50 
51 	rpl::event_stream<> _connectionTypeChanges;
52 
53 };
54 
55 } // namespace Core
56 
57