2024-08-15 15:42:02 +08:00

117 lines
2.7 KiB
TypeScript

import { is } from '@electron-toolkit/utils'
import { app } from 'electron'
import fs from 'fs'
import { rm, writeFile } from 'fs/promises'
import path from 'path'
export const homeDir = app.getPath('home')
export function isPortable(): boolean {
return fs.existsSync(path.join(exeDir(), 'PORTABLE'))
}
export async function setPortable(portable: boolean): Promise<void> {
if (portable) {
await writeFile(path.join(exeDir(), 'PORTABLE'), '')
} else {
await rm(path.join(exeDir(), 'PORTABLE'))
}
app.relaunch()
app.quit()
}
export function dataDir(): string {
if (isPortable()) {
return path.join(exeDir(), 'data')
} else {
return app.getPath('userData')
}
}
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, '../../resources')
} 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 mihomoCoreDir(): string {
return path.join(resourcesDir(), 'sidecar')
}
export function mihomoCorePath(core: string): string {
const isWin = process.platform === 'win32'
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): string {
return path.join(overrideDir(), `${id}.js`)
}
export function mihomoWorkDir(): string {
return path.join(dataDir(), 'work')
}
export function mihomoTestDir(): string {
return path.join(dataDir(), 'test')
}
export function mihomoWorkConfigPath(): string {
return path.join(mihomoWorkDir(), 'config.yaml')
}
export function logDir(): string {
return path.join(dataDir(), 'logs')
}
export function logPath(): string {
const date = new Date()
const name = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`
return path.join(logDir(), `${name}.log`)
}