feat: enhance clash caller & support more commands

This commit is contained in:
GyDi
2021-12-14 18:37:03 +08:00
parent 4719649bf4
commit 881a95520a
6 changed files with 121 additions and 32 deletions

View File

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