preload.ts 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. // electron/preload.ts - Electron 预加载脚本
  2. import { contextBridge, ipcRenderer } from 'electron'
  3. import type { ElectronAPI } from './modules/types'
  4. // 向渲染进程暴露安全的 API
  5. const electronAPI: ElectronAPI = {
  6. // ==================== 安装相关 ====================
  7. // 安装指定软件
  8. install: (software, options) => ipcRenderer.invoke('install', software, options),
  9. // 取消安装
  10. cancelInstall: () => ipcRenderer.invoke('cancel-install'),
  11. // 检测软件是否已安装
  12. checkInstalled: (software) => ipcRenderer.invoke('check-installed', software),
  13. // 卸载软件
  14. uninstall: (software) => ipcRenderer.invoke('uninstall', software),
  15. // ==================== 系统检测 ====================
  16. // 检测管理员权限
  17. checkAdmin: () => ipcRenderer.invoke('check-admin'),
  18. // 检测包管理器
  19. checkPackageManager: () => ipcRenderer.invoke('check-package-manager'),
  20. // 安装包管理器
  21. installPackageManager: (manager) => ipcRenderer.invoke('install-package-manager', manager),
  22. // 获取平台信息
  23. getPlatform: () => ipcRenderer.invoke('get-platform'),
  24. // 检测网络连接
  25. checkNetwork: () => ipcRenderer.invoke('check-network'),
  26. // ==================== 版本 ====================
  27. // 获取软件版本列表
  28. getVersions: (software) => ipcRenderer.invoke('get-versions', software),
  29. // 检查更新
  30. checkUpdate: (software) => ipcRenderer.invoke('check-update', software),
  31. // ==================== Git 镜像配置 ====================
  32. // 设置 Git 镜像
  33. setGitMirror: (mirror) => ipcRenderer.invoke('set-git-mirror', mirror),
  34. // 获取 Git 镜像配置
  35. getGitMirrorConfig: () => ipcRenderer.invoke('get-git-mirror-config'),
  36. // ==================== Node.js 镜像配置 ====================
  37. // 设置 Node.js 镜像
  38. setNodejsMirror: (mirror) => ipcRenderer.invoke('set-nodejs-mirror', mirror),
  39. // 获取 Node.js 镜像配置
  40. getNodejsMirrorConfig: () => ipcRenderer.invoke('get-nodejs-mirror-config'),
  41. // ==================== 历史和日志 ====================
  42. // 获取安装历史
  43. getInstallHistory: (limit) => ipcRenderer.invoke('get-install-history', limit),
  44. // 获取日志
  45. getLogs: () => ipcRenderer.invoke('get-logs'),
  46. // 写入安装日志
  47. writeInstallLog: (message: string, level?: 'info' | 'warn' | 'error') => ipcRenderer.invoke('write-install-log', message, level),
  48. // 获取日志文件路径
  49. getLogPaths: () => ipcRenderer.invoke('get-log-paths'),
  50. // ==================== 窗口操作 ====================
  51. // 设置窗口标题
  52. setWindowTitle: (title) => ipcRenderer.invoke('set-window-title', title),
  53. // ==================== Claude Code ====================
  54. // 检测 Claude Code 是否已安装
  55. checkClaudeCode: () => ipcRenderer.invoke('check-claude-code'),
  56. // 启动 Claude Code (打开 Git Bash 并执行 claude 命令)
  57. launchClaudeCode: () => ipcRenderer.invoke('launch-claude-code'),
  58. // 安装 Claude Code
  59. installClaudeCode: () => ipcRenderer.invoke('install-claude-code'),
  60. // ==================== VS Code Extensions ====================
  61. // 检查 VS Code 插件是否已安装
  62. checkVscodeExtension: (extensionId: string) => ipcRenderer.invoke('check-vscode-extension', extensionId),
  63. // 安装 VS Code 插件
  64. installVscodeExtension: (extensionId: string) => ipcRenderer.invoke('install-vscode-extension', extensionId),
  65. // 选择文件夹
  66. selectDirectory: (defaultPath?: string) => ipcRenderer.invoke('select-directory', defaultPath),
  67. // 窗口最小化
  68. windowMinimize: () => ipcRenderer.invoke('window-minimize'),
  69. // 窗口最大化/还原
  70. windowMaximize: () => ipcRenderer.invoke('window-maximize'),
  71. // 关闭窗口
  72. windowClose: () => ipcRenderer.invoke('window-close'),
  73. // 获取窗口最大化状态
  74. windowIsMaximized: () => ipcRenderer.invoke('window-is-maximized'),
  75. // ==================== 事件监听 ====================
  76. // 监听安装状态
  77. onInstallStatus: (callback) => {
  78. ipcRenderer.on('install-status', (_event, data) => callback(data))
  79. },
  80. // 监听安装完成
  81. onInstallComplete: (callback) => {
  82. ipcRenderer.on('install-complete', (_event, data) => callback(data))
  83. },
  84. // 监听安装错误
  85. onInstallError: (callback) => {
  86. ipcRenderer.on('install-error', (_event, data) => callback(data))
  87. },
  88. // 监听网络状态变化
  89. onNetworkChange: (callback) => {
  90. ipcRenderer.on('network-change', (_event, online) => callback(online))
  91. },
  92. // 移除所有监听(避免内存泄漏)
  93. removeAllListeners: () => {
  94. ipcRenderer.removeAllListeners('install-status')
  95. ipcRenderer.removeAllListeners('install-complete')
  96. ipcRenderer.removeAllListeners('install-error')
  97. ipcRenderer.removeAllListeners('network-change')
  98. ipcRenderer.removeAllListeners('updater:status')
  99. },
  100. // ==================== 自动更新 ====================
  101. // 检查应用更新
  102. updaterCheck: () => ipcRenderer.invoke('updater:check'),
  103. // 下载更新
  104. updaterDownload: () => ipcRenderer.invoke('updater:download'),
  105. // 安装更新并重启
  106. updaterInstall: () => ipcRenderer.invoke('updater:install'),
  107. // 获取当前版本
  108. updaterVersion: () => ipcRenderer.invoke('updater:version'),
  109. // 检测是否为 Portable 模式
  110. updaterIsPortable: () => ipcRenderer.invoke('updater:is-portable'),
  111. // 监听更新状态
  112. onUpdaterStatus: (callback) => {
  113. ipcRenderer.on('updater:status', (_event, data) => callback(data))
  114. }
  115. }
  116. contextBridge.exposeInMainWorld('electronAPI', electronAPI)