savetv: Hetzner-Speicherindikator im Archiv, Datumssortierung Downloads
This commit is contained in:
parent
06ab806030
commit
53b63ee8fe
1 changed files with 27 additions and 2 deletions
|
|
@ -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 = '<div class="checkbox-indicator">' + (sel ? '\u2713' : '') + '</div>';
|
||||
var extraLine = '';
|
||||
if (isStored && dlState !== 'running') {
|
||||
statusEl = '<div class="status-icon" title="Auf Hetzner gespeichert">\ud83d\udcbe</div>';
|
||||
}
|
||||
if (dlState === 'running') {
|
||||
var prog = dlProgress[String(f.tid)];
|
||||
statusEl = '<div class="status-icon">\u2b07</div>';
|
||||
|
|
@ -733,12 +747,23 @@ def api_films():
|
|||
films = sorted(seen_titles.values(), key=lambda x: x.get("start_date", ""), reverse=True)
|
||||
dl_log = _load_download_log()
|
||||
|
||||
import re as _re
|
||||
def _norm_title(s):
|
||||
return _re.sub(r'\s+', ' ', _re.sub(r'[^\w\s]', ' ', s)).strip().lower()
|
||||
|
||||
stored_norms = set()
|
||||
for fp in DOWNLOAD_DIR.iterdir():
|
||||
if fp.suffix == ".mp4" and fp.stat().st_size > 1_000_000:
|
||||
raw = fp.stem.rsplit(" (", 1)[0]
|
||||
stored_norms.add(_norm_title(raw))
|
||||
|
||||
return jsonify({
|
||||
"films": films,
|
||||
"total": len(entries),
|
||||
"kino": sum(1 for f in films if f["cinema"]),
|
||||
"urgent": sum(1 for f in films if f["days_left"] <= 7),
|
||||
"downloads": dl_log,
|
||||
"stored_titles": list(stored_norms),
|
||||
})
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue