forked from viewit/KX-Bridge-Release
server/files/metadata returned broken placeholders (size: 1, estimated_time: null) for any file that wasn't uploaded through the bridge's own GCode store - e.g. prints started directly from Anycubic Slicer Next. Verified live against a real Kobra X (see memory reference_buried_report_trigger.md) that the printer sends a previously-unused MQTT topic, buried/report, exactly once per print start - fires identically whether the print was started via Anycubic Slicer Next or via OrcaSlicer/the bridge itself. It carries gcode_size, estimate_duration, and total_layers: precisely the fields the metadata endpoint was missing. Add _on_buried() (registered alongside the existing file/report callback) that caches the single most recent buried/report payload. _build_file_metadata() now tries this cache - matched by task_name - as a third fallback, between the existing GCodeStore lookup and the final size:1 hardcoded placeholder. Ordering is deliberate: live tracked-job state and the file's own GCodeStore row (if the file was uploaded through the bridge) still take priority; buried/report only fills the gap for files the bridge has no other record of. Also surfaces the printer's own storage usage (storage_total_mb/ storage_used_mb from the same payload) in /api/state, previously not exposed anywhere in the bridge. Verified end-to-end against the real printer: after a print start, server/files/metadata for that file returned real size (9573908), estimated_time (3203s), and layer_count (497) instead of the placeholders, and /api/state reported real storage_total_mb/ storage_used_mb.