diff --git a/app/main.py b/app/main.py index 85abcd1..aa7ac4d 100644 --- a/app/main.py +++ b/app/main.py @@ -19,6 +19,22 @@ import app.upscaler as upscaler app = FastAPI(title="AI Video Upscaler Dashboard") +# Middleware to prevent browser caching of static files (dev mode) +from starlette.middleware.base import BaseHTTPMiddleware +from starlette.requests import Request + +class NoCacheStaticMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + response = await call_next(request) + path = request.url.path + if path.endswith(('.js', '.css', '.html')) or path == '/': + response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" + response.headers["Pragma"] = "no-cache" + response.headers["Expires"] = "0" + return response + +app.add_middleware(NoCacheStaticMiddleware) + # CORS middleware for local development app.add_middleware( CORSMiddleware, diff --git a/static/app.js b/static/app.js index a8ef37d..79a1c58 100644 --- a/static/app.js +++ b/static/app.js @@ -1494,7 +1494,7 @@ async function loadQueue() { const jobs = await res.json(); const displayJobs = jobs.filter(job => - ["queued", "analyzing", "extracting", "upscaling", "restoring_faces", "interpolating", "assembling", "completed", "failed", "cancelled", "interrupted"].includes(job.status) + ["queued", "analyzing", "extracting", "upscaling", "restoring_faces", "interpolating", "assembling", "completed", "failed", "cancelled", "interrupted", "paused"].includes(job.status) ); if (displayJobs.length === 0) { @@ -1520,7 +1520,7 @@ async function loadQueue() { let metaHtml = ` Model: ${modelLabel} (${scaleLabel}) - Source: ${job.video_path.split('/').pop()} + Source: ${job.video_path ? job.video_path.split('/').pop() : 'Unknown'} `; let errorHtml = ""; @@ -2033,11 +2033,11 @@ async function loadUploadsBrowser() { } async function initializeApp() { - await loadModels(); - await checkActiveJobs(); - await loadGallery(); // Load enhancement gallery at page load - await loadQueue(); // Load active jobs queue at page load - await loadUploadsBrowser(); // Load previously uploaded videos browser + try { await loadModels(); } catch(e) { console.error("initializeApp: loadModels failed:", e); } + try { await checkActiveJobs(); } catch(e) { console.error("initializeApp: checkActiveJobs failed:", e); } + try { await loadGallery(); } catch(e) { console.error("initializeApp: loadGallery failed:", e); } + try { await loadQueue(); } catch(e) { console.error("initializeApp: loadQueue failed:", e); } + try { await loadUploadsBrowser(); } catch(e) { console.error("initializeApp: loadUploadsBrowser failed:", e); } // Load GPU Diagnostics try {