AssetPro/electron/ipc.ts

159 lines
4.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* IPC 通信处理器
* 安全地暴露主进程功能给渲染进程
*/
import { ipcMain, app } from 'electron'
import { promises as fs } from 'fs'
import path from 'path'
import { getSettings, saveSettings } from './store'
// IPC 通道名称常量
export const IPC_CHANNELS = {
// 文件操作
SAVE_FILE: 'file:save',
READ_FILE: 'file:read',
// 设置操作
GET_SETTINGS: 'settings:get',
SAVE_SETTINGS: 'settings:save'
} as const
/**
* 设置所有 IPC 处理器
*/
export function setupIpcHandlers() {
// ============================================
// 文件操作相关 IPC
// ============================================
/**
* 保存文件到桌面
* @param content - 要保存的文件内容
* @param filename - 文件名(默认为 demo-note.txt
* @returns 保存结果
*/
ipcMain.handle(
IPC_CHANNELS.SAVE_FILE,
async (_event, content: string, filename: string = 'demo-note.txt') => {
try {
// 获取桌面路径
const desktopPath = app.getPath('desktop')
const filePath = path.join(desktopPath, filename)
// 写入文件(使用 UTF-8 编码)
await fs.writeFile(filePath, content, 'utf-8')
return {
success: true,
message: `文件已保存到: ${filePath}`,
path: filePath
}
} catch (error) {
const errorMessage = error instanceof Error ? error.message : '未知错误'
console.error('保存文件失败:', errorMessage)
return {
success: false,
message: `保存失败: ${errorMessage}`,
path: null
}
}
}
)
/**
* 从桌面读取文件
* @param filename - 文件名(默认为 demo-note.txt
* @returns 文件内容
*/
ipcMain.handle(
IPC_CHANNELS.READ_FILE,
async (_event, filename: string = 'demo-note.txt') => {
try {
// 获取桌面路径
const desktopPath = app.getPath('desktop')
const filePath = path.join(desktopPath, filename)
// 检查文件是否存在
try {
await fs.access(filePath)
} catch {
return {
success: false,
message: '文件不存在,请先保存一个文件',
content: null
}
}
// 读取文件内容
const content = await fs.readFile(filePath, 'utf-8')
return {
success: true,
message: '文件读取成功',
content
}
} catch (error) {
const errorMessage = error instanceof Error ? error.message : '未知错误'
console.error('读取文件失败:', errorMessage)
return {
success: false,
message: `读取失败: ${errorMessage}`,
content: null
}
}
}
)
// ============================================
// 用户设置相关 IPC
// ============================================
/**
* 获取用户设置
* @param key - 可选的设置键名,不传则返回所有设置
* @returns 设置值
*/
ipcMain.handle(IPC_CHANNELS.GET_SETTINGS, async (_event, key?: string) => {
try {
const settings = getSettings(key)
return {
success: true,
data: settings
}
} catch (error) {
const errorMessage = error instanceof Error ? error.message : '未知错误'
console.error('获取设置失败:', errorMessage)
return {
success: false,
data: null,
message: errorMessage
}
}
})
/**
* 保存用户设置
* @param key - 设置键名
* @param value - 设置值
* @returns 保存结果
*/
ipcMain.handle(
IPC_CHANNELS.SAVE_SETTINGS,
async (_event, key: string, value: unknown) => {
try {
saveSettings(key, value)
return {
success: true,
message: '设置已保存'
}
} catch (error) {
const errorMessage = error instanceof Error ? error.message : '未知错误'
console.error('保存设置失败:', errorMessage)
return {
success: false,
message: `保存失败: ${errorMessage}`
}
}
}
)
}