Commit Graph

5 Commits

Author SHA1 Message Date
Sebastian 42a3f0c35a design pass: responsive layout, clearer cards, better sync/log states
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.
2026-09-10 19:55:11 +02:00
Sebastian f566162c29 review pass: mount safety, abort/quit robustness, UI fixes
Engine / safety:
- verify mount points against /proc/self/mountinfo instead of path
  existence; refuse to sync into a leftover (unmounted) directory that
  would otherwise receive the library on the root filesystem
- resolve udisks block devices by label when the path is not mounted,
  and never let findmnt fall back to the containing root filesystem
- abort now SIGTERMs the whole child process group (sh -c/podkit and
  rsync children included), escalating to SIGKILL after 2s
- quitting while a sync runs aborts and waits for the engine instead of
  orphaning the child
- atomically mark the engine busy before spawning to prevent double
  syncs; persist state before publishing completion
- don't follow symlinked directories while scanning (recursion loops)
- prune empty directories recursively when removing stale files

UI:
- help overlay was clipped (hardcoded height): size it from content
- speed/ETA were pushed onto a line the progress panel clipped; show
  them right-aligned on the bytes row
- leaving log follow with u/d now scrolls from the bottom instead of
  jumping to the top of the log
- reload config with r (label updated), refresh mounts on completion so
  last-sync ages are current
- fix width underflows on narrow terminals; terminal-aware sidebar
  scrolling

Tests: mountinfo unescape, process-group abort, and a TestBackend render
smoke test covering all tabs, small terminals and the help overlay.
2026-09-10 19:35:03 +02:00
Sebastian d1cf5af7fa firmware: add 'sony' category (rsync-style, like rockbox)
- New Firmware::Sony mapped from firmware = "sony"; behaves like
  rockbox/android (rsync to mounted volume, no fatsort)
- Green badge on dashboard; config parsing test included
- Real config: Sony NW-A55 + Walkman WM1 switched to firmware = "sony"
2026-08-22 10:05:34 +02:00
Sebastian 88b53e50d1 dashboard: per-player settings, storage usage; drop Config tab
- 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
2026-08-22 09:57:53 +02:00
Sebastian 16a5a4327e dap-tui: ratatui device-sync dashboard
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
2026-08-22 09:26:15 +02:00