diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs index fc1e3be..1ea6355 100644 --- a/src-tauri/src/cmds.rs +++ b/src-tauri/src/cmds.rs @@ -6,7 +6,7 @@ use crate::{ use crate::{ret_err, wrap_err}; use anyhow::Result; use serde_yaml::Mapping; -use std::{path::PathBuf, process::Command, process::Stdio}; +use std::{path::PathBuf, process::Command}; use tauri::{api, Manager, State}; /// get all profiles from `profiles.yaml` @@ -321,55 +321,53 @@ pub fn open_logs_dir() -> Result<(), String> { open_path_cmd(log_dir, "failed to open logs dir") } -/// get open/explorer command -fn open_path_cmd(dir: PathBuf, err_str: &str) -> Result<(), String> { +/// use the os default open command to open file or dir +fn open_path_cmd(path: PathBuf, err_str: &str) -> Result<(), String> { let result; + #[cfg(target_os = "windows")] { use std::os::windows::process::CommandExt; result = Command::new("explorer") - .creation_flags(0x08000000) - .arg(&dir) - .spawn(); + .creation_flags(0x08000000) + .arg(&path) + .spawn(); } #[cfg(target_os = "macos")] { - result = Command::new("open").arg(&dir).spawn(); + result = Command::new("open").arg(&path).spawn(); } #[cfg(target_os = "linux")] { - result = Command::new("xdg-open").arg(&dir).stdout(Stdio::piped()).stderr(Stdio::piped()).spawn(); + result = Command::new("xdg-open").arg(&path).spawn(); } match result { - Ok(child) => { - match child.wait_with_output() { - Ok(out) => { - if let Some(code) = out.status.code() { - if code != 0 { - log::error!("open dir {:?} failed, child exit code: {:?}, stderr: {:?} stdout: {:?}", - &dir, code, String::from_utf8_lossy(&out.stderr), String::from_utf8_lossy(&out.stdout)); - return Err(err_str.into()); - } + Ok(child) => match child.wait_with_output() { + Ok(out) => { + if let Some(code) = out.status.code() { + if code != 0 { + log::error!( + "failed to open path {:?} for {} (code {code})", + &path, + String::from_utf8_lossy(&out.stderr), + ); + return Err(err_str.into()); } - }, - Err(err) => { - log::error!("open dir {:?} failed, child exec err: {}", &dir, err); - return Err(err_str.into()); } } + Err(err) => { + log::error!("failed to open path {:?} for {err}", &path); + return Err(err_str.into()); + } }, Err(err) => { - log::error!("open dir {:?} spawn process failed, err: {}", &dir, err); + log::error!("failed to open path {:?} for {err}", &path); return Err(err_str.into()); - }, - _ => { - log::error!("open dir {:?} failed due to OS not supported", &dir); - return Err(err_str.into()); - }, + } } return Ok(());