소스 검색

feature: copy clash env (#1391)

* feat: copy clash env

* style: use ContentCopyRounded replace CopyAll
Avan 10 달 전
부모
커밋
32212a46e2
9개의 변경된 파일40개의 추가작업 그리고 4개의 파일을 삭제
  1. 2 1
      .gitignore
  2. 6 0
      src-tauri/src/cmds.rs
  3. 1 0
      src-tauri/src/main.rs
  4. 23 3
      src/components/setting/setting-verge.tsx
  5. 1 0
      src/locales/en.json
  6. 1 0
      src/locales/fa.json
  7. 1 0
      src/locales/ru.json
  8. 1 0
      src/locales/zh.json
  9. 4 0
      src/services/cmds.ts

+ 2 - 1
.gitignore

@@ -7,4 +7,5 @@ dist-ssr
 update.json
 scripts/_env.sh
 .vscode
-.tool-versions
+.tool-versions
+.idea

+ 6 - 0
src-tauri/src/cmds.rs

@@ -12,6 +12,12 @@ use sysproxy::{Autoproxy, Sysproxy};
 use tauri::{api, Manager};
 type CmdResult<T = ()> = Result<T, String>;
 
+#[tauri::command]
+pub fn copy_clash_env(app_handle: tauri::AppHandle) -> CmdResult {
+    feat::copy_clash_env(&app_handle);
+    Ok(())
+}
+
 #[tauri::command]
 pub fn get_profiles() -> CmdResult<IProfiles> {
     Ok(Config::profiles().data().clone())

+ 1 - 0
src-tauri/src/main.rs

@@ -64,6 +64,7 @@ fn main() -> std::io::Result<()> {
             cmds::get_runtime_exists,
             cmds::get_runtime_logs,
             cmds::uwp::invoke_uwp_tool,
+            cmds::copy_clash_env,
             // verge
             cmds::get_verge_config,
             cmds::patch_verge_config,

+ 23 - 3
src/components/setting/setting-verge.tsx

@@ -1,13 +1,21 @@
-import { useRef } from "react";
+import { useCallback, useRef } from "react";
 import { useTranslation } from "react-i18next";
 import { open } from "@tauri-apps/api/dialog";
-import { Button, MenuItem, Select, Input, Typography } from "@mui/material";
+import {
+  Button,
+  MenuItem,
+  Select,
+  Input,
+  Typography,
+  Box,
+} from "@mui/material";
 import {
   exitApp,
   openAppDir,
   openCoreDir,
   openLogsDir,
   openDevTools,
+  copyClashEnv,
 } from "@/services/cmds";
 import { checkUpdate } from "@tauri-apps/api/updater";
 import { useVerge } from "@/hooks/use-verge";
@@ -24,6 +32,8 @@ import { LayoutViewer } from "./mods/layout-viewer";
 import { UpdateViewer } from "./mods/update-viewer";
 import getSystem from "@/utils/get-system";
 import { routers } from "@/pages/_routers";
+import { TooltipIcon } from "@/components/base/base-tooltip-icon";
+import { ContentCopyRounded } from "@mui/icons-material";
 
 interface Props {
   onError?: (err: Error) => void;
@@ -67,6 +77,11 @@ const SettingVerge = ({ onError }: Props) => {
     }
   };
 
+  const onCopyClashEnv = useCallback(async () => {
+    await copyClashEnv();
+    Notice.success(t("Copy Success"), 1000);
+  }, []);
+
   return (
     <SettingList title={t("Verge Setting")}>
       <ThemeViewer ref={themeRef} />
@@ -123,7 +138,12 @@ const SettingVerge = ({ onError }: Props) => {
         </SettingItem>
       )}
 
-      <SettingItem label={t("Copy Env Type")}>
+      <SettingItem
+        label={t("Copy Env Type")}
+        extra={
+          <TooltipIcon icon={ContentCopyRounded} onClick={onCopyClashEnv} />
+        }
+      >
         <GuardState
           value={env_type ?? (OS === "windows" ? "powershell" : "bash")}
           onCatch={onError}

+ 1 - 0
src/locales/en.json

@@ -277,6 +277,7 @@
   "Tray Click Event": "Tray Click Event",
   "Show Main Window": "Show Main Window",
   "Copy Env Type": "Copy Env Type",
+  "Copy Success": "Copy Success",
   "Start Page": "Start Page",
   "Startup Script": "Startup Script",
   "Browse": "Browse",

+ 1 - 0
src/locales/fa.json

@@ -275,6 +275,7 @@
   "Tray Click Event": "رویداد کلیک در سینی سیستم",
   "Show Main Window": "نمایش پنجره اصلی",
   "Copy Env Type": "کپی نوع محیط",
+  "Copy Success": "کپی با موفقیت انجام شد",
   "Start Page": "صفحه شروع",
   "Startup Script": "اسکریپت راه‌اندازی",
   "Browse": "مرور کردن",

+ 1 - 0
src/locales/ru.json

@@ -275,6 +275,7 @@
   "Tray Click Event": "Событие щелчка в лотке",
   "Show Main Window": "Показать главное окно",
   "Copy Env Type": "Скопировать тип Env",
+  "Copy Success": "Скопировано",
   "Start Page": "Главная страница",
   "Startup Script": "Скрипт запуска",
   "Browse": "Просмотреть",

+ 1 - 0
src/locales/zh.json

@@ -277,6 +277,7 @@
   "Tray Click Event": "托盘点击事件",
   "Show Main Window": "显示主窗口",
   "Copy Env Type": "复制环境变量类型",
+  "Copy Success": "复制成功",
   "Start Page": "启动页面",
   "Startup Script": "启动脚本",
   "Browse": "浏览",

+ 4 - 0
src/services/cmds.ts

@@ -2,6 +2,10 @@ import dayjs from "dayjs";
 import { invoke } from "@tauri-apps/api/tauri";
 import { Notice } from "@/components/base";
 
+export async function copyClashEnv() {
+  return invoke<void>("copy_clash_env");
+}
+
 export async function getClashLogs() {
   const regex = /time="(.+?)"\s+level=(.+?)\s+msg="(.+?)"/;
   const newRegex = /(.+?)\s+(.+?)\s+(.+)/;