From 5c5177ec574f612e9d85f2c822f5fae4fc6486d6 Mon Sep 17 00:00:00 2001
From: GyDi <zzzgydi@gmail.com>
Date: Tue, 13 Dec 2022 00:44:24 +0800
Subject: [PATCH] feat: support to open core dir

---
 src-tauri/src/cmds.rs                    |  7 +++++++
 src-tauri/src/main.rs                    |  1 +
 src/components/setting/setting-verge.tsx | 15 +++++++++++++--
 src/locales/en.json                      |  1 +
 src/locales/zh.json                      |  1 +
 src/services/cmds.ts                     |  6 ++++++
 6 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs
index 9e9749f..33de5e6 100644
--- a/src-tauri/src/cmds.rs
+++ b/src-tauri/src/cmds.rs
@@ -202,6 +202,13 @@ pub fn open_app_dir() -> CmdResult<()> {
     wrap_err!(open::that(app_dir))
 }
 
+#[tauri::command]
+pub fn open_core_dir() -> CmdResult<()> {
+    let core_dir = wrap_err!(tauri::utils::platform::current_exe())?;
+    let core_dir = core_dir.parent().ok_or(format!("failed to get core dir"))?;
+    wrap_err!(open::that(core_dir))
+}
+
 #[tauri::command]
 pub fn open_logs_dir() -> CmdResult<()> {
     let log_dir = wrap_err!(dirs::app_logs_dir())?;
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index abe0e7d..a3ff866 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -33,6 +33,7 @@ fn main() -> std::io::Result<()> {
             cmds::open_app_dir,
             cmds::open_logs_dir,
             cmds::open_web_url,
+            cmds::open_core_dir,
             // cmds::kill_sidecar,
             cmds::restart_sidecar,
             // clash
diff --git a/src/components/setting/setting-verge.tsx b/src/components/setting/setting-verge.tsx
index 7cf8313..ed43fa5 100644
--- a/src/components/setting/setting-verge.tsx
+++ b/src/components/setting/setting-verge.tsx
@@ -7,7 +7,7 @@ import {
   Switch,
   Typography,
 } from "@mui/material";
-import { openAppDir, openLogsDir, patchVergeConfig } from "@/services/cmds";
+import { openAppDir, openCoreDir, openLogsDir } from "@/services/cmds";
 import { ArrowForward } from "@mui/icons-material";
 import { useVerge } from "@/hooks/use-verge";
 import { version } from "@root/package.json";
@@ -94,7 +94,7 @@ const SettingVerge = ({ onError }: Props) => {
           onCatch={onError}
           onFormat={onSwitchFormat}
           onChange={(e) => onChangeData({ traffic_graph: e })}
-          onGuard={(e) => patchVergeConfig({ traffic_graph: e })}
+          onGuard={(e) => patchVerge({ traffic_graph: e })}
         >
           <Switch edge="end" />
         </GuardState>
@@ -155,6 +155,17 @@ const SettingVerge = ({ onError }: Props) => {
         </IconButton>
       </SettingItem>
 
+      <SettingItem label={t("Open Core Dir")}>
+        <IconButton
+          color="inherit"
+          size="small"
+          sx={{ my: "2px" }}
+          onClick={openCoreDir}
+        >
+          <ArrowForward />
+        </IconButton>
+      </SettingItem>
+
       <SettingItem label={t("Open Logs Dir")}>
         <IconButton
           color="inherit"
diff --git a/src/locales/en.json b/src/locales/en.json
index 9c139c9..93111e2 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -78,6 +78,7 @@
   "Traffic Graph": "Traffic Graph",
   "Language": "Language",
   "Open App Dir": "Open App Dir",
+  "Open Core Dir": "Open Core Dir",
   "Open Logs Dir": "Open Logs Dir",
   "Verge Version": "Verge Version",
   "theme.light": "Light",
diff --git a/src/locales/zh.json b/src/locales/zh.json
index d836e5c..25a6212 100644
--- a/src/locales/zh.json
+++ b/src/locales/zh.json
@@ -82,6 +82,7 @@
   "Traffic Graph": "流量图显",
   "Language": "语言设置",
   "Open App Dir": "应用目录",
+  "Open Core Dir": "内核目录",
   "Open Logs Dir": "日志目录",
   "Verge Version": "应用版本",
   "theme.light": "浅色",
diff --git a/src/services/cmds.ts b/src/services/cmds.ts
index 9bed83e..d6bbca5 100644
--- a/src/services/cmds.ts
+++ b/src/services/cmds.ts
@@ -133,6 +133,12 @@ export async function openAppDir() {
   );
 }
 
+export async function openCoreDir() {
+  return invoke<void>("open_core_dir").catch((err) =>
+    Notice.error(err?.message || err.toString(), 1500)
+  );
+}
+
 export async function openLogsDir() {
   return invoke<void>("open_logs_dir").catch((err) =>
     Notice.error(err?.message || err.toString(), 1500)
-- 
GitLab