Add pause/resume, within-part byte-range resume; bump to 0.0.3

Split the single morphing button into a green/amber play-pause (Update →
Pause → Resume) and a red stop (Cancel). Pause aborts the download but
keeps the partial (resumable); Cancel aborts and deletes. Backend gets a
separate pause flag distinct from cancel.

Resume now continues WITHIN a part: the partially-written piece is fetched
from its last byte via an HTTP byte range (with a safe fall back to
re-fetching the whole piece if the CDN ignores the range), instead of
re-downloading the whole part. A title is resumable as soon as any bytes
are on disk.

Version bumped to 0.0.3 (no release tagged).
This commit is contained in:
Knutwurst committed 2026-06-24 09:47:44 +02:00
1 parent 66e4912485
commit 01eaef79f2
7 files changed
+164 -58

No files matched your search

+7 -4
View File
@@ -331,10 +331,13 @@ h2 { font-size: 18px; line-height: 1.2; }
width: 100%; /* fills the fixed-width actions column -> never reflows */
padding: 0 12px;
}
.row-button.is-update { border-color: var(--blue); color: #04111f; background: var(--blue); }
.row-button.is-update:hover { background: var(--blue-dark); }
.row-button.is-cancel { border-color: var(--amber); color: #1c1402; background: var(--amber); }
.row-button.is-cancel:hover { background: var(--amber-dark); }
/* go = green (Update / Resume / Install), pause = amber, cancel/stop = red */
.row-button.is-update { border-color: var(--green); color: #04150c; background: var(--green); }
.row-button.is-update:hover { background: var(--green-dark); }
.row-button.is-pause { border-color: var(--amber); color: #1c1402; background: var(--amber); }
.row-button.is-pause:hover { background: var(--amber-dark); }
.row-button.is-cancel { border-color: var(--red); color: #1a0606; background: var(--red); }
.row-button.is-cancel:hover { background: #ff8a8a; }
.row-button.is-ghost { background: transparent; color: var(--muted); }
.row-button.is-ghost:hover { color: var(--ink); border-color: var(--muted); }
.row-button:disabled { opacity: 0.6; cursor: default; }