From 9e72f82975151797ca66ed6fe3673ada72f22cf9 Mon Sep 17 00:00:00 2001 From: Aditya8369 Date: Thu, 28 May 2026 15:52:05 +0530 Subject: [PATCH] =?UTF-8?q?Bug=20:disease.js=20&=20disease.html=20?= =?UTF-8?q?=E2=80=93=20Race=20Condition=20in=20Image=20Upload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- disease.js | 61 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/disease.js b/disease.js index 309a20124..8d37f97ca 100644 --- a/disease.js +++ b/disease.js @@ -255,6 +255,8 @@ const loading = document.getElementById("loading"); const resultsDiv = document.getElementById("results"); let selectedFile = null; +let uploadInProgress = false; +let fileSelectionToken = 0; // File upload handling uploadArea.addEventListener("click", () => fileInput.click()); @@ -308,7 +310,7 @@ fileInput.addEventListener("change", (e) => { // Analysis function analyzeBtn.addEventListener("click", async () => { - if (!selectedFile) return; + if (uploadInProgress || !selectedFile) return; loading.style.display = "block"; resultsDiv.innerHTML = ""; @@ -470,40 +472,59 @@ function validateImage(file) { return true; } +function readPreviewDataUrl(file) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + + reader.onload = (event) => resolve(event.target.result); + reader.onerror = () => reject(new Error("Error loading image preview.")); + reader.readAsDataURL(file); + }); +} + // Enhanced file handling with validation -function handleFileSelect(file) { +async function handleFileSelect(file) { + const currentSelectionToken = ++fileSelectionToken; + try { validateImage(file); - selectedFile = file; + uploadInProgress = true; + selectedFile = null; + analyzeBtn.disabled = true; previewContainer.innerHTML = '
'; - const reader = new FileReader(); - reader.onload = (e) => { - previewContainer.innerHTML = `Plant preview`; - analyzeBtn.disabled = false; - resultsDiv.innerHTML = ""; - document.getElementById("downloadPdfBtn").style.display = "none"; + const previewDataUrl = await readPreviewDataUrl(file); - document.getElementById("modelStatus").innerHTML = - "🔍 Image loaded - Ready for analysis"; - document.getElementById("modelStatus").className = - "status-indicator status-warning"; - }; + if (currentSelectionToken !== fileSelectionToken) { + return; + } + + selectedFile = file; + previewContainer.innerHTML = `Plant preview`; + resultsDiv.innerHTML = ""; + document.getElementById("downloadPdfBtn").style.display = "none"; - reader.onerror = () => { - previewContainer.innerHTML = - '
❌ Error loading image
'; - selectedFile = null; - }; + document.getElementById("modelStatus").innerHTML = + "🔍 Image loaded - Ready for analysis"; + document.getElementById("modelStatus").className = + "status-indicator status-warning"; - reader.readAsDataURL(file); + analyzeBtn.disabled = false; } catch (error) { + if (currentSelectionToken !== fileSelectionToken) { + return; + } + alert(error.message); previewContainer.innerHTML = '
📷 Upload an image to get started
'; selectedFile = null; analyzeBtn.disabled = true; + } finally { + if (currentSelectionToken === fileSelectionToken) { + uploadInProgress = false; + } } }