diff --git a/homelab-ai-bot/savetv_web.py b/homelab-ai-bot/savetv_web.py index 8b18351b..90def214 100644 --- a/homelab-ai-bot/savetv_web.py +++ b/homelab-ai-bot/savetv_web.py @@ -486,15 +486,24 @@ function buildDetails(d) { return metaLine + descLine + crewLine; } +var storedSet = new Set(); + +function normTitle(s) { + return s.replace(/[^\w\s]/g, ' ').replace(/\s+/g, ' ').trim().toLowerCase(); +} + async function loadFilms() { var resp = await fetch('/api/films'); var data = await resp.json(); allFilms = data.films; downloads = data.downloads || {}; + (data.stored_titles || []).forEach(function(t) { storedSet.add(t); }); document.getElementById('loading').style.display = 'none'; document.getElementById('content').style.display = 'block'; + var storedCount = 0; + allFilms.forEach(function(f) { if (storedSet.has(normTitle(f.title))) storedCount++; }); document.getElementById('header-stats').textContent = - data.total + ' Aufnahmen \u00b7 ' + data.kino + ' Kino \u00b7 ' + data.urgent + ' dringend'; + data.total + ' Aufnahmen \u00b7 ' + data.kino + ' Kino \u00b7 ' + data.urgent + ' dringend \u00b7 ' + storedCount + ' gespeichert'; renderFilms(); var hasRunning = Object.values(downloads).some(function(v) { return v === 'running'; }); if (hasRunning) startPolling(); @@ -546,13 +555,18 @@ function filmCard(f) { var daysClass = f.days_left <= 3 ? 'days-urgent' : 'days-ok'; var daysLabel = f.days_left === 0 ? 'heute' : f.days_left === 1 ? '1 Tag' : f.days_left + ' Tage'; + var isStored = storedSet.has(normTitle(f.title)); + var cardClass = 'film-card'; if (sel) cardClass += ' selected'; - if (dlState === 'done') cardClass += ' downloaded'; + if (dlState === 'done' || isStored) cardClass += ' downloaded'; if (dlState === 'running') cardClass += ' downloading'; var statusEl = '