diff --git a/src/main/core/mihomoApi.ts b/src/main/core/mihomoApi.ts index 14634703..8b5bf5d0 100644 --- a/src/main/core/mihomoApi.ts +++ b/src/main/core/mihomoApi.ts @@ -34,11 +34,11 @@ async function mihomoHttp(method: HttpMethod, path: string, data?: object): P const client = net.connect( process.platform === 'win32' ? mihomoPipe : join(mihomoWorkDir(), mihomoUnix) ) - client.on('data', function (res) { + const parseResult = (str: string): void => { try { - const data = res.toString().split('\r\n\r\n')[1] + const data = str.split('\r\n\r\n')[1] const json = trimJson(data) - if (res.toString().includes('HTTP/1.1 4') || res.toString().includes('HTTP/1.1 5')) { + if (str.includes('HTTP/1.1 4') || str.includes('HTTP/1.1 5')) { reject(json ? JSON.parse(json) : data) } else { resolve(json ? JSON.parse(json) : undefined) @@ -48,6 +48,17 @@ async function mihomoHttp(method: HttpMethod, path: string, data?: object): P } finally { client.end() } + } + let buffer = '' + client.on('data', function (res) { + if (res.toString().includes('Transfer-Encoding: chunked') || buffer !== '') { + buffer += res.toString() + if (buffer.endsWith('\r\n\r\n')) { + parseResult(buffer) + } + } else { + parseResult(res.toString()) + } }) client.on('error', function (error) { reject(error) diff --git a/src/main/index.ts b/src/main/index.ts index 5b322580..186bd86e 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -131,7 +131,12 @@ app.whenReady().then(async () => { } catch (e) { dialog.showErrorBox('内核启动出错', `${e}`) } - await startMonitor() + try { + await startMonitor() + } catch { + // ignore + } + // Default open or close DevTools by F12 in development // and ignore CommandOrControl + R in production. // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils diff --git a/src/main/utils/init.ts b/src/main/utils/init.ts index b71eea6c..44966561 100644 --- a/src/main/utils/init.ts +++ b/src/main/utils/init.ts @@ -192,11 +192,14 @@ async function migration(): Promise { await patchAppConfig({ envType: [envType] }) } // use unix socket - if (process.platform !== 'win32' && !externalControllerUnix) { + if (process.platform !== 'win32' && externalControllerUnix !== 'mihomo-party.sock') { await patchControledMihomoConfig({ 'external-controller-unix': 'mihomo-party.sock' }) } // use named pipe - if (process.platform === 'win32' && !externalControllerPipe) { + if ( + process.platform === 'win32' && + externalControllerPipe !== '\\\\.\\pipe\\MihomoParty\\mihomo' + ) { await patchControledMihomoConfig({ 'external-controller-pipe': '\\\\.\\pipe\\MihomoParty\\mihomo' }) diff --git a/src/renderer/src/pages/proxies.tsx b/src/renderer/src/pages/proxies.tsx index 40fe1a5c..8edc398b 100644 --- a/src/renderer/src/pages/proxies.tsx +++ b/src/renderer/src/pages/proxies.tsx @@ -41,8 +41,8 @@ const Proxies: React.FC = () => { if (groups.length !== searchValue.length) setSearchValue(Array(groups.length).fill('')) groups.forEach((group, index) => { if (isOpen[index]) { - let groupProxies = group.all.filter((proxy) => - includesIgnoreCase(proxy.name, searchValue[index]) + let groupProxies = group.all.filter( + (proxy) => proxy && includesIgnoreCase(proxy.name, searchValue[index]) ) const count = Math.floor(groupProxies.length / cols) groupCounts.push(groupProxies.length % cols === 0 ? count : count + 1)