diff --git a/src/main/config/profile.ts b/src/main/config/profile.ts index 0dda953..d756eca 100644 --- a/src/main/config/profile.ts +++ b/src/main/config/profile.ts @@ -1,6 +1,6 @@ import { getControledMihomoConfig } from './controledMihomo' import { profileConfigPath, profilePath } from '../utils/dirs' -import { startCore } from '../core/manager' +import { restartCore } from '../core/manager' import { getAppConfig } from './app' import { window } from '..' import axios from 'axios' @@ -8,7 +8,6 @@ import yaml from 'yaml' import fs from 'fs' import { dialog } from 'electron' import { addProfileUpdater } from '../core/profileUpdater' -import { pauseWebsockets } from '../core/mihomoApi' let profileConfig: IProfileConfig // profile.yaml @@ -28,9 +27,7 @@ export async function changeCurrentProfile(id: string): Promise { const oldId = getProfileConfig().current profileConfig.current = id try { - const recover = pauseWebsockets() - await startCore() - recover() + await restartCore() } catch (e) { profileConfig.current = oldId } finally { @@ -180,9 +177,7 @@ export function getProfileStr(id: string): string { export async function setProfileStr(id: string, content: string): Promise { fs.writeFileSync(profilePath(id), content, 'utf-8') if (id === getProfileConfig().current) { - const recover = pauseWebsockets() - await startCore() - recover() + await restartCore() } } diff --git a/src/main/core/manager.ts b/src/main/core/manager.ts index 7307192..cd78f2f 100644 --- a/src/main/core/manager.ts +++ b/src/main/core/manager.ts @@ -10,6 +10,7 @@ import { generateProfile } from '../resolve/factory' import { getAppConfig, setAppConfig } from '../config' import { dialog, safeStorage } from 'electron' import fs from 'fs' +import { pauseWebsockets } from './mihomoApi' let child: ChildProcess let retry = 10 @@ -82,6 +83,12 @@ export function stopCore(): void { } } +export async function restartCore(): Promise { + const recover = pauseWebsockets() + await startCore() + recover() +} + export function checkProfile(): Promise { const corePath = mihomoCorePath(getAppConfig().core ?? 'mihomo') return new Promise((resolve, reject) => { diff --git a/src/main/utils/ipc.ts b/src/main/utils/ipc.ts index 438d9f5..fed3136 100644 --- a/src/main/utils/ipc.ts +++ b/src/main/utils/ipc.ts @@ -14,7 +14,6 @@ import { mihomoUpgradeGeo, mihomoVersion, patchMihomoConfig, - pauseWebsockets, startMihomoConnections, startMihomoLogs, stopMihomoConnections, @@ -36,7 +35,7 @@ import { setProfileStr, updateProfileItem } from '../config' -import { isEncryptionAvailable, startCore } from '../core/manager' +import { isEncryptionAvailable, restartCore } from '../core/manager' import { triggerSysProxy } from '../resolve/sysproxy' import { checkUpdate } from '../resolve/autoUpdater' import { exePath, mihomoCorePath, mihomoWorkConfigPath, resourcesDir } from './dirs' @@ -80,11 +79,7 @@ export function registerIpcMainHandlers(): void { ipcMain.handle('changeCurrentProfile', (_e, id) => changeCurrentProfile(id)) ipcMain.handle('addProfileItem', (_e, item) => addProfileItem(item)) ipcMain.handle('removeProfileItem', (_e, id) => removeProfileItem(id)) - ipcMain.handle('restartCore', async () => { - const recover = pauseWebsockets() - await startCore() - recover() - }) + ipcMain.handle('restartCore', restartCore) ipcMain.handle('triggerSysProxy', (_e, enable) => triggerSysProxy(enable)) ipcMain.handle('isEncryptionAvailable', isEncryptionAvailable) ipcMain.handle('encryptString', (_e, str) => safeStorage.encryptString(str)) diff --git a/src/renderer/src/components/base/base-password-modal.tsx b/src/renderer/src/components/base/base-password-modal.tsx index f53b54d..c146c2a 100644 --- a/src/renderer/src/components/base/base-password-modal.tsx +++ b/src/renderer/src/components/base/base-password-modal.tsx @@ -19,7 +19,7 @@ const BasePasswordModal: React.FC = (props) => { const [password, setPassword] = useState('') return ( - + 请输入root密码 diff --git a/src/renderer/src/components/connections/connection-detail-modal.tsx b/src/renderer/src/components/connections/connection-detail-modal.tsx index 4792030..c0a3c54 100644 --- a/src/renderer/src/components/connections/connection-detail-modal.tsx +++ b/src/renderer/src/components/connections/connection-detail-modal.tsx @@ -8,7 +8,14 @@ const ConnectionDetailModal: React.FC = (props) => { const { connection, onClose } = props return ( - + 连接详情 diff --git a/src/renderer/src/components/profiles/edit-file-modal.tsx b/src/renderer/src/components/profiles/edit-file-modal.tsx index a9f2277..406b8fc 100644 --- a/src/renderer/src/components/profiles/edit-file-modal.tsx +++ b/src/renderer/src/components/profiles/edit-file-modal.tsx @@ -32,7 +32,14 @@ const EditFileModal: React.FC = (props) => { }, []) return ( - + 编辑订阅 diff --git a/src/renderer/src/components/profiles/edit-info-modal.tsx b/src/renderer/src/components/profiles/edit-info-modal.tsx index daa7bb5..ea8fb9b 100644 --- a/src/renderer/src/components/profiles/edit-info-modal.tsx +++ b/src/renderer/src/components/profiles/edit-info-modal.tsx @@ -25,7 +25,13 @@ const EditInfoModal: React.FC = (props) => { } return ( - + 编辑信息 diff --git a/src/renderer/src/components/sider/config-viewer.tsx b/src/renderer/src/components/sider/config-viewer.tsx index 2faabfd..3c2ba6a 100644 --- a/src/renderer/src/components/sider/config-viewer.tsx +++ b/src/renderer/src/components/sider/config-viewer.tsx @@ -31,7 +31,14 @@ const ConfigViewer: React.FC = (props) => { }, []) return ( - + 当前运行时配置 diff --git a/src/renderer/src/components/sider/profile-card.tsx b/src/renderer/src/components/sider/profile-card.tsx index 0bf69e2..186c21a 100644 --- a/src/renderer/src/components/sider/profile-card.tsx +++ b/src/renderer/src/components/sider/profile-card.tsx @@ -32,86 +32,90 @@ const ProfileCard: React.FC = () => { const total = extra?.total ?? 0 return ( - navigate('/profiles')} - > + <> {showRuntimeConfig && setShowRuntimeConfig(false)} />} - -
-

- {info?.name} -

-
- - {info.type === 'remote' && ( + {info?.name} + +
- )} + {info.type === 'remote' && ( + + )} +
-
- {info.type === 'remote' && ( -
- {extra ? `${calcTraffic(usage)}/${calcTraffic(total)}` : undefined} - {dayjs(info.updated).fromNow()} -
- )} - {info.type === 'local' && ( -
- - 本地 - -
- )} -
- - {extra && ( - - )} - -
+ {extra ? `${calcTraffic(usage)}/${calcTraffic(total)}` : undefined} + {dayjs(info.updated).fromNow()} + + )} + {info.type === 'local' && ( +
+ + 本地 + +
+ )} + + + {extra && ( + + )} + + + ) } diff --git a/src/renderer/src/components/sysproxy/pac-editor-modal.tsx b/src/renderer/src/components/sysproxy/pac-editor-modal.tsx index 2d0821c..57a1467 100644 --- a/src/renderer/src/components/sysproxy/pac-editor-modal.tsx +++ b/src/renderer/src/components/sysproxy/pac-editor-modal.tsx @@ -24,7 +24,14 @@ const PacEditorViewer: React.FC = (props) => { } return ( - + 编辑PAC脚本