Ver Fonte

feat: Support drag and drop local files

MystiPanda há 1 ano atrás
pai
commit
7a3cc7d242
3 ficheiros alterados com 36 adições e 3 exclusões
  1. 1 1
      src-tauri/Cargo.toml
  2. 2 1
      src-tauri/tauri.conf.json
  3. 33 1
      src/pages/profiles.tsx

+ 1 - 1
src-tauri/Cargo.toml

@@ -37,7 +37,7 @@ serde = { version = "1.0", features = ["derive"] }
 reqwest = { version = "0.12", features = ["json", "rustls-tls"] }
 sysproxy = { git="https://github.com/zzzgydi/sysproxy-rs", branch = "main" }
 auto-launch = { git="https://github.com/zzzgydi/auto-launch", branch = "main" }
-tauri = { version = "1.6", features = [ "fs-exists", "path-all", "protocol-asset", "dialog-open", "notification-all", "icon-png", "icon-ico", "clipboard-all", "global-shortcut-all", "process-all", "shell-all", "system-tray", "updater", "window-all", "devtools"] }
+tauri = { version = "1.6", features = [ "fs-read-file", "fs-exists", "path-all", "protocol-asset", "dialog-open", "notification-all", "icon-png", "icon-ico", "clipboard-all", "global-shortcut-all", "process-all", "shell-all", "system-tray", "updater", "window-all", "devtools"] }
 
 [target.'cfg(windows)'.dependencies]
 runas = "=1.2.0"

+ 2 - 1
src-tauri/tauri.conf.json

@@ -69,7 +69,8 @@
       },
       "fs": {
         "exists": true,
-        "scope": ["$APPDATA/**", "$RESOURCE/../**"]
+        "readFile": true,
+        "scope": ["$APPDATA/**", "$RESOURCE/../**", "**"]
       }
     },
     "windows": [],

+ 33 - 1
src/pages/profiles.tsx

@@ -1,5 +1,5 @@
 import useSWR, { mutate } from "swr";
-import { useMemo, useRef, useState } from "react";
+import { useEffect, useMemo, useRef, useState } from "react";
 import { useLockFn } from "ahooks";
 import { useSetRecoilState } from "recoil";
 import { Box, Button, Grid, IconButton, Stack, Divider } from "@mui/material";
@@ -33,6 +33,7 @@ import {
   deleteProfile,
   updateProfile,
   reorderProfile,
+  createProfile,
 } from "@/services/cmds";
 import { atomLoadingCache } from "@/services/states";
 import { closeAllConnections } from "@/services/api";
@@ -49,6 +50,8 @@ import { throttle } from "lodash-es";
 import { useRecoilState } from "recoil";
 import { atomThemeMode } from "@/services/states";
 import { BaseStyledTextField } from "@/components/base/base-styled-text-field";
+import { listen } from "@tauri-apps/api/event";
+import { readTextFile } from "@tauri-apps/api/fs";
 
 const ProfilePage = () => {
   const { t } = useTranslation();
@@ -63,6 +66,35 @@ const ProfilePage = () => {
       coordinateGetter: sortableKeyboardCoordinates,
     })
   );
+
+  useEffect(() => {
+    const unlisten = listen("tauri://file-drop", async (event) => {
+      const fileList = event.payload as string[];
+      for (let file of fileList) {
+        if (!file.endsWith(".yaml") && !file.endsWith(".yml")) {
+          Notice.error("Only support YAML files.");
+          continue;
+        }
+        const item = {
+          type: "local",
+          name: file.split(/\/|\\/).pop() ?? "New Profile",
+          desc: "",
+          url: "",
+          option: {
+            with_proxy: false,
+            self_proxy: false,
+          },
+        } as IProfileItem;
+        let data = await readTextFile(file);
+        await createProfile(item, data);
+        await mutateProfiles();
+      }
+    });
+    return () => {
+      unlisten.then((fn) => fn());
+    };
+  }, []);
+
   const {
     profiles = {},
     activateSelected,