// preload.js const { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('electronAPI', { runInitialization: () => ipcRenderer.invoke('run-initialization'), onInitProgress: (callback) => ipcRenderer.on('init-progress', (_event, value) => callback(value)), initializationComplete: (result) => ipcRenderer.send('initialization-complete', result), onInitialData: (callback) => ipcRenderer.on('initial-data', (_event, value) => callback(value)), // [新增] 字体下载进度监听 onFontDownloadProgress: (callback) => ipcRenderer.on('font-download-progress', (_event, value) => callback(value)), getLanguageConfig: () => ipcRenderer.invoke('get-language-config'), saveLanguageConfig: (lang) => ipcRenderer.invoke('save-language-config', lang), saveTranslatedLanguagePack: (langCode, translatedPack) => ipcRenderer.invoke('save-translated-language-pack', langCode, translatedPack), requestAdminRelaunch: () => ipcRenderer.invoke('check-and-relaunch-as-admin'), minimizeWindow: () => ipcRenderer.send('window-minimize'), maximizeWindow: () => ipcRenderer.send('window-maximize'), closeWindow: () => ipcRenderer.send('window-close'), relaunchApp: () => ipcRenderer.send('relaunch-app'), openAcknowledgementsWindow: (theme, versions) => ipcRenderer.send('open-acknowledgements-window', theme, versions), closeCurrentWindow: () => ipcRenderer.send('close-current-window'), openSecretWindow: (theme) => ipcRenderer.send('open-secret-window', theme), openToolWindow: (viewName, toolId, theme) => ipcRenderer.send('open-tool-window', viewName, toolId, theme), secretWindowMinimize: () => ipcRenderer.send('secret-window-minimize'), secretWindowMaximize: () => ipcRenderer.send('secret-window-maximize'), logAction: (logData) => ipcRenderer.invoke('log-action', logData), getLogs: (filterDate) => ipcRenderer.invoke('get-logs', filterDate), clearLogs: () => ipcRenderer.invoke('clear-logs'), getTrafficStats: () => ipcRenderer.invoke('get-traffic-stats'), addTraffic: (bytes) => ipcRenderer.invoke('add-traffic', bytes), reportTraffic: (bytes) => ipcRenderer.send('report-traffic', bytes), getAppVersion: () => ipcRenderer.invoke('get-app-version'), checkUpdates: () => ipcRenderer.invoke('check-updates'), downloadUpdate: (url) => ipcRenderer.invoke('download-update', url), cancelDownload: () => ipcRenderer.invoke('cancel-download'), onDownloadProgress: (callback) => ipcRenderer.on('download-progress', (_event, value) => callback(value)), onNetworkSpeedUpdate: (callback) => ipcRenderer.on('network-speed-update', (_event, value) => callback(value)), // [新增] 安装更新接口 installUpdate: (filePath) => ipcRenderer.invoke('install-update', filePath), openFile: (filePath) => ipcRenderer.invoke('open-file', filePath), showItemInFolder: (filePath) => ipcRenderer.invoke('show-item-in-folder', filePath), openExternalLink: (url) => ipcRenderer.invoke('open-external-link', url), saveMedia: (data) => ipcRenderer.invoke('save-media', data), setTheme: (theme) => ipcRenderer.invoke('set-theme', theme), setGlobalVolume: (volume) => ipcRenderer.invoke('set-global-volume'), selectBackgroundImage: () => ipcRenderer.invoke('select-background-image'), clearBackgroundImage: () => ipcRenderer.invoke('clear-background-image'), setBackgroundOpacity: (opacity) => ipcRenderer.invoke('set-background-opacity'), setCardOpacity: (opacity) => ipcRenderer.invoke('set-card-opacity'), getSystemInfo: () => ipcRenderer.invoke('get-system-info'), getMemoryUpdate: () => ipcRenderer.invoke('get-memory-update'), getRealtimeStats: () => ipcRenderer.invoke('get-realtime-stats'), getGpuStats: () => ipcRenderer.invoke('get-gpu-stats'), getTrafficHistory: () => ipcRenderer.invoke('get-traffic-history'), getCachedIcon: (toolId, url) => ipcRenderer.invoke('get-cached-icon', toolId, url), // [新增] 字体下载接口 downloadFont: (data) => ipcRenderer.invoke('download-font', data), compressFiles: (data) => ipcRenderer.invoke('compress-files', data), decompressFile: (data) => ipcRenderer.invoke('decompress-file', data), onArchiveProgress: (callback) => ipcRenderer.on('archive-progress', (_event, value) => callback(value)), onArchiveLog: (callback) => ipcRenderer.on('archive-log', (_event, value) => callback(value)), launchSystemTool: (command) => ipcRenderer.send('launch-system-tool', command), showConfirmationDialog: (options) => ipcRenderer.invoke('show-confirmation-dialog', options), checkSecretAccess: () => ipcRenderer.invoke('check-secret-access'), recordSecretFailure: () => ipcRenderer.invoke('record-secret-failure'), resetSecretAttempts: () => ipcRenderer.invoke('reset-secret-attempts'), checkAndRelaunchAsAdmin: () => ipcRenderer.invoke('check-and-relaunch-as-admin'), requestNewWindow: (url, options) => ipcRenderer.send('request-new-window', url, options), checkUserAgreement: () => ipcRenderer.invoke('check-user-agreement'), confirmUserAgreement: () => ipcRenderer.invoke('confirm-user-agreement'), selectDirectory: () => ipcRenderer.invoke('select-directory'), downloadResourceAtomic: (data) => ipcRenderer.invoke('download-resource-atomic', data), downloadFileDirect: (data) => ipcRenderer.invoke('download-file-direct', data), cleanEmptyDirs: (path) => ipcRenderer.invoke('clean-empty-dirs', path), setConfigKey: (key, value) => ipcRenderer.invoke('set-config-key', { key, value }), openDownloadWindow: (url) => ipcRenderer.invoke('open-download-window', url), calculateHash: (buffer, algorithm) => ipcRenderer.invoke('calculate-hash', buffer, algorithm), // [重构] 接口健康度校验 API getApiHealthStatus: (apiId) => ipcRenderer.invoke('get-api-health-status', apiId), recordApiCall: (callData) => ipcRenderer.invoke('record-api-call', callData), recordApiHealth: (healthData) => ipcRenderer.invoke('record-api-health', healthData), getApiReservations: (category) => ipcRenderer.invoke('get-api-reservations', category), registerApiReservation: (reservation) => ipcRenderer.invoke('register-api-reservation', reservation), updateApiReservation: (apiId, updates) => ipcRenderer.invoke('update-api-reservation', apiId, updates), // [重构] 工具健康检查数据库操作 API recordToolHealthCheckResult: (resultData) => ipcRenderer.invoke('record-tool-health-check-result', resultData), getLatestToolHealthCheckResult: (toolId) => ipcRenderer.invoke('get-latest-tool-health-check-result', toolId), getToolHealthCheckHistory: (toolId, limit) => ipcRenderer.invoke('get-tool-health-check-history', toolId, limit), getToolHealthCheckResultsByDate: (checkDate) => ipcRenderer.invoke('get-tool-health-check-results-by-date', checkDate), getLastHealthCheckDate: () => ipcRenderer.invoke('get-last-health-check-date'), shouldForceHealthCheck: (days) => ipcRenderer.invoke('should-force-health-check', days), saveToolHealthCheckSummary: (summaryData) => ipcRenderer.invoke('save-tool-health-check-summary', summaryData), getToolHealthCheckSummary: (checkDate) => ipcRenderer.invoke('get-tool-health-check-summary', checkDate), getAllToolHealthCheckSummaries: (limit) => ipcRenderer.invoke('get-all-tool-health-check-summaries', limit), });