Téléchargements : suppression par épisode et regroupement par animé

- DELETE /api/downloads/{id} (?delete_file=true pour effacer aussi le fichier)
- Événement SSE « removed » → toutes les pages ouvertes se synchronisent
- Page Téléchargements groupée par animé : groupes repliables (dépliés si
  actifs), compteurs par statut, taille totale, tri par numéro d'épisode
- Actions par groupe : 🧹 retirer les terminés, ✖ annuler les actifs
- Limite de liste 200 → 2000 tâches
This commit is contained in:
Roman
2026-09-22 12:17:27 +00:00
parent affc97c527
commit 9500a84a5e
7 changed files with 283 additions and 58 deletions
+40 -1
View File
@@ -344,7 +344,46 @@ button { font-family: inherit; }
.status-downloading { background: rgba(229, 9, 20, 0.16); color: #ff6b73; }
.status-done { background: rgba(70, 211, 105, 0.14); color: var(--success); }
.status-failed, .status-cancelled { background: rgba(255, 92, 92, 0.14); color: var(--danger); }
.dl-groups { display: flex; flex-direction: column; gap: 0.9rem; }
.dl-group { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.dl-group-head {
display: flex;
align-items: center;
gap: 0.9rem;
flex-wrap: wrap;
padding: 0.75rem 1.1rem;
cursor: pointer;
user-select: none;
}
.dl-group-head:hover { background: var(--surface-2); }
.dl-chevron { color: var(--text-dim); font-size: 0.72rem; transition: transform 0.2s; }
.dl-chevron.open { transform: rotate(90deg); }
.dl-group-title { font-weight: 700; font-size: 1rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dl-group-meta { display: flex; gap: 0.6rem; font-size: 0.78rem; font-weight: 600; white-space: nowrap; }
.dl-group-meta .m-downloading { color: #ff6b73; }
.dl-group-meta .m-pending { color: var(--warning); }
.dl-group-meta .m-done { color: var(--success); }
.dl-group-meta .m-failed { color: var(--danger); }
.dl-group-size { font-size: 0.8rem; color: var(--text-dim); font-variant-numeric: tabular-nums; }
.dl-group-body { display: flex; flex-direction: column; gap: 0.4rem; padding: 0.75rem; border-top: 1px solid var(--border); }
.dl-group-body .dl-row { border-color: transparent; background: transparent; padding: 0.55rem 0.7rem; }
.dl-group-body .dl-row:hover { background: var(--surface-2); border-color: var(--border); }
.dl-del-wrap { position: relative; }
.dl-menu {
position: absolute;
right: 0;
top: calc(100% + 0.35rem);
display: flex;
flex-direction: column;
gap: 0.4rem;
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 0.45rem;
box-shadow: var(--shadow);
white-space: nowrap;
z-index: 20;
}
/* ------------------------------------------------------------ lecteur */
.player-wrap {