project-foundry 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/local-printer-executor.js +61 -15
package/package.json
CHANGED
|
@@ -103,20 +103,40 @@ export async function executeLocalPrinterAction({ action, printerId, connectionC
|
|
|
103
103
|
let status = klippyState === 'ready' ? 'IDLE' : 'ERROR';
|
|
104
104
|
let message = `Klipper: ${klippyState}`;
|
|
105
105
|
let temperatures = {};
|
|
106
|
+
let progress = 0;
|
|
107
|
+
let currentLayer = 0;
|
|
108
|
+
let totalLayers = 0;
|
|
109
|
+
let filename;
|
|
110
|
+
let elapsedSeconds = 0;
|
|
106
111
|
|
|
107
112
|
try {
|
|
108
113
|
const telRes = await fetch(
|
|
109
|
-
`${baseUrl}/printer/objects/query?print_stats&extruder&heater_bed`,
|
|
110
|
-
{ headers, signal: AbortSignal.timeout(
|
|
114
|
+
`${baseUrl}/printer/objects/query?print_stats&display_status&virtual_sdcard&extruder&heater_bed`,
|
|
115
|
+
{ headers, signal: AbortSignal.timeout(6000) }
|
|
111
116
|
);
|
|
112
117
|
if (telRes.ok) {
|
|
113
118
|
const tel = await telRes.json();
|
|
114
|
-
const
|
|
115
|
-
const
|
|
116
|
-
const
|
|
117
|
-
const
|
|
119
|
+
const s = tel?.result?.status || {};
|
|
120
|
+
const printStats = s.print_stats || {};
|
|
121
|
+
const display = s.display_status || {};
|
|
122
|
+
const virtualSd = s.virtual_sdcard || {};
|
|
123
|
+
const ext = s.extruder || {};
|
|
124
|
+
const bed = s.heater_bed || {};
|
|
125
|
+
|
|
126
|
+
const st = String(printStats.state || '').toLowerCase();
|
|
118
127
|
if (st === 'printing') status = 'PRINTING';
|
|
119
128
|
else if (st === 'paused') status = 'PAUSED';
|
|
129
|
+
else if (st === 'complete') status = 'IDLE';
|
|
130
|
+
else if (st === 'error') status = 'ERROR';
|
|
131
|
+
|
|
132
|
+
const dispProg = Number(display.progress || 0);
|
|
133
|
+
const sdProg = Number(virtualSd.progress || 0);
|
|
134
|
+
progress = Math.round(Math.max(dispProg, sdProg) * 100);
|
|
135
|
+
|
|
136
|
+
currentLayer = Number(virtualSd.layer || printStats?.info?.current_layer || 0);
|
|
137
|
+
totalLayers = Number(virtualSd.layer_count || printStats?.info?.total_layer || 0);
|
|
138
|
+
filename = printStats.filename || undefined;
|
|
139
|
+
elapsedSeconds = Number(printStats.print_duration || printStats.total_duration || 0);
|
|
120
140
|
|
|
121
141
|
temperatures = {
|
|
122
142
|
hotend: ext.temperature,
|
|
@@ -124,7 +144,7 @@ export async function executeLocalPrinterAction({ action, printerId, connectionC
|
|
|
124
144
|
bed: bed.temperature,
|
|
125
145
|
bedTarget: bed.target,
|
|
126
146
|
};
|
|
127
|
-
if (
|
|
147
|
+
if (printStats.message) message = printStats.message;
|
|
128
148
|
}
|
|
129
149
|
} catch {}
|
|
130
150
|
|
|
@@ -132,6 +152,11 @@ export async function executeLocalPrinterAction({ action, printerId, connectionC
|
|
|
132
152
|
online: true,
|
|
133
153
|
status,
|
|
134
154
|
message,
|
|
155
|
+
progress,
|
|
156
|
+
currentLayer,
|
|
157
|
+
totalLayers,
|
|
158
|
+
filename,
|
|
159
|
+
elapsedSeconds,
|
|
135
160
|
temperatures,
|
|
136
161
|
};
|
|
137
162
|
}
|
|
@@ -183,20 +208,41 @@ export async function executeLocalPrinterAction({ action, printerId, connectionC
|
|
|
183
208
|
isDone = true;
|
|
184
209
|
clearTimeout(timer);
|
|
185
210
|
client.end(true);
|
|
211
|
+
|
|
186
212
|
const state = String(data.print.gcode_state || 'IDLE').toUpperCase();
|
|
187
213
|
const percent = Number(data.print.mc_percent || 0);
|
|
188
|
-
const
|
|
214
|
+
const isFinished = state === 'FINISH' || (state === 'IDLE' && percent === 100);
|
|
215
|
+
const isPrinting = (state === 'RUNNING' || state === 'PREPARE') && !isFinished;
|
|
216
|
+
const isPaused = state === 'PAUSE';
|
|
217
|
+
|
|
218
|
+
const filename =
|
|
219
|
+
typeof data.print.subtask_name === 'string' && data.print.subtask_name.trim()
|
|
220
|
+
? data.print.subtask_name.trim()
|
|
221
|
+
: typeof data.print.gcode_file === 'string' && data.print.gcode_file.trim()
|
|
222
|
+
? data.print.gcode_file.trim()
|
|
223
|
+
: undefined;
|
|
224
|
+
|
|
225
|
+
const remainingMins = Number(data.print.mc_remaining_time);
|
|
226
|
+
const remainingSeconds = Number.isFinite(remainingMins) ? Math.max(0, remainingMins * 60) : undefined;
|
|
227
|
+
|
|
189
228
|
resolve({
|
|
190
229
|
online: true,
|
|
191
|
-
status: isPrinting ? 'PRINTING' : (
|
|
192
|
-
message:
|
|
230
|
+
status: isPrinting ? 'PRINTING' : (isPaused ? 'PAUSED' : 'IDLE'),
|
|
231
|
+
message: isFinished
|
|
232
|
+
? 'Impressão concluída com sucesso'
|
|
233
|
+
: `Bambu LAN conectada (${state})`,
|
|
193
234
|
progress: percent,
|
|
235
|
+
currentLayer: Number(data.print.layer_num || 0),
|
|
236
|
+
totalLayers: Number(data.print.total_layer_num || 0),
|
|
237
|
+
filename,
|
|
238
|
+
remainingSeconds,
|
|
239
|
+
jobFinished: isFinished,
|
|
194
240
|
temperatures: {
|
|
195
|
-
hotend: data.print.nozzle_temper,
|
|
196
|
-
hotendTarget: data.print.nozzle_target_temper,
|
|
197
|
-
bed: data.print.bed_temper,
|
|
198
|
-
bedTarget: data.print.bed_target_temper,
|
|
199
|
-
chamber: data.print.chamber_temper,
|
|
241
|
+
hotend: Number(data.print.nozzle_temper || 0),
|
|
242
|
+
hotendTarget: Number(data.print.nozzle_target_temper || 0),
|
|
243
|
+
bed: Number(data.print.bed_temper || 0),
|
|
244
|
+
bedTarget: Number(data.print.bed_target_temper || 0),
|
|
245
|
+
chamber: Number(data.print.chamber_temper || 0),
|
|
200
246
|
},
|
|
201
247
|
});
|
|
202
248
|
}
|