diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs index dd474e88..5576ca88 100644 --- a/src-tauri/src/cmds.rs +++ b/src-tauri/src/cmds.rs @@ -322,6 +322,17 @@ pub fn copy_icon_file(path: String, name: String) -> CmdResult { } } +#[tauri::command] +pub fn get_network_interfaces() -> Vec { + use sysinfo::Networks; + let mut result = Vec::new(); + let networks = Networks::new_with_refreshed_list(); + for (interface_name, _) in &networks { + result.push(interface_name.clone()); + } + return result; +} + #[tauri::command] pub fn open_devtools(app_handle: tauri::AppHandle) { if let Some(window) = app_handle.get_window("main") { diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index dbdd162b..fb11e443 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -51,6 +51,7 @@ fn main() -> std::io::Result<()> { cmds::open_web_url, cmds::open_core_dir, cmds::get_portable_flag, + cmds::get_network_interfaces, // cmds::kill_sidecar, cmds::restart_sidecar, // clash diff --git a/src/components/profile/groups-editor-viewer.tsx b/src/components/profile/groups-editor-viewer.tsx index ac42c161..c031ba55 100644 --- a/src/components/profile/groups-editor-viewer.tsx +++ b/src/components/profile/groups-editor-viewer.tsx @@ -1,4 +1,4 @@ -import { ReactNode, useEffect, useMemo, useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { useLockFn } from "ahooks"; import yaml from "js-yaml"; import { useTranslation } from "react-i18next"; @@ -30,7 +30,11 @@ import { styled, } from "@mui/material"; import { GroupItem } from "@/components/profile/group-item"; -import { readProfileFile, saveProfileFile } from "@/services/cmds"; +import { + getNetworkInterfaces, + readProfileFile, + saveProfileFile, +} from "@/services/cmds"; import { Notice, Switch } from "@/components/base"; import getSystem from "@/utils/get-system"; import { BaseSearchBox } from "../base/base-search-box"; @@ -60,7 +64,7 @@ export const GroupsEditorViewer = (props: Props) => { const [currData, setCurrData] = useState(""); const [visualization, setVisualization] = useState(true); const [match, setMatch] = useState(() => (_: string) => true); - + const [interfaceNameList, setInterfaceNameList] = useState([]); const { control, watch, register, ...formIns } = useForm({ defaultValues: { type: "select", @@ -251,6 +255,10 @@ export const GroupsEditorViewer = (props: Props) => { setProxyProviderList(Object.keys(provider)); setGroupList(originGroupsObj?.["proxy-groups"] || []); }; + const getInterfaceNameList = async () => { + let list = await getNetworkInterfaces(); + setInterfaceNameList(list); + }; useEffect(() => { fetchProxyPolicy(); }, [prependSeq, appendSeq, deleteSeq]); @@ -259,6 +267,7 @@ export const GroupsEditorViewer = (props: Props) => { fetchContent(); fetchProxyPolicy(); fetchProfile(); + getInterfaceNameList(); }, [open]); const validateGroup = () => { @@ -485,11 +494,13 @@ export const GroupsEditorViewer = (props: Props) => { render={({ field }) => ( - value && field.onChange(value)} + renderInput={(params) => } /> )} diff --git a/src/components/profile/profile-item.tsx b/src/components/profile/profile-item.tsx index ecaadff0..54a45ec8 100644 --- a/src/components/profile/profile-item.tsx +++ b/src/components/profile/profile-item.tsx @@ -475,64 +475,78 @@ export const ProfileItem = (props: Props) => { ))} + {fileOpen && ( + { + await saveProfileFile(uid, curr ?? ""); + onSave && onSave(prev, curr); + }} + onClose={() => setFileOpen(false)} + /> + )} + {rulesOpen && ( + setRulesOpen(false)} + /> + )} + {proxiesOpen && ( + setProxiesOpen(false)} + /> + )} + {groupsOpen && ( + { + setGroupsOpen(false); + }} + /> + )} + {mergeOpen && ( + { + await saveProfileFile(option?.merge ?? "", curr ?? ""); + onSave && onSave(prev, curr); + }} + onClose={() => setMergeOpen(false)} + /> + )} + {scriptOpen && ( + { + await saveProfileFile(option?.script ?? "", curr ?? ""); + onSave && onSave(prev, curr); + }} + onClose={() => setScriptOpen(false)} + /> + )} - { - await saveProfileFile(uid, curr ?? ""); - onSave && onSave(prev, curr); - }} - onClose={() => setFileOpen(false)} - /> - setRulesOpen(false)} - /> - setProxiesOpen(false)} - /> - setGroupsOpen(false)} - /> - { - await saveProfileFile(option?.merge ?? "", curr ?? ""); - onSave && onSave(prev, curr); - }} - onClose={() => setMergeOpen(false)} - /> - { - await saveProfileFile(option?.script ?? "", curr ?? ""); - onSave && onSave(prev, curr); - }} - onClose={() => setScriptOpen(false)} - /> { ))} - - { - await saveProfileFile(id, curr ?? ""); - onSave && onSave(prev, curr); - }} - onClose={() => setFileOpen(false)} - /> - - setLogOpen(false)} - /> + {fileOpen && ( + { + await saveProfileFile(id, curr ?? ""); + onSave && onSave(prev, curr); + }} + onClose={() => setFileOpen(false)} + /> + )} + {logOpen && ( + setLogOpen(false)} + /> + )} ); }; diff --git a/src/components/setting/mods/config-viewer.tsx b/src/components/setting/mods/config-viewer.tsx index 76d8c48a..a2370f93 100644 --- a/src/components/setting/mods/config-viewer.tsx +++ b/src/components/setting/mods/config-viewer.tsx @@ -20,9 +20,10 @@ export const ConfigViewer = forwardRef((_, ref) => { close: () => setOpen(false), })); + if (!open) return null; return ( {t("Runtime Config")} diff --git a/src/components/setting/mods/sysproxy-viewer.tsx b/src/components/setting/mods/sysproxy-viewer.tsx index 41e04664..05bfcbd5 100644 --- a/src/components/setting/mods/sysproxy-viewer.tsx +++ b/src/components/setting/mods/sysproxy-viewer.tsx @@ -261,20 +261,22 @@ export const SysproxyViewer = forwardRef((props, ref) => { > {t("Edit")} PAC - { - let pac = DEFAULT_PAC; - if (curr && curr.trim().length > 0) { - pac = curr; - } - setValue((v) => ({ ...v, pac_content: pac })); - }} - onClose={() => setEditorOpen(false)} - /> + {editorOpen && ( + { + let pac = DEFAULT_PAC; + if (curr && curr.trim().length > 0) { + pac = curr; + } + setValue((v) => ({ ...v, pac_content: pac })); + }} + onClose={() => setEditorOpen(false)} + /> + )} )} diff --git a/src/components/setting/mods/theme-viewer.tsx b/src/components/setting/mods/theme-viewer.tsx index 8d52d7fb..5daccec2 100644 --- a/src/components/setting/mods/theme-viewer.tsx +++ b/src/components/setting/mods/theme-viewer.tsx @@ -123,19 +123,21 @@ export const ThemeViewer = forwardRef((props, ref) => { > {t("Edit")} CSS - { - theme.css_injection = curr; - handleChange("css_injection"); - }} - onClose={() => { - setEditorOpen(false); - }} - /> + {editorOpen && ( + { + theme.css_injection = curr; + handleChange("css_injection"); + }} + onClose={() => { + setEditorOpen(false); + }} + /> + )} diff --git a/src/services/cmds.ts b/src/services/cmds.ts index f15c95c2..23c696e3 100644 --- a/src/services/cmds.ts +++ b/src/services/cmds.ts @@ -233,3 +233,7 @@ export async function copyIconFile( export async function downloadIconCache(url: string, name: string) { return invoke("download_icon_cache", { url, name }); } + +export async function getNetworkInterfaces() { + return invoke("get_network_interfaces"); +}