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

@@ -174,6 +174,13 @@ pub fn get_clash_info(core: State<'_, Core>) -> CmdResult<ClashInfo> {
Ok(clash.info.clone())
}
/// get the running clash config string
#[tauri::command]
pub fn get_running_config(core: State<'_, Core>) -> CmdResult<Option<String>> {
let clash = core.clash.lock();
Ok(clash.running_config.clone())
}
/// update the clash core config
/// after putting the change to the clash core
/// then we should save the latest config

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)
}

View File

@@ -114,6 +114,7 @@ fn main() -> std::io::Result<()> {
cmds::get_clash_info,
cmds::patch_clash_config,
cmds::change_clash_core,
cmds::get_running_config,
// verge
cmds::get_verge_config,
cmds::patch_verge_config,