From d8b9d59dbbd2e9fa3eaec4f851c1f687433c8582 Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Sat, 31 Aug 2024 21:50:13 +0800 Subject: [PATCH] support new profile --- changelog.md | 1 + src/main/utils/template.ts | 1 + src/renderer/src/App.tsx | 2 +- .../src/components/base/base-page.tsx | 2 +- src/renderer/src/pages/override.tsx | 72 ++++++++--- src/renderer/src/pages/profiles.tsx | 114 ++++++++++++------ src/renderer/src/pages/proxies.tsx | 7 +- src/renderer/src/pages/settings.tsx | 2 +- 8 files changed, 136 insertions(+), 65 deletions(-) diff --git a/changelog.md b/changelog.md index 885cf69..c2c0e86 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,7 @@ ### New Features - 支持使用外部编辑器打开文件 +- 支持新建订阅/覆写 - 添加窗口置顶按钮 - 允许禁用系统标题栏 - 重写连接页面 diff --git a/src/main/utils/template.ts b/src/main/utils/template.ts index 29ddb15..0ff8f42 100644 --- a/src/main/utils/template.ts +++ b/src/main/utils/template.ts @@ -2,6 +2,7 @@ export const defaultConfig: IAppConfig = { core: 'mihomo', silentStart: false, appTheme: 'system', + useWindowFrame: true, proxyInTray: true, maxLogDays: 7, proxyCols: 'auto', diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 62f4f6a..0482079 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -104,7 +104,7 @@ const App: React.FC = () => { // ignore } } - }, [appTheme]) + }, [appTheme, systemTheme]) const onDragEnd = async (event: DragEndEvent): Promise => { const { active, over } = event diff --git a/src/renderer/src/components/base/base-page.tsx b/src/renderer/src/components/base/base-page.tsx index 991aa52..c7609b1 100644 --- a/src/renderer/src/components/base/base-page.tsx +++ b/src/renderer/src/components/base/base-page.tsx @@ -36,7 +36,7 @@ const BasePage = forwardRef((props, ref) => {
{props.title}
-
+
{props.header}
diff --git a/src/renderer/src/pages/override.tsx b/src/renderer/src/pages/override.tsx index adb4aaf..62ad548 100644 --- a/src/renderer/src/pages/override.tsx +++ b/src/renderer/src/pages/override.tsx @@ -1,4 +1,12 @@ -import { Button, Divider, Input } from '@nextui-org/react' +import { + Button, + Divider, + Dropdown, + DropdownItem, + DropdownMenu, + DropdownTrigger, + Input +} from '@nextui-org/react' import BasePage from '@renderer/components/base/base-page' import { getFilePath, readTextFile } from '@renderer/utils/ipc' import { useEffect, useRef, useState } from 'react' @@ -14,6 +22,7 @@ import { import { SortableContext } from '@dnd-kit/sortable' import { useOverrideConfig } from '@renderer/hooks/use-override-config' import OverrideItem from '@renderer/components/override/override-item' +import { FaPlus } from 'react-icons/fa6' const Override: React.FC = () => { const { @@ -115,7 +124,7 @@ const Override: React.FC = () => { <> - + + { + if (key === 'open') { + try { + const files = await getFilePath(['js', 'yaml']) + if (files?.length) { + const content = await readTextFile(files[0]) + const fileName = files[0].split('/').pop()?.split('\\').pop() + await addOverrideItem({ + name: fileName, + type: 'local', + file: content, + ext: fileName?.endsWith('.js') ? 'js' : 'yaml' + }) + } + } catch (e) { + alert(e) + } + } else if (key === 'new-yaml') { await addOverrideItem({ - name: fileName, + name: '新建YAML', type: 'local', - file: content, - ext: fileName?.endsWith('.js') ? 'js' : 'yaml' + file: '# https://mihomo.party/guides/function/override/yaml/', + ext: 'yaml' + }) + } else if (key === 'new-js') { + await addOverrideItem({ + name: '新建JS', + type: 'local', + file: '// https://mihomo.party/guides/function/override/js/\nfunction main(config) {\n return config\n}', + ext: 'js' }) } - }) - }} - > - 打开 - + }} + > + 打开 + 新建 YAML + 新建 JavaScript + +
diff --git a/src/renderer/src/pages/profiles.tsx b/src/renderer/src/pages/profiles.tsx index 7533188..b1950fc 100644 --- a/src/renderer/src/pages/profiles.tsx +++ b/src/renderer/src/pages/profiles.tsx @@ -1,4 +1,13 @@ -import { Button, Checkbox, Divider, Input } from '@nextui-org/react' +import { + Button, + Checkbox, + Divider, + Dropdown, + DropdownItem, + DropdownMenu, + DropdownTrigger, + Input +} from '@nextui-org/react' import BasePage from '@renderer/components/base/base-page' import ProfileItem from '@renderer/components/profiles/profile-item' import { useProfileConfig } from '@renderer/hooks/use-profile-config' @@ -14,6 +23,7 @@ import { DragEndEvent } from '@dnd-kit/core' import { SortableContext } from '@dnd-kit/sortable' +import { FaPlus } from 'react-icons/fa6' const Profiles: React.FC = () => { const { @@ -101,27 +111,38 @@ const Profiles: React.FC = () => { ref={pageRef} title="订阅管理" header={ - + <> + + + } >
@@ -165,25 +186,38 @@ const Profiles: React.FC = () => { > 导入 - + + { + if (key === 'open') { + try { + const files = await getFilePath(['yml', 'yaml']) + if (files?.length) { + const content = await readTextFile(files[0]) + const fileName = files[0].split('/').pop()?.split('\\').pop() + await addProfileItem({ name: fileName, type: 'local', file: content }) + } + } catch (e) { + alert(e) + } + } else if (key === 'new') { + await addProfileItem({ + name: '新建订阅', + type: 'local', + file: 'proxies: []\nproxy-groups: []\nrules: []' + }) } - } catch (e) { - alert(e) - } - }} - > - 打开 - + }} + > + 打开 + 新建 + +
diff --git a/src/renderer/src/pages/proxies.tsx b/src/renderer/src/pages/proxies.tsx index fe0f796..26a4559 100644 --- a/src/renderer/src/pages/proxies.tsx +++ b/src/renderer/src/pages/proxies.tsx @@ -110,10 +110,11 @@ const Proxies: React.FC = () => { + <> - + } >
diff --git a/src/renderer/src/pages/settings.tsx b/src/renderer/src/pages/settings.tsx index aa3d527..7305b2d 100644 --- a/src/renderer/src/pages/settings.tsx +++ b/src/renderer/src/pages/settings.tsx @@ -18,7 +18,7 @@ const Settings: React.FC = () => { isIconOnly size="sm" title="官方文档" - className="app-nodrag mr-2" + className="app-nodrag" onPress={() => { window.open('https://mihomo.party') }}