40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { contextBridge, ipcRenderer } from "electron";
|
|
|
|
const electronAPI = {
|
|
ipcRenderer: {
|
|
invoke: (channel: string, ...args: any[]) => ipcRenderer.invoke(channel, ...args),
|
|
on: (channel: string, listener: (...args: any[]) => void) => ipcRenderer.on(channel, listener),
|
|
off: (channel: string, listener: (...args: any[]) => void) => ipcRenderer.off(channel, listener),
|
|
send: (channel: string, ...args: any[]) => ipcRenderer.send(channel, ...args),
|
|
removeAllListeners: (channel: string) => ipcRenderer.removeAllListeners(channel),
|
|
}
|
|
};
|
|
|
|
const api = {
|
|
installOllama: () => ipcRenderer.invoke("install-ollama-and-model"),
|
|
|
|
// 监听进度 (Send/On)
|
|
onInstallProgress: (callback) => {
|
|
ipcRenderer.on("install-progress", (_event, value) => callback(value));
|
|
},
|
|
|
|
// 移除监听器
|
|
removeInstallProgressListeners: () => {
|
|
ipcRenderer.removeAllListeners("install-progress");
|
|
},
|
|
};
|
|
|
|
if (process.contextIsolated) {
|
|
try {
|
|
contextBridge.exposeInMainWorld("electron", electronAPI);
|
|
contextBridge.exposeInMainWorld("api", api);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
} else {
|
|
// @ts-ignore (define in dts)
|
|
window.electron = electronAPI;
|
|
// @ts-ignore (define in dts)
|
|
window.api = api;
|
|
}
|