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 { 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`) }