From 3dd436d8374e93228aa7bb77cfd9ed5f06b26e88 Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Thu, 1 Aug 2024 09:30:14 +0800 Subject: [PATCH] adjust the sidebar --- src/main/cmds.ts | 12 ++-- src/main/mihomo-api.ts | 11 +++ src/renderer/src/App.tsx | 67 ++++++++++--------- src/renderer/src/assets/main.css | 4 ++ .../components/sider/mihomo-core-card.tsx.tsx | 17 +++-- .../sider/outbound-mode-switcher.tsx | 8 ++- .../components/sider/sysproxy-switcher.tsx | 21 ++++-- .../src/components/sider/tun-switcher.tsx | 14 +++- src/renderer/src/hooks/use-config.tsx | 2 +- .../src/hooks/use-controled-mihomo-config.tsx | 4 +- src/renderer/src/pages/mihomo.tsx | 5 ++ src/renderer/src/pages/settings.tsx | 3 +- src/renderer/src/pages/syspeoxy.tsx | 5 ++ src/renderer/src/pages/tun.tsx | 5 ++ src/renderer/src/routes/index.tsx | 15 +++++ src/renderer/src/utils/ipc.ts | 8 +++ 16 files changed, 143 insertions(+), 58 deletions(-) create mode 100644 src/renderer/src/pages/mihomo.tsx create mode 100644 src/renderer/src/pages/syspeoxy.tsx create mode 100644 src/renderer/src/pages/tun.tsx diff --git a/src/main/cmds.ts b/src/main/cmds.ts index d80d9b5..c0b481a 100644 --- a/src/main/cmds.ts +++ b/src/main/cmds.ts @@ -1,5 +1,5 @@ import { ipcMain } from 'electron' -import { mihomoVersion } from './mihomo-api' +import { mihomoConfig, mihomoVersion, patchMihomoConfig } from './mihomo-api' import { checkAutoRun, disableAutoRun, enableAutoRun } from './autoRun' import { getAppConfig, @@ -12,17 +12,15 @@ import { restartCore } from './manager' export function registerIpcMainHandlers(): void { ipcMain.handle('mihomoVersion', mihomoVersion) + ipcMain.handle('mihomoConfig', mihomoConfig) + ipcMain.handle('patchMihomoConfig', async (_e, patch) => await patchMihomoConfig(patch)) ipcMain.handle('checkAutoRun', checkAutoRun) ipcMain.handle('enableAutoRun', enableAutoRun) ipcMain.handle('disableAutoRun', disableAutoRun) ipcMain.handle('getAppConfig', (_e, force) => getAppConfig(force)) - ipcMain.handle('setAppConfig', (_e, config) => { - setAppConfig(config) - }) + ipcMain.handle('setAppConfig', (_e, config) => setAppConfig(config)) ipcMain.handle('getControledMihomoConfig', (_e, force) => getControledMihomoConfig(force)) - ipcMain.handle('setControledMihomoConfig', (_e, config) => { - setControledMihomoConfig(config) - }) + ipcMain.handle('setControledMihomoConfig', (_e, config) => setControledMihomoConfig(config)) ipcMain.handle('getProfileConfig', (_e, force) => getProfileConfig(force)) ipcMain.handle('restartCore', () => restartCore()) } diff --git a/src/main/mihomo-api.ts b/src/main/mihomo-api.ts index 45b8d4c..2e70ba5 100644 --- a/src/main/mihomo-api.ts +++ b/src/main/mihomo-api.ts @@ -26,3 +26,14 @@ export async function mihomoVersion(): Promise { const instance = await getAxios() return instance.get('/version') as Promise } + +export const mihomoConfig = async (): Promise => { + const instance = await getAxios() + return instance.get('/configs') as Promise +} + +/// Update current configs +export const patchMihomoConfig = async (patch: Partial): Promise => { + const instance = await getAxios() + return instance.patch('/configs', patch) +} diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 346da42..bf115d0 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -42,46 +42,49 @@ const App: React.FC = () => { return (
-
-
-

出站模式

-
+
-
+
-

代理模式

-
+ {/*

代理模式

*/} +
-

配置

-
-
- - - -
- -
- - -
-
- - -
+ {/*

配置

*/} + {/*
*/} +
+ + +
+ +
+ + +
+
+ + +
+ {/*
*/}
{page}
diff --git a/src/renderer/src/assets/main.css b/src/renderer/src/assets/main.css index 4fb681a..59d4ad9 100644 --- a/src/renderer/src/assets/main.css +++ b/src/renderer/src/assets/main.css @@ -2,6 +2,10 @@ @tailwind components; @tailwind utilities; +.no-scrollbar::-webkit-scrollbar { + display: none; +} + *::-webkit-scrollbar { width: 8px; height: 6px; diff --git a/src/renderer/src/components/sider/mihomo-core-card.tsx.tsx b/src/renderer/src/components/sider/mihomo-core-card.tsx.tsx index 5911d6d..e6b472c 100644 --- a/src/renderer/src/components/sider/mihomo-core-card.tsx.tsx +++ b/src/renderer/src/components/sider/mihomo-core-card.tsx.tsx @@ -11,22 +11,27 @@ import { import { useAppConfig } from '@renderer/hooks/use-config' import { mihomoVersion, restartCore } from '@renderer/utils/ipc' import { IoMdRefresh } from 'react-icons/io' +import { useLocation, useNavigate } from 'react-router-dom' import useSWR from 'swr' const CoreMap = { - mihomo: 'Mihomo', - 'mihomo-alpha': 'Mihomo Alpha' + mihomo: '稳定版', + 'mihomo-alpha': '预览版' } const MihomoCoreCard: React.FC = () => { const { data: version, mutate } = useSWR('mihomoVersion', mihomoVersion) const { appConfig, patchAppConfig } = useAppConfig() const { core } = appConfig || {} + const navigate = useNavigate() + const location = useLocation() return ( navigate('/mihomo')} + className={`mb-2 ${location.pathname.includes('/mihomo') ? 'bg-primary' : ''}`} >
@@ -49,7 +54,7 @@ const MihomoCoreCard: React.FC = () => { - @@ -60,8 +65,8 @@ const MihomoCoreCard: React.FC = () => { await mutate() }} > - Mihomo - Mihomo Alpha + {CoreMap['mihomo']} + {CoreMap['mihomo-alpha']} diff --git a/src/renderer/src/components/sider/outbound-mode-switcher.tsx b/src/renderer/src/components/sider/outbound-mode-switcher.tsx index 7e3f50a..b15e129 100644 --- a/src/renderer/src/components/sider/outbound-mode-switcher.tsx +++ b/src/renderer/src/components/sider/outbound-mode-switcher.tsx @@ -1,17 +1,23 @@ import { Tabs, Tab } from '@nextui-org/react' import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config' +import { patchMihomoConfig } from '@renderer/utils/ipc' import { Key } from 'react' const OutboundModeSwitcher: React.FC = () => { const { controledMihomoConfig, patchControledMihomoConfig } = useControledMihomoConfig() const { mode } = controledMihomoConfig || {} + const onChangeMode = async (mode: OutboundMode): Promise => { + await patchControledMihomoConfig({ mode }) + await patchMihomoConfig({ mode }) + } + return ( patchControledMihomoConfig({ mode: key as OutboundMode })} + onSelectionChange={(key: Key) => onChangeMode(key as OutboundMode)} > { + const navigate = useNavigate() + const location = useLocation() + return ( - + navigate('/sysproxy')} + >
-
diff --git a/src/renderer/src/components/sider/tun-switcher.tsx b/src/renderer/src/components/sider/tun-switcher.tsx index c51c5ad..b8c9f9e 100644 --- a/src/renderer/src/components/sider/tun-switcher.tsx +++ b/src/renderer/src/components/sider/tun-switcher.tsx @@ -1,13 +1,21 @@ import { Button, Card, CardBody, CardFooter, Switch } from '@nextui-org/react' -import { IoSettings } from 'react-icons/io5' +import { TbDeviceIpadHorizontalBolt } from 'react-icons/tb' +import { useLocation, useNavigate } from 'react-router-dom' const TunSwitcher: React.FC = () => { + const navigate = useNavigate() + const location = useLocation() + return ( - + navigate('/tun')} + >
diff --git a/src/renderer/src/hooks/use-config.tsx b/src/renderer/src/hooks/use-config.tsx index 0748162..1bafa04 100644 --- a/src/renderer/src/hooks/use-config.tsx +++ b/src/renderer/src/hooks/use-config.tsx @@ -12,7 +12,7 @@ export const useAppConfig = (): RetuenType => { const patchAppConfig = async (value: Partial): Promise => { await setAppConfig(value) - await mutateAppConfig() + mutateAppConfig() } return { diff --git a/src/renderer/src/hooks/use-controled-mihomo-config.tsx b/src/renderer/src/hooks/use-controled-mihomo-config.tsx index d7aafa8..dd4dfb7 100644 --- a/src/renderer/src/hooks/use-controled-mihomo-config.tsx +++ b/src/renderer/src/hooks/use-controled-mihomo-config.tsx @@ -4,7 +4,7 @@ import { getControledMihomoConfig, setControledMihomoConfig } from '@renderer/ut interface RetuenType { controledMihomoConfig: Partial | undefined mutateControledMihomoConfig: () => void - patchControledMihomoConfig: (value: Partial) => void + patchControledMihomoConfig: (value: Partial) => Promise } export const useControledMihomoConfig = (): RetuenType => { @@ -15,7 +15,7 @@ export const useControledMihomoConfig = (): RetuenType => { const patchControledMihomoConfig = async (value: Partial): Promise => { await setControledMihomoConfig(value) - await mutateControledMihomoConfig() + mutateControledMihomoConfig() } return { diff --git a/src/renderer/src/pages/mihomo.tsx b/src/renderer/src/pages/mihomo.tsx new file mode 100644 index 0000000..f05f142 --- /dev/null +++ b/src/renderer/src/pages/mihomo.tsx @@ -0,0 +1,5 @@ +const Mihomo: React.FC = () => { + return
Mihomo
+} + +export default Mihomo diff --git a/src/renderer/src/pages/settings.tsx b/src/renderer/src/pages/settings.tsx index 74df5fb..6581a78 100644 --- a/src/renderer/src/pages/settings.tsx +++ b/src/renderer/src/pages/settings.tsx @@ -43,7 +43,7 @@ const Settings: React.FC = () => { } else { disableAutoRun() } - mutate(v) + mutate() }} /> @@ -53,7 +53,6 @@ const Settings: React.FC = () => { isSelected={silentStart} onValueChange={(v) => { patchAppConfig({ silentStart: v }) - mutate() }} /> diff --git a/src/renderer/src/pages/syspeoxy.tsx b/src/renderer/src/pages/syspeoxy.tsx new file mode 100644 index 0000000..533d080 --- /dev/null +++ b/src/renderer/src/pages/syspeoxy.tsx @@ -0,0 +1,5 @@ +const Sysproxy: React.FC = () => { + return
Sysproxy
+} + +export default Sysproxy diff --git a/src/renderer/src/pages/tun.tsx b/src/renderer/src/pages/tun.tsx new file mode 100644 index 0000000..18f81a4 --- /dev/null +++ b/src/renderer/src/pages/tun.tsx @@ -0,0 +1,5 @@ +const Tun: React.FC = () => { + return
Tun
+} + +export default Tun diff --git a/src/renderer/src/routes/index.tsx b/src/renderer/src/routes/index.tsx index 9cf4b56..5e07953 100644 --- a/src/renderer/src/routes/index.tsx +++ b/src/renderer/src/routes/index.tsx @@ -6,8 +6,23 @@ import Settings from '@renderer/pages/settings' import Profiles from '@renderer/pages/profiles' import Logs from '@renderer/pages/logs' import Connections from '@renderer/pages/connections' +import Mihomo from '@renderer/pages/mihomo' +import Sysproxy from '@renderer/pages/syspeoxy' +import Tun from '@renderer/pages/tun' const routes = [ + { + path: '/mihomo', + element: + }, + { + path: '/sysproxy', + element: + }, + { + path: '/tun', + element: + }, { path: '/proxies', element: diff --git a/src/renderer/src/utils/ipc.ts b/src/renderer/src/utils/ipc.ts index ef52cd5..dba279c 100644 --- a/src/renderer/src/utils/ipc.ts +++ b/src/renderer/src/utils/ipc.ts @@ -2,6 +2,14 @@ export async function mihomoVersion(): Promise { return await window.electron.ipcRenderer.invoke('mihomoVersion') } +export async function mihomoConfig(): Promise { + return await window.electron.ipcRenderer.invoke('mihomoConfig') +} + +export async function patchMihomoConfig(patch: Partial): Promise { + await window.electron.ipcRenderer.invoke('patchMihomoConfig', patch) +} + export async function checkAutoRun(): Promise { return await window.electron.ipcRenderer.invoke('checkAutoRun') }