mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-27 05:00:30 +08:00
161 lines
4.1 KiB
TypeScript
161 lines
4.1 KiB
TypeScript
import { is } from '@electron-toolkit/utils'
|
|
import { existsSync, mkdirSync } from 'fs'
|
|
import { app } from 'electron'
|
|
import path from 'path'
|
|
|
|
export const homeDir = app.getPath('home')
|
|
|
|
export function isPortable(): boolean {
|
|
return existsSync(path.join(exeDir(), 'PORTABLE'))
|
|
}
|
|
|
|
export function dataDir(): string {
|
|
if (isPortable()) {
|
|
return path.join(exeDir(), 'data')
|
|
} else {
|
|
return app.getPath('userData')
|
|
}
|
|
}
|
|
|
|
export function taskDir(): string {
|
|
const userDataDir = app.getPath('userData')
|
|
// 确保 userData 目录存在
|
|
if (!existsSync(userDataDir)) {
|
|
mkdirSync(userDataDir, { recursive: true })
|
|
}
|
|
|
|
const dir = path.join(userDataDir, 'tasks')
|
|
if (!existsSync(dir)) {
|
|
mkdirSync(dir, { recursive: true })
|
|
}
|
|
return dir
|
|
}
|
|
|
|
export function subStoreDir(): string {
|
|
return path.join(dataDir(), 'substore')
|
|
}
|
|
|
|
export function exeDir(): string {
|
|
return path.dirname(exePath())
|
|
}
|
|
|
|
export function exePath(): string {
|
|
return app.getPath('exe')
|
|
}
|
|
|
|
export function resourcesDir(): string {
|
|
if (is.dev) {
|
|
return path.join(__dirname, '../../extra')
|
|
} else {
|
|
if (app.getAppPath().endsWith('asar')) {
|
|
return process.resourcesPath
|
|
} else {
|
|
return path.join(app.getAppPath(), 'resources')
|
|
}
|
|
}
|
|
}
|
|
|
|
export function resourcesFilesDir(): string {
|
|
return path.join(resourcesDir(), 'files')
|
|
}
|
|
|
|
export function themesDir(): string {
|
|
return path.join(dataDir(), 'themes')
|
|
}
|
|
|
|
export function mihomoCoreDir(): string {
|
|
return path.join(resourcesDir(), 'sidecar')
|
|
}
|
|
|
|
export function mihomoCorePath(core: string): string {
|
|
const isWin = process.platform === 'win32'
|
|
// 处理 Smart 内核
|
|
if (core === 'mihomo-smart') {
|
|
return path.join(mihomoCoreDir(), `mihomo-smart${isWin ? '.exe' : ''}`)
|
|
}
|
|
return path.join(mihomoCoreDir(), `${core}${isWin ? '.exe' : ''}`)
|
|
}
|
|
|
|
export function appConfigPath(): string {
|
|
return path.join(dataDir(), 'config.yaml')
|
|
}
|
|
|
|
export function controledMihomoConfigPath(): string {
|
|
return path.join(dataDir(), 'mihomo.yaml')
|
|
}
|
|
|
|
export function profileConfigPath(): string {
|
|
return path.join(dataDir(), 'profile.yaml')
|
|
}
|
|
|
|
export function profilesDir(): string {
|
|
return path.join(dataDir(), 'profiles')
|
|
}
|
|
|
|
export function profilePath(id: string): string {
|
|
return path.join(profilesDir(), `${id}.yaml`)
|
|
}
|
|
|
|
export function overrideDir(): string {
|
|
return path.join(dataDir(), 'override')
|
|
}
|
|
|
|
export function overrideConfigPath(): string {
|
|
return path.join(dataDir(), 'override.yaml')
|
|
}
|
|
|
|
export function overridePath(id: string, ext: 'js' | 'yaml' | 'log'): string {
|
|
return path.join(overrideDir(), `${id}.${ext}`)
|
|
}
|
|
|
|
export function mihomoWorkDir(): string {
|
|
return path.join(dataDir(), 'work')
|
|
}
|
|
|
|
export function mihomoProfileWorkDir(id: string | undefined): string {
|
|
return path.join(mihomoWorkDir(), id || 'default')
|
|
}
|
|
|
|
export function mihomoTestDir(): string {
|
|
return path.join(dataDir(), 'test')
|
|
}
|
|
|
|
export function mihomoWorkConfigPath(id: string | undefined): string {
|
|
if (id === 'work') {
|
|
return path.join(mihomoWorkDir(), 'config.yaml')
|
|
} else {
|
|
return path.join(mihomoProfileWorkDir(id), 'config.yaml')
|
|
}
|
|
}
|
|
|
|
export function logDir(): string {
|
|
return path.join(dataDir(), 'logs')
|
|
}
|
|
|
|
export function logPath(): string {
|
|
const date = new Date()
|
|
const year = date.getFullYear()
|
|
const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
const day = String(date.getDate()).padStart(2, '0')
|
|
const name = `clash-party-${year}-${month}-${day}`
|
|
return path.join(logDir(), `${name}.log`)
|
|
}
|
|
|
|
export function substoreLogPath(): string {
|
|
const date = new Date()
|
|
const year = date.getFullYear()
|
|
const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
const day = String(date.getDate()).padStart(2, '0')
|
|
const name = `sub-store-${year}-${month}-${day}`
|
|
return path.join(logDir(), `${name}.log`)
|
|
}
|
|
|
|
export function coreLogPath(): string {
|
|
const date = new Date()
|
|
const year = date.getFullYear()
|
|
const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
const day = String(date.getDate()).padStart(2, '0')
|
|
const name = `core-${year}-${month}-${day}`
|
|
return path.join(logDir(), `${name}.log`)
|
|
}
|