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