Noteworthy
-
Recently played items no longer disappear (or show up twice). Playing
something and then playing it again, or playing a few different things in a
row, could make entries silently vanish from a speaker's Recents list, or
occasionally appear duplicated, well before the list was actually full. The
cause was a bug in how AfterTouch reorders the Recents list when you replay an
item: it could drop the replayed entry (and a neighbour) or duplicate one.
This is now fixed, and the list also heals any duplicates that a
speaker re-sync had already left behind. Spotify and DLNA / NAS tracks were
the most visibly affected. -
DLNA / NAS Library: play a whole folder, with working Next / Previous
(#501). Playing a track from the Library tab used to queue just that one
track, so the speaker stopped after it and the Next / Previous buttons did
nothing. You can now play a folder (an album or other container): AfterTouch
hands the speaker the whole folder as a queue, so Next / Previous and
auto-advance to the following track work as expected. -
Adding a second DLNA / NAS media server no longer drops the first (#502).
Registering another media server on a speaker used to evict the one already
there. All added servers now stay registered side by side. -
Replaying a DLNA / NAS track from Recents no longer fails (#503). A track
played from a media-server library could come back with INVALID_SOURCE when
replayed from Recents (or restored from a preset). The library account and
item type are now preserved so the replay selects the right source.
Smaller changes
- The player's top navigation no longer overlaps its title and icons on narrow
or portrait screens; it wraps onto a second row instead (#500). - The grouping / stereo-pair UI now shows speaker names instead of raw IP
addresses (#498). - After you add a media server, AfterTouch nudges the speaker to refresh its
source list so the new server shows up without a manual reload. - Hardened the provider-settings and group XML builders (and the bundled test
DLNA server) against a reflected-XSS finding flagged by CodeQL; they now build
XML through the standard encoder so every value is escaped. - The bundled example DLNA server used for local testing gained real-media
serving (--media-dir), album art, and discovery fixes; this is a developer
tool and does not affect the service or apps. - Dependency updates: Alpine base image 3.23 → 3.24, codecov action bump.
What's Changed
- docker(deps): bump alpine from 3.23 to 3.24 by @dependabot[bot] in #491
- ci(deps): bump codecov/codecov-action from 6.0.1 to 7.0.0 in the security-actions group by @dependabot[bot] in #485
- feat(player,cli): nudge sources refresh after adding a DLNA media server by @gesellix in #496
- fix(marge): keep all DLNA media servers registered (don't evict on second add) by @gesellix in #502
- fix(marge): preserve STORED_MUSIC account in recents (fix replay INVALID_SOURCE) by @gesellix in #503
- fix(marge): stop recents move-to-front from dropping/duplicating entries by @gesellix in #504
- fix(datastore): dedup recents by ID in SaveRecents by @gesellix in #505
- feat(example-dlna-server): real media via --media-dir, album art, discovery fix by @gesellix in #506
- fix(player): Library folder playback + replay, small-screen navbar, grouping device names by @gesellix in #507
Full Changelog: v0.112.0...v0.113.0