From 944475d791bdbfb30f4cd9438c6defad33e28d35 Mon Sep 17 00:00:00 2001 From: miwu04 Date: Sat, 26 Apr 2025 12:05:01 +0800 Subject: [PATCH] refactor: move sub-store path to WorkDir --- src/main/resolve/server.ts | 47 ++++++++------------------------------ src/main/utils/init.ts | 14 +++++++----- 2 files changed, 18 insertions(+), 43 deletions(-) diff --git a/src/main/resolve/server.ts b/src/main/resolve/server.ts index 05211cc..b6790e9 100644 --- a/src/main/resolve/server.ts +++ b/src/main/resolve/server.ts @@ -1,12 +1,6 @@ import { getAppConfig, getControledMihomoConfig } from '../config' import { Worker } from 'worker_threads' -import { - dataDir, - mihomoWorkDir, - resourcesFilesDir, - subStoreDir, - substoreLogPath -} from '../utils/dirs' +import { dataDir, mihomoWorkDir, subStoreDir, substoreLogPath } from '../utils/dirs' import subStoreIcon from '../../../resources/subStoreIcon.png?asset' import { createWriteStream, existsSync, mkdirSync } from 'fs' import { writeFile, rm, cp } from 'fs/promises' @@ -17,10 +11,6 @@ import { nativeImage } from 'electron' import express from 'express' import axios from 'axios' import AdmZip from 'adm-zip' -import { promisify } from 'util' -import { execFile } from 'child_process' -import { platform } from 'os' -import { is } from '@electron-toolkit/utils' export let pacPort: number export let subStorePort: number @@ -87,7 +77,7 @@ export async function startSubStoreFrontendServer(): Promise { await stopSubStoreFrontendServer() subStoreFrontendPort = await findAvailablePort(14122) const app = express() - app.use(express.static(path.join(resourcesFilesDir(), 'sub-store-frontend'))) + app.use(express.static(path.join(mihomoWorkDir(), 'sub-store-frontend'))) subStoreFrontendServer = app.listen(subStoreFrontendPort, subStoreHost) } @@ -128,7 +118,7 @@ export async function startSubStoreBackendServer(): Promise { SUB_STORE_MMDB_COUNTRY_PATH: path.join(mihomoWorkDir(), 'country.mmdb'), SUB_STORE_MMDB_ASN_PATH: path.join(mihomoWorkDir(), 'ASN.mmdb') } - subStoreBackendWorker = new Worker(path.join(resourcesFilesDir(), 'sub-store.bundle.js'), { + subStoreBackendWorker = new Worker(path.join(mihomoWorkDir(), 'sub-store.bundle.js'), { env: useProxyInSubStore ? { ...env, @@ -151,10 +141,9 @@ export async function stopSubStoreBackendServer(): Promise { export async function downloadSubStore(): Promise { const { 'mixed-port': mixedPort = 7890 } = await getControledMihomoConfig() - const frontendDir = path.join(resourcesFilesDir(), 'sub-store-frontend') - const backendPath = path.join(resourcesFilesDir(), 'sub-store.bundle.js') + const frontendDir = path.join(mihomoWorkDir(), 'sub-store-frontend') + const backendPath = path.join(mihomoWorkDir(), 'sub-store.bundle.js') const tempDir = path.join(dataDir(), 'temp') - const execFilePromise = promisify(execFile) try { // 创建临时目录 @@ -195,28 +184,12 @@ export async function downloadSubStore(): Promise { // 先解压到临时目录 const zip = new AdmZip(Buffer.from(frontendRes.data)) zip.extractAllTo(tempDir, true) - - if (platform() === 'linux' && !is.dev) { - try { - const bashCmd = [ - `cp "${tempBackendPath}" "${backendPath}"`, - `rm -rf "${frontendDir}"`, - `mkdir -p "${frontendDir}"`, - `cp -r "${tempFrontendDir}"/* "${frontendDir}/"` - ].join(' && ') - await execFilePromise('pkexec', ['bash', '-c', bashCmd]) - } catch (error) { - console.error('substore.downloadFailed:', error) - throw error - } - } else { - await cp(tempBackendPath, backendPath) - if (existsSync(frontendDir)) { - await rm(frontendDir, { recursive: true }) - } - mkdirSync(frontendDir, { recursive: true }) - await cp(path.join(tempDir, 'dist'), frontendDir, { recursive: true }) + await cp(tempBackendPath, backendPath) + if (existsSync(frontendDir)) { + await rm(frontendDir, { recursive: true }) } + mkdirSync(frontendDir, { recursive: true }) + await cp(path.join(tempDir, 'dist'), frontendDir, { recursive: true }) await rm(tempDir, { recursive: true }) } catch (error) { console.error('substore.downloadFailed:', error) diff --git a/src/main/utils/init.ts b/src/main/utils/init.ts index e0b9ae8..5a6e3ea 100644 --- a/src/main/utils/init.ts +++ b/src/main/utils/init.ts @@ -22,7 +22,7 @@ import { defaultProfileConfig } from './template' import yaml from 'yaml' -import { mkdir, writeFile, copyFile, rm, readdir } from 'fs/promises' +import { mkdir, writeFile,rm, readdir, cp } from 'fs/promises' import { existsSync } from 'fs' import path from 'path' import { @@ -88,13 +88,13 @@ async function initConfig(): Promise { async function initFiles(): Promise { const copy = async (file: string): Promise => { const targetPath = path.join(mihomoWorkDir(), file) - const testTargrtPath = path.join(mihomoTestDir(), file) + const testTargetPath = path.join(mihomoTestDir(), file) const sourcePath = path.join(resourcesFilesDir(), file) if (!existsSync(targetPath) && existsSync(sourcePath)) { - await copyFile(sourcePath, targetPath) + await cp(sourcePath, targetPath, { recursive: true }) } - if (!existsSync(testTargrtPath) && existsSync(sourcePath)) { - await copyFile(sourcePath, testTargrtPath) + if (!existsSync(testTargetPath) && existsSync(sourcePath)) { + await cp(sourcePath, testTargetPath, { recursive: true }) } } await Promise.all([ @@ -102,7 +102,9 @@ async function initFiles(): Promise { copy('geoip.metadb'), copy('geoip.dat'), copy('geosite.dat'), - copy('ASN.mmdb') + copy('ASN.mmdb'), + copy('sub-store.bundle.js'), + copy('sub-store-frontend') ]) }