v0.2.2: device-sync guards — quit warning, sleep/shutdown inhibition
Quitting mid-transfer now asks (Keep Syncing / Quit Anyway) from closeEvent, which every quit path hits — including the self-update restart, which previously bypassed closeEvent via a bare quit() and now routes through close(). A running sync holds its own GNOME inhibitor (suspend + logout, "Syncing a playlist to a device") so the machine won't sleep or shutdown/restart under a copy. Along the way: the Inhibit D-Bus call marshaled Python ints as signed against GNOME's (susu) signature, so every call was rejected and the playback sleep inhibitor had silently never worked — _uint fixes both holders (verified live: cookies taken, IsInhibited flips, releases clean). Also investigated trav's mid-copy Syncthing question: the transfer works from a click-time snapshot and never reads live library state, so remote changes can't corrupt it — no state freeze needed. Hardened the one real gap: a source file relocated under the queue (remote metadata edit moving files) is now skipped, dropped from the m3u, and reported, instead of aborting the whole sync. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -24,6 +24,23 @@ When a round closes, move its finished items to `tasks-done.md`.
|
||||
|
||||
# old
|
||||
|
||||
## Round 27 — device-sync guards (v0.2.2)
|
||||
|
||||
- [x] Quit warning while a transfer is copying (closeEvent; covers X button,
|
||||
Ctrl+Q, MPRIS Quit, and the self-update restart, which used to bypass
|
||||
closeEvent entirely).
|
||||
- [x] Machine can't sleep or shutdown/restart mid-transfer: second
|
||||
SleepInhibitor (suspend+logout flags, its own reason text for GNOME's dialog).
|
||||
- [x] Found & fixed: the GNOME Inhibit D-Bus call sent signed ints against a
|
||||
(susu) signature, so the *playback* sleep inhibitor had silently never
|
||||
worked — `_uint` marshalling repairs both.
|
||||
- [x] Investigated Syncthing changes landing mid-copy: safe by design (the
|
||||
SyncPlan is a click-time snapshot; the worker never reads live library
|
||||
state). Hardened the one gap: a source file relocated under the queue is
|
||||
skipped + dropped from the m3u + reported, instead of aborting the sync.
|
||||
|
||||
Tests in `tests/test_round27.py`. Fix round → patch bump **0.2.2**.
|
||||
|
||||
## Round 26 — Device menu: sync playlist to Rabbit R1 (v0.2.0)
|
||||
|
||||
- [x] Device menu (left of Track) with "Sync Playlist to Rabbit"; grayed out on
|
||||
|
||||
Reference in New Issue
Block a user