mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-19 00:56:16 +00:00
A speaker<->marge recents sync could re-store the same recent (same ID) multiple times — observed live as one STORED_MUSIC track appearing 4x in the speaker's /recents, the service's stored Recents.xml, and /full. The duplicates crowd the capped (10) recents list and evict other sources (e.g. a freshly played Spotify track never appears). SaveConfiguredSources already dedups by ID; SaveRecents did not, so dupes introduced by any path (AddRecent move-to-front, syncRecents from the speaker's /full, setup/health) persisted and fed back through the sync loop. SaveRecents now dedups by ID (first occurrence wins) at the single chokepoint all callers share, so the list self-heals on the next write. Regression test added. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>