mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-05-06 21:16:10 +08:00
101 lines
2.8 KiB
TypeScript
101 lines
2.8 KiB
TypeScript
/**
|
|
* 核心 API - 基础 IPC 通信和系统功能
|
|
*/
|
|
import { ipcRenderer } from 'electron'
|
|
|
|
// Custom APIs for renderer
|
|
export const api = {
|
|
send: (channel: string, data?: unknown) => {
|
|
// whitelist channels
|
|
const validChannels = [
|
|
'show-message',
|
|
'check-update',
|
|
'simulate-update',
|
|
'get-gpu-acceleration',
|
|
'set-gpu-acceleration',
|
|
'save-gpu-acceleration',
|
|
'window-close', // 用户协议拒绝时退出应用
|
|
]
|
|
if (validChannels.includes(channel)) {
|
|
ipcRenderer.send(channel, data)
|
|
}
|
|
},
|
|
receive: (channel: string, func: (...args: unknown[]) => void) => {
|
|
const validChannels = [
|
|
'show-message',
|
|
'chat:importProgress',
|
|
'merge:parseProgress',
|
|
'llm:streamChunk',
|
|
'agent:streamChunk',
|
|
'agent:complete',
|
|
]
|
|
if (validChannels.includes(channel)) {
|
|
// Deliberately strip event as it includes `sender`
|
|
ipcRenderer.on(channel, (_event, ...args) => func(...args))
|
|
}
|
|
},
|
|
removeListener: (channel: string, func: (...args: unknown[]) => void) => {
|
|
ipcRenderer.removeListener(channel, func)
|
|
},
|
|
setThemeSource: (mode: 'system' | 'light' | 'dark') => {
|
|
ipcRenderer.send('window:setThemeSource', mode)
|
|
},
|
|
}
|
|
|
|
// 扩展 api,添加 dialog、clipboard 和应用功能
|
|
export const extendedApi = {
|
|
...api,
|
|
dialog: {
|
|
showOpenDialog: (options: Electron.OpenDialogOptions): Promise<Electron.OpenDialogReturnValue> => {
|
|
return ipcRenderer.invoke('dialog:showOpenDialog', options)
|
|
},
|
|
},
|
|
clipboard: {
|
|
/**
|
|
* 复制图片到系统剪贴板
|
|
* @param dataUrl 图片的 base64 data URL
|
|
*/
|
|
copyImage: (dataUrl: string): Promise<{ success: boolean; error?: string }> => {
|
|
return ipcRenderer.invoke('copyImage', dataUrl)
|
|
},
|
|
},
|
|
app: {
|
|
/**
|
|
* 获取应用版本号
|
|
*/
|
|
getVersion: (): Promise<string> => {
|
|
return ipcRenderer.invoke('app:getVersion')
|
|
},
|
|
/**
|
|
* 检查更新
|
|
*/
|
|
checkUpdate: (): void => {
|
|
ipcRenderer.send('check-update')
|
|
},
|
|
/**
|
|
* 模拟更新弹窗(仅开发模式)
|
|
*/
|
|
simulateUpdate: (): void => {
|
|
ipcRenderer.send('simulate-update')
|
|
},
|
|
/**
|
|
* 获取远程配置(通过主进程请求,绕过 CORS)
|
|
*/
|
|
fetchRemoteConfig: (url: string): Promise<{ success: boolean; data?: unknown; error?: string }> => {
|
|
return ipcRenderer.invoke('app:fetchRemoteConfig', url)
|
|
},
|
|
/**
|
|
* 获取匿名统计开关状态
|
|
*/
|
|
getAnalyticsEnabled: (): Promise<boolean> => {
|
|
return ipcRenderer.invoke('analytics:getEnabled')
|
|
},
|
|
/**
|
|
* 设置匿名统计开关状态
|
|
*/
|
|
setAnalyticsEnabled: (enabled: boolean): Promise<{ success: boolean }> => {
|
|
return ipcRenderer.invoke('analytics:setEnabled', enabled)
|
|
},
|
|
},
|
|
}
|