fix model del & rename

This commit is contained in:
2026-07-31 11:15:54 +08:00
parent d45acaf50f
commit feaddfee7b
8 changed files with 196 additions and 28 deletions
+5 -19
View File
@@ -6,6 +6,7 @@ const { callServer, downloadFromUrl, downloadToPath } = require("./server-client
const { signLicense } = require("./license-manager");
const { plotCsv } = require("./plot-csv");
const { plotJson } = require("./plot-json");
const { createModelHandlers } = require("./model-handlers");
const VOLUME_FIELDS = [
"q_in_val", "dt", "p_max", "fit_low", "fit_high", "T_delta", "xa_full", "num_runs"
@@ -198,6 +199,7 @@ function toDataUrl(filePath) {
}
function registerHandlers() {
const modelHandlers = createModelHandlers({ callServer });
ipcMain.handle("app:get-defaults", () => ({
apiUrl: API_URL,
deviceId: process.env.REINLOOP_DEVICE_ID || "",
@@ -331,35 +333,19 @@ function registerHandlers() {
return result;
});
ipcMain.handle("model:list", (_event, request) =>
callServer({ type: "listModels", folder: `${request.deviceId}/model_config` }, request.credentials));
ipcMain.handle("model:list", (_event, request) => modelHandlers.list(request));
ipcMain.handle("model:choose-upload-file", async () => {
const selection = await dialog.showOpenDialog({ title: "选择模型文件", properties: ["openFile"] });
if (selection.canceled) return null;
const sourcePath = selection.filePaths[0];
return { sourcePath, fileName: path.basename(sourcePath) };
});
ipcMain.handle("model:upload", async (_event, request) => {
if (!request.sourcePath || !request.fileName) throw new Error("请先选择模型文件");
const sourcePath = path.resolve(request.sourcePath);
const fileName = path.basename(request.fileName);
await fs.promises.access(sourcePath, fs.constants.R_OK);
const issued = await callServer({
type: "uploadDataFile", fileName, folder: `${request.deviceId}/model_config`,
overwrite: request.overwrite === true
}, request.credentials);
const form = new FormData();
form.append("file", new Blob([await fs.promises.readFile(sourcePath)]), fileName);
const response = await fetch(issued.uploadMetadata.url, { method: "POST", body: form });
if (![200, 204].includes(response.status)) throw new Error(`模型上传失败: HTTP ${response.status}`);
return { success: true, fileID: issued.fileID, fileName };
});
ipcMain.handle("model:upload", (_event, request) => modelHandlers.upload(request));
ipcMain.handle("model:download", async (_event, request) => {
const result = await callServer({ type: "downloadModel", fileID: request.fileID }, request.credentials);
return { filePath: await downloadFromUrl(result.url, request.fileName, request.credentials) };
});
ipcMain.handle("model:delete", (_event, request) =>
callServer({ type: "deleteFile", fileID: request.fileID }, request.credentials));
ipcMain.handle("model:delete", (_event, request) => modelHandlers.delete(request));
ipcMain.handle("identification:list", (_event, request) =>
callServer({