sysd_manager_comcontroler/
proxy_switcher.rs1use std::sync::{LazyLock, RwLock};
2
3pub const KEY_PREF_USE_PROXY_CLEAN: &str = "pref-use-proxy-clean";
4pub const KEY_PREF_USE_PROXY_FREEZE: &str = "pref-use-proxy-freeze";
5pub const KEY_PREF_USE_PROXY_THAW: &str = "pref-use-proxy-thaw";
6pub const KEY_PREF_USE_PROXY_ENABLE_UNIT_FILE: &str = "pref-use-proxy-enable-unit-file";
7pub const KEY_PREF_USE_PROXY_DISABLE_UNIT_FILE: &str = "pref-use-proxy-disable-unit-file";
8pub const KEY_PREF_USE_PROXY_RELOAD_DAEMON: &str = "pref-use-proxy-reload-daemon";
9pub const KEY_PREF_USE_PROXY_CREATE_DROP_IN: &str = "pref-use-proxy-create-drop-in";
10pub const KEY_PREF_USE_PROXY_SAVE_FILE: &str = "pref-use-proxy-save-file";
11pub const KEY_PREF_USE_PROXY_REVERT_UNIT_FILE: &str = "pref-use-proxy-revert-unit-file";
12pub const KEY_PREF_PROXY_START_AT_STARTUP: &str = "pref-proxy-start-at-startup";
13pub const KEY_PREF_PROXY_STOP_AT_CLOSE: &str = "pref-proxy-stop-at-close";
14
15pub static PROXY_SWITCHER: LazyLock<ProxySwitcher> = LazyLock::new(|| {
16 let ps = ProxySwitcher::default();
17 #[cfg(not(feature = "flatpak"))]
18 {
19 use base::consts::APP_ID;
20 use gio::prelude::SettingsExt;
21
22 let settings = gio::Settings::new(APP_ID);
23 let val = settings.boolean(KEY_PREF_USE_PROXY_CLEAN);
24 ps.set_clean(val);
25 let val = settings.boolean(KEY_PREF_USE_PROXY_FREEZE);
26 ps.set_freeze(val);
27 let val = settings.boolean(KEY_PREF_USE_PROXY_THAW);
28 ps.set_thaw(val);
29 let val = settings.boolean(KEY_PREF_USE_PROXY_ENABLE_UNIT_FILE);
30 ps.set_enable_unit_file(val);
31 let val = settings.boolean(KEY_PREF_USE_PROXY_DISABLE_UNIT_FILE);
32 ps.set_disable_unit_file(val);
33 let val = settings.boolean(KEY_PREF_USE_PROXY_RELOAD_DAEMON);
34 ps.set_reload(val);
35 let val = settings.boolean(KEY_PREF_USE_PROXY_CREATE_DROP_IN);
36 ps.set_create_dropin(val);
37 let val = settings.boolean(KEY_PREF_USE_PROXY_SAVE_FILE);
38 ps.set_save_file(val);
39 let val = settings.boolean(KEY_PREF_USE_PROXY_REVERT_UNIT_FILE);
40 ps.set_revert_unit_file(val);
41 let val = settings.boolean(KEY_PREF_PROXY_START_AT_STARTUP);
42 ps.set_start_at_startup(val);
43 let val = settings.boolean(KEY_PREF_PROXY_STOP_AT_CLOSE);
44 ps.set_stop_at_close(val);
45 }
46 ps
47});
48
49#[derive(Default)]
50pub struct ProxySwitcher {
51 clean: RwLock<bool>,
52 freeze: RwLock<bool>,
53 thaw: RwLock<bool>,
54 enable_unit_file: RwLock<bool>,
55 disable_unit_file: RwLock<bool>,
56 reload: RwLock<bool>,
57 create_dropin: RwLock<bool>,
58 save_file: RwLock<bool>,
59 revert_unit_file: RwLock<bool>,
60 start_at_start_up: RwLock<bool>,
61 stop_at_close: RwLock<bool>,
62}
63
64impl ProxySwitcher {
65 pub fn clean(&self) -> bool {
66 *self.clean.read().unwrap()
67 }
68
69 pub fn set_clean(&self, value: bool) {
70 *self.clean.write().unwrap() = value;
71 }
72
73 pub fn freeze(&self) -> bool {
74 *self.freeze.read().unwrap()
75 }
76
77 pub fn set_freeze(&self, value: bool) {
78 *self.freeze.write().unwrap() = value;
79 }
80
81 pub fn thaw(&self) -> bool {
82 *self.thaw.read().unwrap()
83 }
84
85 pub fn set_thaw(&self, value: bool) {
86 *self.thaw.write().unwrap() = value;
87 }
88
89 pub fn enable_unit_file(&self) -> bool {
90 *self.enable_unit_file.read().unwrap()
91 }
92
93 pub fn set_enable_unit_file(&self, value: bool) {
94 *self.enable_unit_file.write().unwrap() = value;
95 }
96
97 pub fn disable_unit_file(&self) -> bool {
98 *self.disable_unit_file.read().unwrap()
99 }
100
101 pub fn set_disable_unit_file(&self, value: bool) {
102 *self.disable_unit_file.write().unwrap() = value;
103 }
104
105 pub fn save_file(&self) -> bool {
106 *self.save_file.read().unwrap()
107 }
108
109 pub fn set_save_file(&self, value: bool) {
110 *self.save_file.write().unwrap() = value;
111 }
112
113 pub fn create_dropin(&self) -> bool {
114 *self.create_dropin.read().unwrap()
115 }
116
117 pub fn set_create_dropin(&self, value: bool) {
118 *self.create_dropin.write().unwrap() = value;
119 }
120
121 pub fn start_at_start_up(&self) -> bool {
122 *self.start_at_start_up.read().unwrap()
123 }
124
125 pub fn set_start_at_startup(&self, value: bool) {
126 *self.start_at_start_up.write().unwrap() = value;
127 }
128
129 pub fn stop_at_close(&self) -> bool {
130 *self.stop_at_close.read().unwrap()
131 }
132
133 pub fn set_stop_at_close(&self, value: bool) {
134 *self.stop_at_close.write().unwrap() = value;
135 }
136
137 pub fn revert_unit_file(&self) -> bool {
138 *self.revert_unit_file.read().unwrap()
139 }
140
141 pub fn set_revert_unit_file(&self, value: bool) {
142 *self.revert_unit_file.write().unwrap() = value;
143 }
144
145 pub fn reload(&self) -> bool {
146 *self.reload.read().unwrap()
147 }
148
149 pub fn set_reload(&self, value: bool) {
150 *self.reload.write().unwrap() = value;
151 }
152
153 pub fn uses_any_proxy(&self) -> bool {
154 self.clean()
155 || self.freeze()
156 || self.thaw()
157 || self.create_dropin()
158 || self.disable_unit_file()
159 || self.reload()
160 || self.save_file()
161 || self.enable_unit_file()
162 || self.revert_unit_file()
163 }
164}