mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 08:45:41 +08:00
feat: enhance clash caller & support more commands
This commit is contained in:
@@ -1,29 +1,63 @@
|
||||
extern crate log;
|
||||
|
||||
use crate::utils::app_home_dir;
|
||||
use tauri::api::process::{Command, CommandEvent};
|
||||
use crate::{
|
||||
config::read_clash_controller,
|
||||
events::emit::{clash_start, ClashInfoPayload},
|
||||
utils::app_home_dir,
|
||||
};
|
||||
use tauri::{
|
||||
api::process::{Command, CommandEvent},
|
||||
AppHandle,
|
||||
};
|
||||
|
||||
/// Run the clash bin
|
||||
pub fn run_clash_bin() {
|
||||
pub fn run_clash_bin(app_handle: &AppHandle) -> ClashInfoPayload {
|
||||
let app_dir = app_home_dir();
|
||||
let mut payload = ClashInfoPayload {
|
||||
status: "success".to_string(),
|
||||
controller: None,
|
||||
message: None,
|
||||
};
|
||||
|
||||
let (mut rx, _sidecar) = Command::new_sidecar("clash")
|
||||
.expect("failed to create clash binary")
|
||||
.args(["-d", &app_dir.as_os_str().to_str().unwrap()])
|
||||
.spawn()
|
||||
.expect("failed to spawn sidecar");
|
||||
match Command::new_sidecar("clash") {
|
||||
Ok(cmd) => match cmd
|
||||
.args(["-d", &app_dir.as_os_str().to_str().unwrap()])
|
||||
.spawn()
|
||||
{
|
||||
Ok((mut rx, _)) => {
|
||||
log::info!("Successfully execute clash sidecar");
|
||||
payload.controller = Some(read_clash_controller());
|
||||
|
||||
tauri::async_runtime::spawn(async move {
|
||||
while let Some(event) = rx.recv().await {
|
||||
match event {
|
||||
CommandEvent::Stdout(line) => {
|
||||
log::info!("{}", line);
|
||||
}
|
||||
CommandEvent::Stderr(err) => {
|
||||
log::error!("{}", err);
|
||||
}
|
||||
_ => {}
|
||||
tauri::async_runtime::spawn(async move {
|
||||
while let Some(event) = rx.recv().await {
|
||||
match event {
|
||||
CommandEvent::Stdout(line) => log::info!("{}", line),
|
||||
CommandEvent::Stderr(err) => log::error!("{}", err),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
Err(err) => {
|
||||
log::error!(
|
||||
"Failed to execute clash sidecar for \"{:?}\"",
|
||||
err.to_string()
|
||||
);
|
||||
payload.status = "error".to_string();
|
||||
payload.message = Some(err.to_string());
|
||||
}
|
||||
},
|
||||
Err(err) => {
|
||||
log::error!(
|
||||
"Failed to execute clash sidecar for \"{:?}\"",
|
||||
err.to_string()
|
||||
);
|
||||
payload.status = "error".to_string();
|
||||
payload.message = Some(err.to_string());
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
clash_start(app_handle, &payload);
|
||||
|
||||
payload
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user