From 3c79238a449677572966a89d99614665f8fbb2f9 Mon Sep 17 00:00:00 2001 From: GyDi Date: Wed, 16 Feb 2022 03:21:34 +0800 Subject: [PATCH] feat: support open dir --- src-tauri/src/cmds.rs | 45 ++++++++++++++++++------ src-tauri/src/main.rs | 2 ++ src/components/setting/setting-verge.tsx | 31 ++++++++++++++-- src/services/cmds.ts | 8 +++++ 4 files changed, 74 insertions(+), 12 deletions(-) diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs index eeaabd5..577036f 100644 --- a/src-tauri/src/cmds.rs +++ b/src-tauri/src/cmds.rs @@ -180,17 +180,10 @@ pub fn view_profile(index: usize, profiles_state: State<'_, ProfilesState>) -> R }; } - // use `open` command - if let Ok(open) = which::which("open") { - return match Command::new(open).arg(path).spawn() { - Ok(_) => Ok(()), - Err(_) => Err("failed to open file by `open`".into()), - }; + match open_command().arg(path).spawn() { + Ok(_) => Ok(()), + Err(_) => Err("failed to open file by `open`".into()), } - - // recommand to use vscode - // todo: support other editors - return Err("please install VScode".into()); } /// restart the sidecar @@ -279,3 +272,35 @@ pub async fn patch_verge_config( let mut verge = verge_state.0.lock().unwrap(); verge.patch_config(payload) } + +/// open app config dir +#[tauri::command] +pub fn open_app_dir() -> Result<(), String> { + let app_dir = app_home_dir(); + + match open_command().arg(app_dir).spawn() { + Ok(_) => Ok(()), + Err(_) => Err("failed to open logs dir".into()), + } +} + +/// open logs dir +#[tauri::command] +pub fn open_logs_dir() -> Result<(), String> { + let log_dir = app_home_dir().join("logs"); + + match open_command().arg(log_dir).spawn() { + Ok(_) => Ok(()), + Err(_) => Err("failed to open logs dir".into()), + } +} + +/// get open/explorer command +fn open_command() -> Command { + let open = if cfg!(target_os = "windows") { + "explorer" + } else { + "open" + }; + Command::new(open) +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index c8a905c..31dcdc8 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -74,6 +74,8 @@ fn main() -> std::io::Result<()> { cmds::restart_sidecar, cmds::get_sys_proxy, cmds::get_cur_proxy, + cmds::open_app_dir, + cmds::open_logs_dir, // clash cmds::get_clash_info, cmds::patch_clash_config, diff --git a/src/components/setting/setting-verge.tsx b/src/components/setting/setting-verge.tsx index 14c0791..fab9847 100644 --- a/src/components/setting/setting-verge.tsx +++ b/src/components/setting/setting-verge.tsx @@ -1,11 +1,17 @@ import useSWR, { useSWRConfig } from "swr"; -import { ListItemText, Switch, Typography } from "@mui/material"; -import { getVergeConfig, patchVergeConfig } from "../../services/cmds"; +import { IconButton, ListItemText, Switch, Typography } from "@mui/material"; +import { + getVergeConfig, + openAppDir, + openLogsDir, + patchVergeConfig, +} from "../../services/cmds"; import { SettingList, SettingItem } from "./setting"; import { CmdType } from "../../services/types"; import { version } from "../../../package.json"; import GuardState from "./guard-state"; import PaletteSwitch from "./palette-switch"; +import { ArrowForward } from "@mui/icons-material"; interface Props { onError?: (err: Error) => void; @@ -55,6 +61,27 @@ const SettingVerge = ({ onError }: Props) => { + + + { + console.log("click"); + openAppDir().then(console.log).catch(console.log); + }} + > + + + + + + + + + + + v{version} diff --git a/src/services/cmds.ts b/src/services/cmds.ts index 5f9cf08..9ef9c13 100644 --- a/src/services/cmds.ts +++ b/src/services/cmds.ts @@ -63,3 +63,11 @@ export async function patchVergeConfig(payload: CmdType.VergeConfig) { export async function getSystemProxy() { return invoke("get_sys_proxy"); } + +export async function openAppDir() { + return invoke("open_app_dir"); +} + +export async function openLogsDir() { + return invoke("open_logs_dir"); +}