185 lines
5.1 KiB
JavaScript
185 lines
5.1 KiB
JavaScript
"use strict";
|
||
const electron = require("electron");
|
||
const IPC_CHANNELS = {
|
||
SAVE_FILE: "file:save",
|
||
READ_FILE: "file:read",
|
||
GET_SETTINGS: "settings:get",
|
||
SAVE_SETTINGS: "settings:save",
|
||
// 缓存操作
|
||
CACHE_SET_JSON: "cache:setJSON",
|
||
CACHE_GET_JSON: "cache:getJSON",
|
||
CACHE_SET_BINARY: "cache:setBinary",
|
||
CACHE_GET_BINARY: "cache:getBinary",
|
||
CACHE_HAS: "cache:has",
|
||
CACHE_DELETE: "cache:delete",
|
||
CACHE_CLEAR_NAMESPACE: "cache:clearNamespace",
|
||
CACHE_CLEAR_ALL: "cache:clearAll",
|
||
CACHE_GET_STATS: "cache:getStats",
|
||
// 窗口操作
|
||
WINDOW_MINIMIZE: "window:minimize",
|
||
WINDOW_MAXIMIZE: "window:maximize",
|
||
WINDOW_CLOSE: "window:close",
|
||
// Git/System 操作
|
||
DIALOG_OPEN_DIRECTORY: "dialog:openDirectory",
|
||
GIT_CLONE: "git:clone"
|
||
};
|
||
const electronAPI = {
|
||
// ============================================
|
||
// 文件操作 API
|
||
// ============================================
|
||
file: {
|
||
/**
|
||
* 保存文件到桌面
|
||
* @param content - 文件内容
|
||
* @param filename - 文件名(可选,默认为 demo-note.txt)
|
||
*/
|
||
save: (content, filename) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.SAVE_FILE, content, filename);
|
||
},
|
||
/**
|
||
* 从桌面读取文件
|
||
* @param filename - 文件名(可选,默认为 demo-note.txt)
|
||
*/
|
||
read: (filename) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.READ_FILE, filename);
|
||
},
|
||
/**
|
||
* 打开目录选择对话框
|
||
*/
|
||
openDirectory: () => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.DIALOG_OPEN_DIRECTORY);
|
||
}
|
||
},
|
||
// ============================================
|
||
// Git 操作 API
|
||
// ============================================
|
||
git: {
|
||
/**
|
||
* 克隆 Git 仓库
|
||
* @param repoUrl - 仓库地址
|
||
* @param targetDir - 目标目录
|
||
*/
|
||
clone: (repoUrl, targetDir) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.GIT_CLONE, repoUrl, targetDir);
|
||
},
|
||
/**
|
||
* 监听 Git 进度
|
||
*/
|
||
onProgress: (callback) => {
|
||
electron.ipcRenderer.removeAllListeners("git:progress");
|
||
electron.ipcRenderer.on("git:progress", (_event, data) => {
|
||
callback(data);
|
||
});
|
||
},
|
||
/**
|
||
* 移除监听器
|
||
*/
|
||
removeListener: () => {
|
||
electron.ipcRenderer.removeAllListeners("git:progress");
|
||
}
|
||
},
|
||
// ============================================
|
||
// 设置操作 API
|
||
// ============================================
|
||
settings: {
|
||
/**
|
||
* 获取用户设置
|
||
* @param key - 设置键名(可选,不传返回所有设置)
|
||
*/
|
||
get: (key) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.GET_SETTINGS, key);
|
||
},
|
||
/**
|
||
* 保存用户设置
|
||
* @param key - 设置键名
|
||
* @param value - 设置值
|
||
*/
|
||
save: (key, value) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.SAVE_SETTINGS, key, value);
|
||
}
|
||
},
|
||
// ============================================
|
||
// 缓存操作 API
|
||
// ============================================
|
||
cache: {
|
||
/**
|
||
* 设置JSON缓存
|
||
*/
|
||
setJSON: (key, data, config) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.CACHE_SET_JSON, key, data, config);
|
||
},
|
||
/**
|
||
* 获取JSON缓存
|
||
*/
|
||
getJSON: (key, config) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.CACHE_GET_JSON, key, config);
|
||
},
|
||
/**
|
||
* 设置二进制缓存
|
||
*/
|
||
setBinary: (key, buffer, type, config) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.CACHE_SET_BINARY, key, buffer, type, config);
|
||
},
|
||
/**
|
||
* 获取二进制缓存
|
||
*/
|
||
getBinary: (key, config) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.CACHE_GET_BINARY, key, config);
|
||
},
|
||
/**
|
||
* 检查缓存是否存在
|
||
*/
|
||
has: (key, config) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.CACHE_HAS, key, config);
|
||
},
|
||
/**
|
||
* 删除单个缓存
|
||
*/
|
||
delete: (key, namespace) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.CACHE_DELETE, key, namespace);
|
||
},
|
||
/**
|
||
* 清空命名空间缓存
|
||
*/
|
||
clearNamespace: (namespace) => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.CACHE_CLEAR_NAMESPACE, namespace);
|
||
},
|
||
/**
|
||
* 清空所有缓存
|
||
*/
|
||
clearAll: () => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.CACHE_CLEAR_ALL);
|
||
},
|
||
/**
|
||
* 获取缓存统计信息
|
||
*/
|
||
getStats: () => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.CACHE_GET_STATS);
|
||
}
|
||
},
|
||
// ============================================
|
||
// 窗口操作 API
|
||
// ============================================
|
||
window: {
|
||
/**
|
||
* 最小化窗口
|
||
*/
|
||
minimize: () => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.WINDOW_MINIMIZE);
|
||
},
|
||
/**
|
||
* 最大化/还原窗口
|
||
*/
|
||
maximize: () => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.WINDOW_MAXIMIZE);
|
||
},
|
||
/**
|
||
* 关闭窗口
|
||
*/
|
||
close: () => {
|
||
return electron.ipcRenderer.invoke(IPC_CHANNELS.WINDOW_CLOSE);
|
||
}
|
||
}
|
||
};
|
||
electron.contextBridge.exposeInMainWorld("electronAPI", electronAPI);
|