From 463916c75ccb4138b3b95a50e222e5e49f956275 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Wed, 18 Feb 2026 22:40:22 -0500 Subject: [PATCH] fix: resolve drawing dropdown race condition and save PDF hash to export record Detach EquipmentBox event before programmatically setting equipment to prevent async UpdateDrawingDropdownAsync from clearing the drawing selection and duplicating entries. Also update ExportRecord.PdfContentHash in StorePdfAsync so the web frontend can serve PDF downloads. Co-Authored-By: Claude Opus 4.6 --- ExportDXF/Forms/MainForm.cs | 8 ++++++++ FabWorks.Api/Services/FileStorageService.cs | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/ExportDXF/Forms/MainForm.cs b/ExportDXF/Forms/MainForm.cs index 1871506..cf124a3 100644 --- a/ExportDXF/Forms/MainForm.cs +++ b/ExportDXF/Forms/MainForm.cs @@ -477,6 +477,9 @@ namespace ExportDXF.Forms if (drawingInfo != null) { + // Detach event to prevent async race when setting equipment + equipmentBox.SelectedIndexChanged -= EquipmentBox_SelectedIndexChanged; + if (!string.IsNullOrEmpty(drawingInfo.EquipmentNo)) { if (!equipmentBox.Items.Contains(drawingInfo.EquipmentNo)) @@ -484,6 +487,11 @@ namespace ExportDXF.Forms equipmentBox.Text = drawingInfo.EquipmentNo; } + // Load drawings for the selected equipment, then set drawing number + await UpdateDrawingDropdownAsync(); + + equipmentBox.SelectedIndexChanged += EquipmentBox_SelectedIndexChanged; + if (!string.IsNullOrEmpty(drawingInfo.DrawingNo)) { if (!drawingNoBox.Items.Contains(drawingInfo.DrawingNo)) diff --git a/FabWorks.Api/Services/FileStorageService.cs b/FabWorks.Api/Services/FileStorageService.cs index f55231e..52cdb0b 100644 --- a/FabWorks.Api/Services/FileStorageService.cs +++ b/FabWorks.Api/Services/FileStorageService.cs @@ -82,6 +82,17 @@ namespace FabWorks.Api.Services var wasUnchanged = previousHash != null && previousHash == contentHash; var isNewFile = await StoreBlobAsync(stream, contentHash, "pdf"); + // Update the export record with the PDF content hash + if (exportRecordId.HasValue) + { + var record = await _db.ExportRecords.FindAsync(exportRecordId.Value); + if (record != null) + { + record.PdfContentHash = contentHash; + await _db.SaveChangesAsync(); + } + } + return new FileUploadResult { ContentHash = contentHash,