mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-27 21:20:29 +08:00
improve error handling
This commit is contained in:
parent
9336aced10
commit
73613820e8
@ -8,12 +8,7 @@ import {
|
|||||||
mihomoWorkDir
|
mihomoWorkDir
|
||||||
} from '../utils/dirs'
|
} from '../utils/dirs'
|
||||||
import { generateProfile } from './factory'
|
import { generateProfile } from './factory'
|
||||||
import {
|
import { getAppConfig, getControledMihomoConfig, patchAppConfig } from '../config'
|
||||||
getAppConfig,
|
|
||||||
getControledMihomoConfig,
|
|
||||||
patchAppConfig,
|
|
||||||
patchControledMihomoConfig
|
|
||||||
} from '../config'
|
|
||||||
import { dialog, safeStorage } from 'electron'
|
import { dialog, safeStorage } from 'electron'
|
||||||
import { pauseWebsockets, startMihomoTraffic } from './mihomoApi'
|
import { pauseWebsockets, startMihomoTraffic } from './mihomoApi'
|
||||||
import chokidar from 'chokidar'
|
import chokidar from 'chokidar'
|
||||||
@ -28,8 +23,12 @@ chokidar
|
|||||||
console.log(event, path)
|
console.log(event, path)
|
||||||
})
|
})
|
||||||
.on('unlinkDir', async () => {
|
.on('unlinkDir', async () => {
|
||||||
|
try {
|
||||||
await stopCore(true)
|
await stopCore(true)
|
||||||
await startCore()
|
await startCore()
|
||||||
|
} catch (e) {
|
||||||
|
dialog.showErrorBox('内核启动出错', `${e}`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
let child: ChildProcess
|
let child: ChildProcess
|
||||||
@ -67,28 +66,28 @@ export async function startCore(): Promise<void> {
|
|||||||
})
|
})
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
child.stdout?.on('data', async (data) => {
|
child.stdout?.on('data', async (data) => {
|
||||||
|
await writeFile(logPath(), data, { flag: 'a' })
|
||||||
if (data.toString().includes('configure tun interface: operation not permitted')) {
|
if (data.toString().includes('configure tun interface: operation not permitted')) {
|
||||||
await patchControledMihomoConfig({ tun: { enable: false } })
|
reject('虚拟网卡启动失败, 请尝试手动授予内核权限')
|
||||||
mainWindow?.webContents.send('controledMihomoConfigUpdated')
|
|
||||||
dialog.showErrorBox('虚拟网卡启动失败', '请尝试手动授予内核权限')
|
|
||||||
}
|
}
|
||||||
if (data.toString().includes('External controller listen error')) {
|
if (data.toString().includes('External controller listen error')) {
|
||||||
if (retry) {
|
if (retry) {
|
||||||
retry--
|
retry--
|
||||||
|
try {
|
||||||
resolve(await startCore())
|
resolve(await startCore())
|
||||||
|
} catch (e) {
|
||||||
|
reject(e)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
dialog.showErrorBox('内核连接失败', '请尝试更改外部控制端口后重启内核')
|
reject('内核连接失败, 请尝试修改外部控制端口或重启电脑')
|
||||||
await stopCore()
|
|
||||||
reject('External controller listen error')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (data.toString().includes('RESTful API listening at')) {
|
if (data.toString().includes('Start initial Compatible provider default')) {
|
||||||
await startMihomoTraffic()
|
await startMihomoTraffic()
|
||||||
mainWindow?.webContents.send('coreRestart')
|
mainWindow?.webContents.send('coreRestart')
|
||||||
retry = 10
|
retry = 10
|
||||||
resolve()
|
resolve()
|
||||||
}
|
}
|
||||||
await writeFile(logPath(), data, { flag: 'a' })
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -111,9 +110,13 @@ export async function stopCore(force = false): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function restartCore(): Promise<void> {
|
export async function restartCore(): Promise<void> {
|
||||||
|
try {
|
||||||
const recover = pauseWebsockets()
|
const recover = pauseWebsockets()
|
||||||
await startCore()
|
await startCore()
|
||||||
recover()
|
recover()
|
||||||
|
} catch (e) {
|
||||||
|
dialog.showErrorBox('内核启动出错', `${e}`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function checkProfile(): Promise<void> {
|
async function checkProfile(): Promise<void> {
|
||||||
|
|||||||
@ -97,7 +97,7 @@ app.whenReady().then(async () => {
|
|||||||
await initProfileUpdater()
|
await initProfileUpdater()
|
||||||
}, 60000)
|
}, 60000)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
dialog.showErrorBox('内核启动失败', `${e}`)
|
dialog.showErrorBox('内核启动出错', `${e}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default open or close DevTools by F12 in development
|
// Default open or close DevTools by F12 in development
|
||||||
|
|||||||
@ -10,7 +10,7 @@ function FindProxyForURL(url, host) {
|
|||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
function findAvailablePort(startPort: number): Promise<number> {
|
export function findAvailablePort(startPort: number): Promise<number> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const server = net.createServer()
|
const server = net.createServer()
|
||||||
server.unref()
|
server.unref()
|
||||||
|
|||||||
@ -8,22 +8,11 @@ interface RulesContextType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const RulesContext = createContext<RulesContextType | undefined>(undefined)
|
const RulesContext = createContext<RulesContextType | undefined>(undefined)
|
||||||
let emptyRetry = 10
|
|
||||||
|
|
||||||
export const RulesProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
|
export const RulesProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
|
||||||
const { data: rules, mutate } = useSWR<IMihomoRulesInfo>('mihomoRules', mihomoRules, {
|
const { data: rules, mutate } = useSWR<IMihomoRulesInfo>('mihomoRules', mihomoRules, {
|
||||||
errorRetryInterval: 200,
|
errorRetryInterval: 200,
|
||||||
errorRetryCount: 10,
|
errorRetryCount: 10
|
||||||
onSuccess: (data) => {
|
|
||||||
if (data.rules.length === 0 && emptyRetry) {
|
|
||||||
emptyRetry--
|
|
||||||
setTimeout(() => {
|
|
||||||
mutate()
|
|
||||||
}, 200)
|
|
||||||
} else {
|
|
||||||
emptyRetry = 10
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user