parse_rclone_stats still accepted rclone's `Transferring:` entries
(`* a.bin: 25% / 60 MiB, 0 B/s, -`) because they contain " / " and "%".
rclone writes them right after the byte-weighted line on every tick, and
since the last per-file entry is glued to the *next* tick's byte line,
the parsed order per second is: good byte line -> per-file 0% -> (one
second later) glued byte line. The gauge therefore displayed 0% almost
continuously and only ever looked right at the end.
Require a real stats body to start with the transferred byte amount.
Per-file lines now only feed the "current file" display (they already
did, as a fallback) and can no longer touch pct/done/total.
Verified with the real engine + rclone (bwlimit): mirror state now goes
0 -> 25 -> 50 -> 75 -> 100 with proper byte counts. The replay test now
asserts the exact parse sequence [10%, 40%] so a regression fails when a
per-file or file-count line sneaks in as 0%.
Bump to 0.3.1.
Dashboard:
- DEVICE card: storage is now a compact "276.2 GiB free · 40%" value plus a
usage bar on its own row (only when it cannot collide with the text) — the
old "total · free" value was truncated mid-number; gauge labels no longer
set an explicit fg so ratatui's colour swap keeps them readable over both
filled and empty bar cells
- LIBRARY card: paths are marked ✓/✗ (missing dirs are a common failure) and
long values are ellipsized instead of hard-clipped; absolute local
storagebox sources get the same check
- SYNC STATUS: device names adapt to the card width, statuses go time-only on
narrow cards, and the summary footer is two compact lines (no trailing "…")
- responsive: sidebar 28/34 cols, compact labels for narrow cards, short
terminal drops the decorative SYNC PATH card (it previously lost its only
content row and rendered empty)
Sync tab:
- hero "READY TO SYNC" panel for the selected device (name, firmware, mount
state, key hint, last sync) instead of a mostly empty LAST SYNC card
- after a run finishes, keep the step timeline visible with final statuses and
a LAST RUN result banner, plus an "s run again" hint (previously the steps
were discarded and only a summary line remained)
- steps connected as a timeline
Chrome:
- shared panel/firmware/chip/arrow/key-hint helpers in components; softer
panel borders (theme::BORDER) and a softer sidebar selection highlight
- title bar reduced to one row and now shows mirror on/off + ready/syncing
instead of the truncated config path
- logs header shows warning/error counts; cards use one consistent style
Bump to 0.3.0.
- Remove the separate Config tab (3 tabs now); each player's settings
(content type, mount point, music folder, fat order, sync command) are shown
in a PLAYER SETTINGS card on the dashboard
- Show mounted storage on the device card: total/free space (statvfs) plus a
usage gauge
- Add library + sync-pipeline cards and full-width SYNC PATH chain
- Update keybar/help/README for 3 tabs
Full rewrite of dap-sync as a Rust TUI on ratatui:
- Tokyo Night theme, gradient title rule, rounded panels
- Devices sidebar with live mount status + last-sync age
- Dashboard / Sync / Logs / Config tabs
- Live sync engine: rclone mirror, NFC-aware diff, rsync
progress parsing, podkit + mlove (fatsort) finalize
- Abort-safe subprocess handling, persisted sync state