fix: viewer 3MF Bambu/generic, auto-liaison gcode.3mf->3mf, import gcode.3mf NC picker
Deploy via Portainer / deploy (push) Successful in 0s
Deploy via Portainer / deploy (push) Successful in 0s
This commit is contained in:
+25
-8
@@ -23,7 +23,7 @@
|
||||
<div class="collapse" id="bambuBody">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center gap-2 flex-wrap">
|
||||
<input type="file" id="file3mf" accept=".3mf" class="form-control" style="max-width:260px">
|
||||
<input type="file" id="file3mf" accept=".3mf,.gcode.3mf" class="form-control" style="max-width:260px">
|
||||
<button type="button" class="btn btn-outline-warning" onclick="parse3mf()">
|
||||
<i class="bi bi-magic me-1"></i>Extraire
|
||||
</button>
|
||||
@@ -374,6 +374,11 @@ function parse3mf() {
|
||||
if (!document.getElementById('jobName').value)
|
||||
document.getElementById('jobName').value = d.filename;
|
||||
}
|
||||
// ── Fichier non slicé ──
|
||||
if (d.warning) {
|
||||
status.innerHTML = `<span class="text-warning"><i class="bi bi-exclamation-triangle me-1"></i>${d.warning}</span>`;
|
||||
return;
|
||||
}
|
||||
// ── Cas Bambu avec plaques détectées ──
|
||||
if (d.plates && d.plates.length > 1) {
|
||||
_3mfPlates = d.plates;
|
||||
@@ -386,7 +391,7 @@ function parse3mf() {
|
||||
const ok = d.weight_g || d.hours != null;
|
||||
status.innerHTML = ok
|
||||
? '<span class="text-success"><i class="bi bi-check-circle me-1"></i>Données extraites</span>'
|
||||
: '<span class="text-warning"><i class="bi bi-exclamation-triangle me-1"></i>Données non trouvées</span>';
|
||||
: '<span class="text-warning"><i class="bi bi-exclamation-triangle me-1"></i>Données non trouvées — vérifiez que le fichier a bien été slicé</span>';
|
||||
})
|
||||
.catch(() => { status.innerHTML = '<span class="text-danger">Erreur de lecture</span>'; });
|
||||
}
|
||||
@@ -790,17 +795,30 @@ let ncPickerMode = 'source'; // 'source' = remplit seulement sourceFile, 'bambu'
|
||||
}
|
||||
|
||||
async function selectFile(item) {
|
||||
// Toujours remplir le fichier source
|
||||
sfInput.value = item.path;
|
||||
const nameLower = item.name.toLowerCase();
|
||||
const isGcode3mf = nameLower.endsWith('.gcode.3mf');
|
||||
const is3mf = nameLower.endsWith('.3mf');
|
||||
|
||||
// Fichier source : si c'est un gcode.3mf, pointer vers le .3mf projet correspondant
|
||||
if (isGcode3mf) {
|
||||
// Chercher le .3mf projet dans le même dossier
|
||||
const dir = item.path.substring(0, item.path.lastIndexOf('/') + 1);
|
||||
const base = item.name.replace(/\.gcode\.3mf$/i, '');
|
||||
sfInput.value = dir + base + '.3mf';
|
||||
} else {
|
||||
sfInput.value = item.path;
|
||||
}
|
||||
|
||||
// Auto-remplir le nom de commande si vide
|
||||
const nameField = document.getElementById('jobName');
|
||||
if (!nameField.value) {
|
||||
nameField.value = item.name.replace(/\.[^.]+$/, '');
|
||||
const cleanName = item.name.replace(/\.gcode\.3mf$/i, '').replace(/\.[^.]+$/, '');
|
||||
nameField.value = cleanName;
|
||||
}
|
||||
bootstrap.Modal.getInstance(modal).hide();
|
||||
|
||||
// Mode Bambu : récupérer le fichier depuis Nextcloud et le parser comme un 3MF
|
||||
if (ncPickerMode === 'bambu' && item.name.toLowerCase().endsWith('.3mf')) {
|
||||
// Mode Bambu : télécharger et parser le 3MF (gcode.3mf ou projet)
|
||||
if (ncPickerMode === 'bambu' && (is3mf || isGcode3mf)) {
|
||||
const status = document.getElementById('parseStatus');
|
||||
status.innerHTML = '<span class="spinner-border spinner-border-sm me-1"></span>Téléchargement…';
|
||||
try {
|
||||
@@ -808,7 +826,6 @@ let ncPickerMode = 'source'; // 'source' = remplit seulement sourceFile, 'bambu'
|
||||
if (!resp.ok) throw new Error('Erreur téléchargement Nextcloud');
|
||||
const blob = await resp.blob();
|
||||
const file = new File([blob], item.name, { type: 'application/octet-stream' });
|
||||
// Injecter dans l'input local (pour réutiliser parse3mf())
|
||||
const dt = new DataTransfer();
|
||||
dt.items.add(file);
|
||||
document.getElementById('file3mf').files = dt.files;
|
||||
|
||||
Reference in New Issue
Block a user