推进 INI 面板 UI 会话描述 helper

This commit is contained in:
2026-06-14 16:18:08 +08:00
parent d40a6422e8
commit 69de3305c9
2 changed files with 92 additions and 18 deletions

View File

@@ -49,8 +49,12 @@ const SESSION_WASM_FILES = {
};
const GCODE_FILENAME = "ui-session.ngc";
const GCODE_WASM_FILE = "/work/ui-session.ngc";
const SESSION_SNAPSHOT_ID = "ui-machine-session";
const SESSION_SNAPSHOT_FILENAME = "ui-machine-session.json";
const UI_SESSION = {
snapshotId: "ui-machine-session",
snapshotFilename: "ui-machine-session.json",
defaultGcodeFilename: GCODE_FILENAME,
gcodeWasmPath: GCODE_WASM_FILE,
};
const DEFAULT_TOOL_TABLE = "T2 P7 Z3.125 D1.5 I12 J34 Q4 ;ui session tool\n";
const DEFAULT_PARAMETERS = [
"5161 0.0",
@@ -312,10 +316,19 @@ function syncEditorToWasmFs() {
requireIniSdk().writeTextFile(WASM_FILE, editor.value);
}
function sessionSnapshotLabel(snapshot = UI_SESSION) {
const sessionId = typeof snapshot === "string" ? snapshot : snapshot.snapshotId ?? snapshot.sessionId;
return `${sessionId}/${UI_SESSION.snapshotFilename}`;
}
function defaultGcodeOpfsPath() {
return `linuxcnc/gcode/${UI_SESSION.defaultGcodeFilename}`;
}
async function loadSelectedGcodeProgram() {
const opfsPath = restoredSessionSnapshot?.payload?.files?.gcode;
let filename = GCODE_FILENAME;
let selectedOpfsPath = `linuxcnc/gcode/${GCODE_FILENAME}`;
let filename = UI_SESSION.defaultGcodeFilename;
let selectedOpfsPath = defaultGcodeOpfsPath();
let source = "default";
if (typeof opfsPath === "string") {
try {
@@ -323,23 +336,23 @@ async function loadSelectedGcodeProgram() {
selectedOpfsPath = opfsPath;
source = "snapshot";
} catch {
filename = GCODE_FILENAME;
filename = UI_SESSION.defaultGcodeFilename;
}
}
return {
filename,
opfsPath: selectedOpfsPath,
source,
wasmPath: GCODE_WASM_FILE,
wasmPath: UI_SESSION.gcodeWasmPath,
text: await loadGcodeProgram(filename),
};
}
async function restoreSessionSnapshotToEditor() {
const snapshot = await loadMachineSessionSnapshot(
SESSION_SNAPSHOT_ID,
UI_SESSION.snapshotId,
MACHINE_ID,
{ filename: SESSION_SNAPSHOT_FILENAME },
{ filename: UI_SESSION.snapshotFilename },
);
const files = await loadMachineTextFiles(MACHINE_ID);
editor.value = files.ini;
@@ -347,7 +360,7 @@ async function restoreSessionSnapshotToEditor() {
setField("sessionParameters", snapshot.payload.files.parameters);
setField("sessionToolTable", snapshot.payload.files.toolTable);
setField("sessionGcode", snapshot.payload.files.gcode);
setField("sessionSnapshot", `${snapshot.sessionId}/${SESSION_SNAPSHOT_FILENAME}`);
setField("sessionSnapshot", sessionSnapshotLabel(snapshot.sessionId));
restoredSessionSnapshot = snapshot;
return snapshot;
}
@@ -466,7 +479,7 @@ document.getElementById("save-machine-files").addEventListener("click", async ()
toolTable: DEFAULT_TOOL_TABLE,
parameters: DEFAULT_PARAMETERS,
});
const gcodePath = await saveGcodeProgram(GCODE_FILENAME, DEFAULT_GCODE);
const gcodePath = await saveGcodeProgram(UI_SESSION.defaultGcodeFilename, DEFAULT_GCODE);
setLog(
[
"Saved machine text files to OPFS.",
@@ -488,13 +501,13 @@ document.getElementById("save-session-snapshot").addEventListener("click", async
toolTable: DEFAULT_TOOL_TABLE,
parameters: DEFAULT_PARAMETERS,
});
await saveGcodeProgram(GCODE_FILENAME, DEFAULT_GCODE);
await saveGcodeProgram(UI_SESSION.defaultGcodeFilename, DEFAULT_GCODE);
const snapshot = await saveMachineSessionSnapshot(
SESSION_SNAPSHOT_ID,
UI_SESSION.snapshotId,
MACHINE_ID,
{
filename: SESSION_SNAPSHOT_FILENAME,
gcodeFilename: GCODE_FILENAME,
filename: UI_SESSION.snapshotFilename,
gcodeFilename: UI_SESSION.defaultGcodeFilename,
metadata: { source: "ini-panel" },
},
);
@@ -502,11 +515,11 @@ document.getElementById("save-session-snapshot").addEventListener("click", async
setField("sessionParameters", snapshot.payload.files.parameters);
setField("sessionToolTable", snapshot.payload.files.toolTable);
setField("sessionGcode", snapshot.payload.files.gcode);
setField("sessionSnapshot", `${SESSION_SNAPSHOT_ID}/${SESSION_SNAPSHOT_FILENAME}`);
setField("sessionSnapshot", sessionSnapshotLabel(UI_SESSION));
setLog(
[
"Saved machine session snapshot to OPFS.",
`Snapshot: ${SESSION_SNAPSHOT_ID}/${SESSION_SNAPSHOT_FILENAME}`,
`Snapshot: ${sessionSnapshotLabel(UI_SESSION)}`,
`INI: ${snapshot.payload.files.ini}`,
`Parameter file: ${snapshot.payload.files.parameters}`,
`Tool table file: ${snapshot.payload.files.toolTable}`,
@@ -524,7 +537,7 @@ document.getElementById("restore-session-snapshot").addEventListener("click", as
setLog(
[
"Restored machine session snapshot from OPFS.",
`Snapshot: ${snapshot.sessionId}/${SESSION_SNAPSHOT_FILENAME}`,
`Snapshot: ${sessionSnapshotLabel(snapshot.sessionId)}`,
`INI: ${snapshot.payload.files.ini}`,
`Parameter file: ${snapshot.payload.files.parameters}`,
`Tool table file: ${snapshot.payload.files.toolTable}`,
@@ -562,7 +575,7 @@ document.getElementById("restore-load-session").addEventListener("click", async
setLog(
[
"Restored and loaded machine session snapshot.",
`Snapshot: ${snapshot.sessionId}/${SESSION_SNAPSHOT_FILENAME}`,
`Snapshot: ${sessionSnapshotLabel(snapshot.sessionId)}`,
`INI: ${loadedSession.ini.opfsPath} -> ${loadedSession.ini.wasmPath}`,
`Parameter file: ${loadedSession.parameters.opfsPath} -> ${loadedSession.parameters.wasmPath}`,
`Parameters: ${loadedSession.parameters.result.trim()}`,