// electron/preload.ts - Electron 预加载脚本 import { contextBridge, ipcRenderer } from 'electron' import type { ElectronAPI } from './modules/types' // 向渲染进程暴露安全的 API const electronAPI: ElectronAPI = { // ==================== 安装相关 ==================== // 安装指定软件 install: (software, options) => ipcRenderer.invoke('install', software, options), // 取消安装 cancelInstall: () => ipcRenderer.invoke('cancel-install'), // 检测软件是否已安装 checkInstalled: (software) => ipcRenderer.invoke('check-installed', software), // 卸载软件 uninstall: (software) => ipcRenderer.invoke('uninstall', software), // ==================== 系统检测 ==================== // 检测管理员权限 checkAdmin: () => ipcRenderer.invoke('check-admin'), // 检测包管理器 checkPackageManager: () => ipcRenderer.invoke('check-package-manager'), // 安装包管理器 installPackageManager: (manager) => ipcRenderer.invoke('install-package-manager', manager), // 获取平台信息 getPlatform: () => ipcRenderer.invoke('get-platform'), // 检测网络连接 checkNetwork: () => ipcRenderer.invoke('check-network'), // ==================== 版本 ==================== // 获取软件版本列表 getVersions: (software) => ipcRenderer.invoke('get-versions', software), // 检查更新 checkUpdate: (software) => ipcRenderer.invoke('check-update', software), // ==================== Git 镜像配置 ==================== // 设置 Git 镜像 setGitMirror: (mirror) => ipcRenderer.invoke('set-git-mirror', mirror), // 获取 Git 镜像配置 getGitMirrorConfig: () => ipcRenderer.invoke('get-git-mirror-config'), // ==================== Node.js 镜像配置 ==================== // 设置 Node.js 镜像 setNodejsMirror: (mirror) => ipcRenderer.invoke('set-nodejs-mirror', mirror), // 获取 Node.js 镜像配置 getNodejsMirrorConfig: () => ipcRenderer.invoke('get-nodejs-mirror-config'), // ==================== 历史和日志 ==================== // 获取安装历史 getInstallHistory: (limit) => ipcRenderer.invoke('get-install-history', limit), // 获取日志 getLogs: () => ipcRenderer.invoke('get-logs'), // 写入安装日志 writeInstallLog: (message: string, level?: 'info' | 'warn' | 'error') => ipcRenderer.invoke('write-install-log', message, level), // 获取日志文件路径 getLogPaths: () => ipcRenderer.invoke('get-log-paths'), // ==================== 窗口操作 ==================== // 设置窗口标题 setWindowTitle: (title) => ipcRenderer.invoke('set-window-title', title), // ==================== Claude Code ==================== // 检测 Claude Code 是否已安装 checkClaudeCode: () => ipcRenderer.invoke('check-claude-code'), // 启动 Claude Code (打开 Git Bash 并执行 claude 命令) launchClaudeCode: () => ipcRenderer.invoke('launch-claude-code'), // 安装 Claude Code installClaudeCode: () => ipcRenderer.invoke('install-claude-code'), // ==================== VS Code Extensions ==================== // 检查 VS Code 插件是否已安装 checkVscodeExtension: (extensionId: string) => ipcRenderer.invoke('check-vscode-extension', extensionId), // 安装 VS Code 插件 installVscodeExtension: (extensionId: string) => ipcRenderer.invoke('install-vscode-extension', extensionId), // 选择文件夹 selectDirectory: (defaultPath?: string) => ipcRenderer.invoke('select-directory', defaultPath), // 窗口最小化 windowMinimize: () => ipcRenderer.invoke('window-minimize'), // 窗口最大化/还原 windowMaximize: () => ipcRenderer.invoke('window-maximize'), // 关闭窗口 windowClose: () => ipcRenderer.invoke('window-close'), // 获取窗口最大化状态 windowIsMaximized: () => ipcRenderer.invoke('window-is-maximized'), // ==================== 事件监听 ==================== // 监听安装状态 onInstallStatus: (callback) => { ipcRenderer.on('install-status', (_event, data) => callback(data)) }, // 监听安装完成 onInstallComplete: (callback) => { ipcRenderer.on('install-complete', (_event, data) => callback(data)) }, // 监听安装错误 onInstallError: (callback) => { ipcRenderer.on('install-error', (_event, data) => callback(data)) }, // 监听网络状态变化 onNetworkChange: (callback) => { ipcRenderer.on('network-change', (_event, online) => callback(online)) }, // 移除所有监听(避免内存泄漏) removeAllListeners: () => { ipcRenderer.removeAllListeners('install-status') ipcRenderer.removeAllListeners('install-complete') ipcRenderer.removeAllListeners('install-error') ipcRenderer.removeAllListeners('network-change') ipcRenderer.removeAllListeners('updater:status') }, // ==================== 自动更新 ==================== // 检查应用更新 updaterCheck: () => ipcRenderer.invoke('updater:check'), // 下载更新 updaterDownload: () => ipcRenderer.invoke('updater:download'), // 安装更新并重启 updaterInstall: () => ipcRenderer.invoke('updater:install'), // 获取当前版本 updaterVersion: () => ipcRenderer.invoke('updater:version'), // 检测是否为 Portable 模式 updaterIsPortable: () => ipcRenderer.invoke('updater:is-portable'), // 监听更新状态 onUpdaterStatus: (callback) => { ipcRenderer.on('updater:status', (_event, data) => callback(data)) } } contextBridge.exposeInMainWorld('electronAPI', electronAPI)