mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-27 13:10:30 +08:00
48 lines
2.0 KiB
TypeScript
48 lines
2.0 KiB
TypeScript
import { exec, execFile } from 'child_process'
|
|
import { dialog, nativeTheme } from 'electron'
|
|
import { readFile } from 'fs/promises'
|
|
import path from 'path'
|
|
import { promisify } from 'util'
|
|
import { exePath, mihomoCorePath, resourcesDir } from '../utils/dirs'
|
|
|
|
export function getFilePath(ext: string[]): string[] | undefined {
|
|
return dialog.showOpenDialogSync({
|
|
title: '选择订阅文件',
|
|
filters: [{ name: `${ext} file`, extensions: ext }],
|
|
properties: ['openFile']
|
|
})
|
|
}
|
|
|
|
export async function readTextFile(filePath: string): Promise<string> {
|
|
return await readFile(filePath, 'utf8')
|
|
}
|
|
|
|
export async function openUWPTool(): Promise<void> {
|
|
const execFilePromise = promisify(execFile)
|
|
const uwpToolPath = path.join(resourcesDir(), 'files', 'enableLoopback.exe')
|
|
await execFilePromise(uwpToolPath)
|
|
}
|
|
|
|
export async function setupFirewall(): Promise<void> {
|
|
const execPromise = promisify(exec)
|
|
const removeCommand = `
|
|
Remove-NetFirewallRule -DisplayName "mihomo" -ErrorAction SilentlyContinue
|
|
Remove-NetFirewallRule -DisplayName "mihomo-alpha" -ErrorAction SilentlyContinue
|
|
Remove-NetFirewallRule -DisplayName "Mihomo Party" -ErrorAction SilentlyContinue
|
|
`
|
|
const createCommand = `
|
|
New-NetFirewallRule -DisplayName "mihomo" -Direction Inbound -Action Allow -Program "${mihomoCorePath('mihomo')}" -Enabled True -Profile Any -ErrorAction SilentlyContinue
|
|
New-NetFirewallRule -DisplayName "mihomo-alpha" -Direction Inbound -Action Allow -Program "${mihomoCorePath('mihomo-alpha')}" -Enabled True -Profile Any -ErrorAction SilentlyContinue
|
|
New-NetFirewallRule -DisplayName "Mihomo Party" -Direction Inbound -Action Allow -Program "${exePath()}" -Enabled True -Profile Any -ErrorAction SilentlyContinue
|
|
`
|
|
|
|
if (process.platform === 'win32') {
|
|
await execPromise(removeCommand, { shell: 'powershell' })
|
|
await execPromise(createCommand, { shell: 'powershell' })
|
|
}
|
|
}
|
|
|
|
export function setNativeTheme(theme: 'system' | 'light' | 'dark'): void {
|
|
nativeTheme.themeSource = theme
|
|
}
|