mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-07 14:41:24 +02:00
Two consecutive plates of the same model would create the second print's archive with the first plate's metadata: subtask_name lags across the boundary while gcode_file is fresh, so the FTP candidate list (built from subtask_name first) lands on the previous plate's still-resident upload. The 3MF parser then locks the wrong _plate_index, name, time estimate, and per-slot filament data into the archive at creation. Fix peeks the downloaded 3MF's slice_info plate index, compares against parse_plate_id(filename) (the plate parsed from /Metadata/plate_N.gcode, which always reflects what's running), and on mismatch retries FTP with swap_plate_suffix(subtask_name, expected_plate) — handling both the spaced "Plate N" and underscored "_plate_N" suffix forms seen in real subtask_names. If the retry finds a matching 3MF, the wrong file is dropped and the corrected one feeds the archive; if no match is found (or no swap is possible) the wrong file is dropped and the existing no-3MF fallback creates an archive whose name reflects the right plate. The validation only runs when parse_plate_id() returns a value, so single-plate / cloud-named / non-Bambu jobs are unaffected. 17 new unit tests in test_archive_plate_validation.py cover both helpers: plate-index peek across malformed / missing / non-integer / non-zip inputs, and the suffix swap across both casings, the underscored form, case-insensitive matching, and rejection of names without a recognised suffix.