推进 INI 面板 restore/load session workflow helper

This commit is contained in:
2026-06-14 21:30:19 +08:00
parent ddc9a4e0f3
commit 8e8a319d78
5 changed files with 364 additions and 22 deletions

View File

@@ -42,6 +42,7 @@ import {
sessionSnapshotSummaryLogLines,
} from "./session-summary.js";
import {
restoreMachineSessionSnapshotWorkflow,
saveMachineSessionSnapshotWorkflow,
} from "./session-workflow.js";
@@ -600,16 +601,24 @@ document.getElementById("save-session-snapshot").addEventListener("click", async
document.getElementById("restore-session-snapshot").addEventListener("click", async () => {
try {
const snapshot = await restoreSessionSnapshotToEditor();
const summary = createSessionSnapshotSummary(snapshot, sessionSnapshotLabel(snapshot.sessionId));
const workflow = await restoreMachineSessionSnapshotWorkflow({
machineId: MACHINE_ID,
snapshotId: UI_SESSION.snapshotId,
snapshotFilename: UI_SESSION.snapshotFilename,
snapshotLabel: sessionSnapshotLabel(UI_SESSION),
loadMachineSessionSnapshot,
loadMachineTextFiles,
});
editor.value = workflow.editorIniText;
setField("sessionIni", workflow.fields.sessionIni);
setField("sessionParameters", workflow.fields.sessionParameters);
setField("sessionToolTable", workflow.fields.sessionToolTable);
setField("sessionGcode", workflow.fields.sessionGcode);
setField("sessionSnapshot", workflow.fields.sessionSnapshot);
setLog(
[
"Restored machine session snapshot from OPFS.",
...sessionSnapshotSummaryLogLines(summary),
`INI: ${summary.iniOpfsPath}`,
`Parameter file: ${summary.parameterOpfsPath}`,
`Tool table file: ${summary.toolTableOpfsPath}`,
`G-code: ${summary.gcodeOpfsPath ?? "-"}`,
...workflow.logLines,
].join("\n"),
);
} catch (error) {
@@ -634,17 +643,25 @@ document.getElementById("load-session").addEventListener("click", async () => {
document.getElementById("restore-load-session").addEventListener("click", async () => {
try {
const snapshot = await restoreSessionSnapshotToEditor();
await loadMachineSessionIntoWasm();
setField("sessionGcode", snapshot.payload.files.gcode);
const summary = createSessionSnapshotSummary(snapshot, sessionSnapshotLabel(snapshot.sessionId));
const loadSummary = createMachineSessionLoadSummary(loadedSession);
const workflow = await restoreMachineSessionSnapshotWorkflow({
machineId: MACHINE_ID,
snapshotId: UI_SESSION.snapshotId,
snapshotFilename: UI_SESSION.snapshotFilename,
snapshotLabel: sessionSnapshotLabel(UI_SESSION),
loadMachineSessionSnapshot,
loadMachineTextFiles,
loadSession: () => loadMachineSessionIntoWasm(),
});
editor.value = workflow.editorIniText;
setField("sessionIni", workflow.fields.sessionIni);
setField("sessionParameters", workflow.fields.sessionParameters);
setField("sessionToolTable", workflow.fields.sessionToolTable);
setField("sessionGcode", workflow.fields.sessionGcode);
setField("sessionSnapshot", workflow.fields.sessionSnapshot);
setLog(
[
"Restored and loaded machine session snapshot.",
...sessionSnapshotSummaryLogLines(summary),
...machineSessionLoadLogLines(loadSummary),
`G-code: ${summary.gcodeOpfsPath ?? "-"}`,
...workflow.logLines,
].join("\n"),
);
} catch (error) {

View File

@@ -1,3 +1,7 @@
import {
createMachineSessionLoadSummary,
machineSessionLoadLogLines,
} from "./session-load-summary.js";
import {
createSessionSnapshotSummary,
sessionSnapshotSummaryLogLines,
@@ -23,6 +27,16 @@ export function sessionSnapshotSaveLogLines(summary) {
];
}
export function sessionSnapshotRestoreLogLines(summary) {
return [
...sessionSnapshotSummaryLogLines(summary),
`INI: ${summary.iniOpfsPath}`,
`Parameter file: ${summary.parameterOpfsPath}`,
`Tool table file: ${summary.toolTableOpfsPath}`,
`G-code: ${summary.gcodeOpfsPath ?? "-"}`,
];
}
export async function saveMachineSessionSnapshotWorkflow({
machineId,
snapshotId,
@@ -63,3 +77,54 @@ export async function saveMachineSessionSnapshotWorkflow({
logLines: sessionSnapshotSaveLogLines(summary),
};
}
export async function restoreMachineSessionSnapshotWorkflow({
machineId,
snapshotId,
snapshotFilename,
snapshotLabel,
loadMachineSessionSnapshot,
loadMachineTextFiles,
loadSession = null,
}) {
const snapshot = await loadMachineSessionSnapshot(
snapshotId,
machineId,
{ filename: snapshotFilename },
);
const files = await loadMachineTextFiles(machineId);
const summary = createSessionSnapshotSummary(snapshot, snapshotLabel ?? snapshotLabelFromSession(snapshot));
const fields = createSessionSnapshotFieldState(summary);
const result = {
snapshot,
editorIniText: files.ini,
summary,
fields,
loadSummary: null,
loadedSession: null,
logLines: sessionSnapshotRestoreLogLines(summary),
};
if (loadSession) {
const loadedSession = await loadSession();
const loadSummary = createMachineSessionLoadSummary(loadedSession);
result.loadedSession = loadedSession;
result.loadSummary = loadSummary;
result.fields = {
...fields,
sessionIni: loadSummary.iniWasmPath,
sessionParameters: loadSummary.parameterWasmPath,
sessionToolTable: loadSummary.toolTableWasmPath,
sessionGcode: summary.gcodeOpfsPath,
};
result.logLines = [
...sessionSnapshotSummaryLogLines(summary),
...machineSessionLoadLogLines(loadSummary),
`G-code: ${summary.gcodeOpfsPath ?? "-"}`,
];
}
return result;
}
function snapshotLabelFromSession(snapshot) {
return snapshot?.metadata?.snapshotLabel ?? snapshot?.sessionId ?? null;
}