feat: clash meta core supports

This commit is contained in:
GyDi
2022-05-17 01:59:49 +08:00
parent e7b19a5f66
commit d4a4747c08
13 changed files with 195 additions and 36 deletions

View File

@@ -65,22 +65,21 @@ impl Core {
/// initialize the core state
pub fn init(&self, app_handle: tauri::AppHandle) {
let verge = self.verge.lock();
let clash_core = verge.clash_core.clone();
let mut service = self.service.lock();
service.set_core(clash_core);
#[cfg(windows)]
{
let verge = self.verge.lock();
let enable = verge.enable_service_mode.clone();
let mut service = self.service.lock();
service.set_mode(enable.unwrap_or(false));
log_if_err!(service.start());
}
#[cfg(not(windows))]
{
let mut service = self.service.lock();
log_if_err!(service.start());
}
log_if_err!(service.start());
drop(verge);
drop(service);
log_if_err!(self.activate());
@@ -138,6 +137,31 @@ impl Core {
self.activate_enhanced(true)
}
/// change the clash core
pub fn change_core(&self, clash_core: Option<String>) -> Result<()> {
let clash_core = clash_core.unwrap_or("clash".into());
if &clash_core != "clash" && &clash_core != "clash-meta" {
bail!("invalid clash core name \"{clash_core}\"");
}
let mut verge = self.verge.lock();
verge.patch_config(Verge {
clash_core: Some(clash_core.clone()),
..Verge::default()
})?;
drop(verge);
let mut service = self.service.lock();
service.stop()?;
service.set_core(Some(clash_core));
service.start()?;
drop(service);
self.activate()?;
self.activate_enhanced(true)
}
/// Patch Clash
/// handle the clash config changed
pub fn patch_clash(&self, patch: Mapping) -> Result<()> {

View File

@@ -0,0 +1,26 @@
use anyhow::{Context, Result};
use std::env::current_exe;
pub struct CoreItem {
pub name: String,
pub path: String,
}
pub struct Multi {}
impl Multi {
pub fn list() -> Result<Vec<CoreItem>> {
let paths = current_exe()
.unwrap()
.parent()
.unwrap()
.read_dir()
.context("failed to current dir")?;
for path in paths {
dbg!(path.unwrap().path().metadata().unwrap().permissions().);
}
Ok(vec![])
}
}