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");
+}