Skip to main content

sysd_manager_comcontroler/
proxy_switcher.rs

1use 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}