import { app, ipcMain, shell } from "electron"; import { mkdir, stat } from "fs/promises"; import { db } from "../../core/db"; import log from "electron-log"; import path from "node:path"; import { downloadSeriesDicomFiles } from "../../core/pacs"; import { executeInferTask } from "../../core/alg"; import { InferDeviceEnum, InferStructuralEnum } from "../../core/alg.type"; export const registerCommonHandler = () => { ipcMain.handle("output:open", async () => { await db.read(); const optPath = db.data.setting.outputPath; const resolvedPath = path.resolve(optPath); try { // 检查路径是否存在 const stats = await stat(resolvedPath); if (stats.isDirectory()) shell.openPath(resolvedPath); } catch (error) { log.error(error); await mkdir(resolvedPath, { recursive: true }); shell.openPath(resolvedPath); } }); ipcMain.handle("device:infer:set", async (_event, inferDevice) => { try { await db.update(({ setting }) => ({ ...setting, inferDevice })); return { success: true, msg: `推理硬件修改为${inferDevice}` }; } catch (error) { await db.update(({ setting }) => ({ ...setting, inferDevice })); log.error(error); return { success: false, msg: `操作失败` }; } }); ipcMain.on("model:infer", async (event, SeriesInstanceUIDs) => { console.log('SeriesInstanceUIDs', SeriesInstanceUIDs) // 构造推理任务参数列表 const pu = InferDeviceEnum.GPU; const module = InferStructuralEnum.AORTA; const turbo = true; const seg_schedule = true; for (let i = 0; i < SeriesInstanceUIDs.length; i++) { const SeriesInstanceUID = SeriesInstanceUIDs[i]; // 下载dicom到本地,获取文件夹路径 const img_path = await downloadSeriesDicomFiles(SeriesInstanceUID); const save_path = path.join( app.getPath("userData"), "output", SeriesInstanceUID ); const task = { save_path, pu, module, turbo, seg_schedule, img_path }; console.log('infer task: ', task); const result = await executeInferTask(task, (data) => { console.log(data) event.reply('infer:progress', data) }); console.log("end: ", result); } }); };