diff --git a/app.py b/app.py index 812073b..2a34303 100644 --- a/app.py +++ b/app.py @@ -286,8 +286,9 @@ def parse_3mf(file_stream): Retourne un dict avec : - plates : liste de plaques [{index, weight_g, print_time_s, filaments:[{type,color,used_g}]}] - fallback : {weight_g, hours, minutes} si slice_info absent + - warning : message si le fichier n'a pas été slicé """ - result = {'plates': [], 'weight_g': None, 'hours': None, 'minutes': None} + result = {'plates': [], 'weight_g': None, 'hours': None, 'minutes': None, 'warning': None} try: with zipfile.ZipFile(file_stream) as z: names = z.namelist() @@ -368,6 +369,14 @@ def parse_3mf(file_stream): pass except Exception: pass + # Si aucune donnée trouvée, ajouter un avertissement + if not result['plates'] and result['weight_g'] is None: + result['warning'] = ( + "Aucune donnée de découpe dans ce fichier. " + "Dans Bambu Studio : slicez vos plateaux puis utilisez " + "Fichier → Exporter → Exporter le fichier découpé (pas Sauvegarder le projet). " + "Le fichier exporté contiendra poids, temps et consommation filament." + ) return result def calc(weight_g, print_time_s, design_mult, gross_margin_pct, discount_pct, @@ -1556,7 +1565,10 @@ def api_parse_3mf(): if not f.filename.lower().endswith('.3mf'): return jsonify({'error': 'Format .3mf requis'}), 400 result = parse_3mf(f.stream) - result['filename'] = os.path.splitext(f.filename)[0] + # Nettoyer .gcode.3mf ou .3mf du nom + clean = re.sub(r'\.gcode\.3mf$', '', f.filename, flags=re.IGNORECASE) + clean = re.sub(r'\.3mf$', '', clean, flags=re.IGNORECASE) + result['filename'] = clean # Si une seule plaque, pré-sélectionner automatiquement if result['plates'] and len(result['plates']) == 1: p = result['plates'][0] @@ -1833,7 +1845,14 @@ def _parse_propfind(xml_bytes, base_url, username, current_path): name = rel.split('/')[-1] or rel # Filtrer : dossiers ou extensions 3D - ext = name.rsplit('.', 1)[-1].lower() if '.' in name else '' + # Gérer .gcode.3mf avant le split simple + name_lower = name.lower() + if name_lower.endswith('.gcode.3mf'): + ext = '3mf' + elif '.' in name: + ext = name.rsplit('.', 1)[-1].lower() + else: + ext = '' if not is_dir and ext not in ('3mf', 'stl', 'step', 'stp', 'obj', 'gcode'): continue diff --git a/templates/job_detail.html b/templates/job_detail.html index 8d3b800..ba29608 100644 --- a/templates/job_detail.html +++ b/templates/job_detail.html @@ -277,6 +277,8 @@ {% endblock %} {% block scripts %} + +