mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 00:35:38 +08:00
feat: clash meta core supports
This commit is contained in:
@@ -45,9 +45,7 @@ windows-sys = { version = "0.36", features = ["Win32_System_LibraryLoader", "Win
|
||||
[features]
|
||||
default = ["custom-protocol", "tauri/ayatana-tray"]
|
||||
custom-protocol = ["tauri/custom-protocol"]
|
||||
meta-dev = ["clash-meta", "verge-dev"]
|
||||
verge-dev = []
|
||||
clash-meta = []
|
||||
debug-yml = []
|
||||
|
||||
[profile.release]
|
||||
|
||||
@@ -196,10 +196,16 @@ pub fn patch_verge_config(
|
||||
payload: Verge,
|
||||
app_handle: tauri::AppHandle,
|
||||
core: State<'_, Core>,
|
||||
) -> Result<(), String> {
|
||||
) -> CmdResult {
|
||||
wrap_err!(core.patch_verge(payload, &app_handle))
|
||||
}
|
||||
|
||||
/// change clash core
|
||||
#[tauri::command]
|
||||
pub fn change_clash_core(core: State<'_, Core>, clash_core: Option<String>) -> CmdResult {
|
||||
wrap_err!(core.change_core(clash_core))
|
||||
}
|
||||
|
||||
/// restart the sidecar
|
||||
#[tauri::command]
|
||||
pub fn restart_sidecar(core: State<'_, Core>) -> CmdResult {
|
||||
|
||||
@@ -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<()> {
|
||||
|
||||
26
src-tauri/src/core/multi.rs
Normal file
26
src-tauri/src/core/multi.rs
Normal 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![])
|
||||
}
|
||||
}
|
||||
@@ -100,15 +100,16 @@ fn main() -> std::io::Result<()> {
|
||||
})
|
||||
.invoke_handler(tauri::generate_handler![
|
||||
// common
|
||||
cmds::restart_sidecar,
|
||||
cmds::get_sys_proxy,
|
||||
cmds::get_cur_proxy,
|
||||
cmds::kill_sidecar,
|
||||
cmds::open_app_dir,
|
||||
cmds::open_logs_dir,
|
||||
cmds::kill_sidecar,
|
||||
cmds::restart_sidecar,
|
||||
// clash
|
||||
cmds::get_clash_info,
|
||||
cmds::patch_clash_config,
|
||||
cmds::change_clash_core,
|
||||
// verge
|
||||
cmds::get_verge_config,
|
||||
cmds::patch_verge_config,
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
{
|
||||
"tauri": {
|
||||
"bundle": {
|
||||
"identifier": "top.gydi.clashverge.dev",
|
||||
"externalBin": ["sidecar/clash", "sidecar/clash-meta"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
"tauri": {
|
||||
"bundle": {
|
||||
"identifier": "top.gydi.clashverge.dev",
|
||||
"externalBin": ["sidecar/clash", "sidecar/clash-meta"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"tauri": {
|
||||
"bundle": {
|
||||
"externalBin": ["sidecar/clash", "sidecar/clash-meta"]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user