70 lines
1.9 KiB
JavaScript
70 lines
1.9 KiB
JavaScript
import { loadTextFile, saveTextFile } from "./file-service.js";
|
|
import {
|
|
gcodeProgramPath,
|
|
machineIniPath,
|
|
parameterFilePath,
|
|
splitOpfsPath,
|
|
toolTablePath,
|
|
} from "./path-model.js";
|
|
|
|
const GCODE_PROGRAM_ROOT = ["linuxcnc", "gcode"];
|
|
|
|
const MACHINE_FILE_PATHS = {
|
|
ini: machineIniPath,
|
|
toolTable: toolTablePath,
|
|
parameters: parameterFilePath,
|
|
};
|
|
|
|
export function machineFilePaths(machineId) {
|
|
return {
|
|
ini: machineIniPath(machineId),
|
|
toolTable: toolTablePath(machineId),
|
|
parameters: parameterFilePath(machineId),
|
|
};
|
|
}
|
|
|
|
export async function saveMachineTextFiles(machineId, files, options = {}) {
|
|
if (files === null || typeof files !== "object" || Array.isArray(files)) {
|
|
throw new Error("machine files must be a plain object.");
|
|
}
|
|
|
|
const paths = machineFilePaths(machineId);
|
|
for (const [name, pathFor] of Object.entries(MACHINE_FILE_PATHS)) {
|
|
if (Object.hasOwn(files, name)) {
|
|
await saveTextFile(pathFor(machineId), String(files[name]), options.storage);
|
|
}
|
|
}
|
|
return paths;
|
|
}
|
|
|
|
export async function loadMachineTextFiles(machineId, options = {}) {
|
|
const paths = machineFilePaths(machineId);
|
|
return {
|
|
ini: await loadTextFile(paths.ini, options.storage),
|
|
toolTable: await loadTextFile(paths.toolTable, options.storage),
|
|
parameters: await loadTextFile(paths.parameters, options.storage),
|
|
};
|
|
}
|
|
|
|
export function gcodeFilenameFromProgramPath(path) {
|
|
const parts = splitOpfsPath(path);
|
|
if (
|
|
parts.length !== 3 ||
|
|
parts[0] !== GCODE_PROGRAM_ROOT[0] ||
|
|
parts[1] !== GCODE_PROGRAM_ROOT[1]
|
|
) {
|
|
throw new Error(`Invalid G-code program OPFS path: ${path}`);
|
|
}
|
|
return parts[2];
|
|
}
|
|
|
|
export async function saveGcodeProgram(filename, text, options = {}) {
|
|
const path = gcodeProgramPath(filename);
|
|
await saveTextFile(path, text, options.storage);
|
|
return path;
|
|
}
|
|
|
|
export async function loadGcodeProgram(filename, options = {}) {
|
|
return loadTextFile(gcodeProgramPath(filename), options.storage);
|
|
}
|