Files
cnc_wams/wasm-port/runtime/ui/ini-panel/run-workflow.js

110 lines
2.9 KiB
JavaScript

import {
createRunSummary,
} from "./run-summary.js";
import {
createSessionSnapshotSummary,
sessionSnapshotMetadataLogLines,
} from "./session-summary.js";
export function selectSessionGcodeProgram({
snapshot = null,
defaultFilename,
defaultOpfsPath,
wasmPath,
gcodeFilenameFromProgramPath,
}) {
const snapshotOpfsPath = snapshot?.payload?.files?.gcode;
if (typeof snapshotOpfsPath === "string") {
try {
return {
filename: gcodeFilenameFromProgramPath(snapshotOpfsPath),
opfsPath: snapshotOpfsPath,
source: "snapshot",
wasmPath,
};
} catch {
// Invalid snapshot program paths fall back to the UI default program.
}
}
return {
filename: defaultFilename,
opfsPath: defaultOpfsPath,
source: "default",
wasmPath,
};
}
export function runSessionContextLogLines(program, snapshot = null, snapshotLabel = null) {
const summary = createSessionSnapshotSummary({
metadata: snapshot?.metadata ?? {},
});
return [
`Program: ${program.opfsPath} -> ${program.wasmPath}`,
`Program source: ${program.source}`,
`Snapshot: ${snapshot ? (snapshotLabel ?? snapshot?.metadata?.snapshotLabel ?? snapshot?.sessionId) : "-"}`,
...sessionSnapshotMetadataLogLines(summary),
];
}
export async function runGcodeSessionWorkflow({
interp,
loadedSession,
snapshot = null,
defaultFilename,
defaultOpfsPath,
wasmPath,
gcodeFilenameFromProgramPath,
loadGcodeProgram,
summarizeRun = () => ({}),
snapshotLabel = null,
}) {
if (!loadedSession) {
throw new Error("Load a machine session before running G-code.");
}
const program = selectSessionGcodeProgram({
snapshot,
defaultFilename,
defaultOpfsPath,
wasmPath,
gcodeFilenameFromProgramPath,
});
const programText = await loadGcodeProgram(program.filename);
interp.writeTextFile(program.wasmPath, programText);
const resultText = interp.runFileWithIni(program.wasmPath, loadedSession.ini.wasmPath).trim();
const runResultSummary = summarizeRun(resultText, programText);
const { motionSnapshots = [], ...runCounts } = runResultSummary;
const summary = createRunSummary(
program,
{
runStatus: "ok",
iniWasmPath: loadedSession.ini.wasmPath,
snapshotLabel: snapshot ? snapshotLabel : null,
...runCounts,
},
snapshot,
);
return {
program: {
...program,
text: programText,
},
resultText,
motionSnapshots,
summary,
fields: {
sessionGcode: program.opfsPath,
runStatus: summary.runStatus,
runSource: summary.programSource,
runSnapshot: summary.snapshotLabel ?? "-",
runWorkflow: summary.workflow ?? "-",
runOpfsPath: summary.programOpfsPath,
runWasmPath: summary.programWasmPath,
},
logLines: [
...runSessionContextLogLines(program, snapshot, summary.snapshotLabel),
`INI: ${loadedSession.ini.wasmPath}`,
resultText,
],
};
}