feat: runtime config viewer

This commit is contained in:
GyDi
2022-07-25 01:20:13 +08:00
parent 2bb18b18b7
commit 1e7a86b7c0
7 changed files with 119 additions and 8 deletions

View File

@@ -87,6 +87,9 @@ pub struct Clash {
/// some info
pub info: ClashInfo,
/// save the running config
pub running_config: Option<String>,
}
impl Clash {
@@ -94,7 +97,11 @@ impl Clash {
let config = Clash::read_config();
let info = ClashInfo::from(&config);
Clash { config, info }
Clash {
config,
info,
running_config: None,
}
}
/// get clash config
@@ -111,6 +118,14 @@ impl Clash {
)
}
/// save running config
pub fn set_running_config(&mut self, config: &Mapping) {
self.running_config = match serde_yaml::to_string(config) {
Ok(config_str) => Some(config_str),
Err(_) => None,
};
}
/// patch update the clash config
/// if the port is changed then return true
pub fn patch_config(&mut self, patch: Mapping) -> Result<(bool, bool)> {

View File

@@ -347,12 +347,10 @@ impl Core {
Clash::strict_filter(data)
};
let (mut config, info) = {
let clash = self.clash.lock();
let config = clash.config.clone();
let info = clash.info.clone();
(config, info)
};
let mut clash = self.clash.lock();
let mut config = clash.config.clone();
let info = clash.info.clone();
for (key, value) in data.into_iter() {
config.insert(key, value);
@@ -369,6 +367,9 @@ impl Core {
Notice::from(window.clone())
};
clash.set_running_config(&config);
drop(clash);
let service = self.service.lock();
service.set_config(info, config, notice)
}