use std::path::Path; use std::sync::atomic::Ordering; use std::sync::Arc; use askama::Template; use axum::extract::{Path as AxumPath, State}; use axum::response::Html; use tracing::{info, warn}; use time::{format_description::well_known::Rfc3339, Date, OffsetDateTime}; use crate::analyze::{recovery as analyze_recovery, AnalyzeSender, ANALYSIS_INPUT_FILE, DOCUMENT_FILE}; use crate::auth::AuthenticatedWebUser; use crate::config::Config; use crate::error::AppError; use crate::routes::web::{scan_recordings, RecordingView}; use crate::transcribe::{recovery as transcribe_recovery, TranscribeSender}; use crate::{AnalyzeBusy, TranscribeBusy}; struct UserCaseView { case_id: String, most_recent: String, /// HH:MM of the most recent recording in UTC — no-JS fallback. /// Browser script replaces the displayed text with the browser-local /// equivalent via the parallel `recorded_at_iso` field. time_hms_utc: String, /// Full RFC3339 UTC timestamp of the most recent recording. Fed into /// the HTML `