mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2026-02-11 12:10:28 +08:00
Compare commits
No commits in common. "56e328191fa09199c1bde916bf315623a95fe698" and "72dd214ef0b0594b89398626d0dfcf20a1781a7c" have entirely different histories.
56e328191f
...
72dd214ef0
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -7,6 +7,5 @@
|
|||||||
},
|
},
|
||||||
"[json]": {
|
"[json]": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
},
|
}
|
||||||
"terminal.integrated.defaultProfile.windows": "PowerShell"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,8 +48,8 @@ export async function addOverrideItem(item: Partial<IOverrideItem>): Promise<voi
|
|||||||
await updateOverrideItem(newItem)
|
await updateOverrideItem(newItem)
|
||||||
} else {
|
} else {
|
||||||
config.items.push(newItem)
|
config.items.push(newItem)
|
||||||
await setOverrideConfig(config)
|
|
||||||
}
|
}
|
||||||
|
await setOverrideConfig(config)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function removeOverrideItem(id: string): Promise<void> {
|
export async function removeOverrideItem(id: string): Promise<void> {
|
||||||
|
|||||||
@ -134,7 +134,7 @@ interface CoreConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 准备核心配置
|
// 准备核心配置
|
||||||
async function prepareCore(detached: boolean, skipStop = false): Promise<CoreConfig> {
|
async function prepareCore(detached: boolean): Promise<CoreConfig> {
|
||||||
const [appConfig, mihomoConfig] = await Promise.all([
|
const [appConfig, mihomoConfig] = await Promise.all([
|
||||||
getAppConfig(),
|
getAppConfig(),
|
||||||
getControledMihomoConfig()
|
getControledMihomoConfig()
|
||||||
@ -144,7 +144,8 @@ async function prepareCore(detached: boolean, skipStop = false): Promise<CoreCon
|
|||||||
core = 'mihomo',
|
core = 'mihomo',
|
||||||
autoSetDNS = true,
|
autoSetDNS = true,
|
||||||
diffWorkDir = false,
|
diffWorkDir = false,
|
||||||
mihomoCpuPriority = 'PRIORITY_NORMAL'
|
mihomoCpuPriority = 'PRIORITY_NORMAL',
|
||||||
|
testProfileOnStart = true
|
||||||
} = appConfig
|
} = appConfig
|
||||||
|
|
||||||
const { 'log-level': logLevel = 'info' as LogLevel, tun } = mihomoConfig
|
const { 'log-level': logLevel = 'info' as LogLevel, tun } = mihomoConfig
|
||||||
@ -167,10 +168,10 @@ async function prepareCore(detached: boolean, skipStop = false): Promise<CoreCon
|
|||||||
|
|
||||||
// generateProfile 返回实际使用的 current
|
// generateProfile 返回实际使用的 current
|
||||||
const current = await generateProfile()
|
const current = await generateProfile()
|
||||||
|
if (testProfileOnStart) {
|
||||||
await checkProfile(current, core, diffWorkDir)
|
await checkProfile(current, core, diffWorkDir)
|
||||||
if (!skipStop) {
|
|
||||||
await stopCore()
|
|
||||||
}
|
}
|
||||||
|
await stopCore()
|
||||||
await cleanupSocketFile()
|
await cleanupSocketFile()
|
||||||
|
|
||||||
// 设置 DNS
|
// 设置 DNS
|
||||||
@ -322,8 +323,8 @@ function setupCoreListeners(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 启动核心
|
// 启动核心
|
||||||
export async function startCore(detached = false, skipStop = false): Promise<Promise<void>[]> {
|
export async function startCore(detached = false): Promise<Promise<void>[]> {
|
||||||
const config = await prepareCore(detached, skipStop)
|
const config = await prepareCore(detached)
|
||||||
child = spawnCoreProcess(config)
|
child = spawnCoreProcess(config)
|
||||||
|
|
||||||
if (detached) {
|
if (detached) {
|
||||||
@ -376,34 +377,11 @@ export async function restartCore(): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isRestarting = true
|
isRestarting = true
|
||||||
let retryCount = 0
|
|
||||||
const maxRetries = 3
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 先显式停止核心,确保状态干净
|
await startCore()
|
||||||
await stopCore()
|
|
||||||
|
|
||||||
// 尝试启动核心,失败时重试
|
|
||||||
while (retryCount < maxRetries) {
|
|
||||||
try {
|
|
||||||
// skipStop=true 因为我们已经在上面停止了核心
|
|
||||||
await startCore(false, true)
|
|
||||||
return // 成功启动,退出函数
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
retryCount++
|
managerLogger.error('restart core failed', e)
|
||||||
managerLogger.error(`restart core failed (attempt ${retryCount}/${maxRetries})`, e)
|
|
||||||
|
|
||||||
if (retryCount >= maxRetries) {
|
|
||||||
throw e
|
throw e
|
||||||
}
|
|
||||||
|
|
||||||
// 重试前等待一段时间
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000 * retryCount))
|
|
||||||
// 确保清理干净再重试
|
|
||||||
await stopCore()
|
|
||||||
await cleanupSocketFile()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
} finally {
|
||||||
isRestarting = false
|
isRestarting = false
|
||||||
}
|
}
|
||||||
|
|||||||
@ -76,7 +76,6 @@ async function createFloatingWindow(): Promise<void> {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// IPC 监听器
|
// IPC 监听器
|
||||||
ipcMain.removeAllListeners('updateFloatingWindow')
|
|
||||||
ipcMain.on('updateFloatingWindow', () => {
|
ipcMain.on('updateFloatingWindow', () => {
|
||||||
if (floatingWindow) {
|
if (floatingWindow) {
|
||||||
floatingWindow.webContents.send('controledMihomoConfigUpdated')
|
floatingWindow.webContents.send('controledMihomoConfigUpdated')
|
||||||
@ -131,8 +130,8 @@ export async function triggerFloatingWindow(): Promise<void> {
|
|||||||
|
|
||||||
export async function closeFloatingWindow(): Promise<void> {
|
export async function closeFloatingWindow(): Promise<void> {
|
||||||
if (floatingWindow) {
|
if (floatingWindow) {
|
||||||
ipcMain.removeAllListeners('updateFloatingWindow')
|
|
||||||
floatingWindow.close()
|
floatingWindow.close()
|
||||||
|
floatingWindow.destroy()
|
||||||
floatingWindow = null
|
floatingWindow = null
|
||||||
}
|
}
|
||||||
await showTrayIcon()
|
await showTrayIcon()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user