From 1e74b3a1490e8ab5a35bf36cb73deb8bdf7d606a Mon Sep 17 00:00:00 2001 From: Martin Hohenberg Date: Fri, 19 Jun 2026 10:54:21 +0200 Subject: [PATCH] Auto-analyse STL on job detail load; warn if file missing - If file exists but has no cache entry, run analyse() on page load - If file doesn't exist on disk, show a red alert in the File & Geometry card - Hide Download/Compute buttons when file is missing Co-Authored-By: Claude Sonnet 4.6 --- app/routers/ui.py | 14 +++++++++++++- app/templates/job_detail.html | 11 ++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/routers/ui.py b/app/routers/ui.py index 123271b..1f23768 100644 --- a/app/routers/ui.py +++ b/app/routers/ui.py @@ -265,13 +265,25 @@ def job_detail(job_id: int, request: Request, db: Session = Depends(get_db)): job = db.query(PrintJob).filter(PrintJob.id == job_id).first() if not job: raise HTTPException(status_code=404, detail="Job not found") - stl = db.query(StlCache).filter_by(filename=job.file_name).first() if job.file_name else None + + file_missing = False + stl = None + if job.file_name: + file_path = get_stl_dir() / job.file_name + if not file_path.exists(): + file_missing = True + else: + stl = db.query(StlCache).filter_by(filename=job.file_name).first() + if stl is None and not job.file_name.endswith(".gcode"): + stl = analyse(job.file_name, db) + estimation = estimate(stl.volume_ccm, job.job_material) if stl and stl.volume_ccm else None return templates.TemplateResponse("job_detail.html", { "request": request, "active": "jobs", "job": job, "stl": stl, + "file_missing": file_missing, "estimation": estimation, "printers": db.query(Printer).order_by(Printer.name).all(), "brackets": db.query(JobBracket).order_by(JobBracket.name).all(), diff --git a/app/templates/job_detail.html b/app/templates/job_detail.html index 776272a..21d93f3 100644 --- a/app/templates/job_detail.html +++ b/app/templates/job_detail.html @@ -103,7 +103,7 @@