Features
- ffprobe: consider stream tags (#717) (c8bccd3)
- gonic: send gonic user agent to third party services (7bfa330)
- infocache: don't commit empty row before upstream lookup (5be4aff)
- subsonic: add displayComposer to track responses (f265087)
- subsonic: add getNowPlaying endpoint (#632) (5e15cdd)
- subsonic: add mediaType to child responses (a6973c0)
- subsonic: add musicBrainzId to album responses (08607e2)
- subsonic: add played to track and album responses (d8cbe98)
- subsonic: add version to album responses (3b472fe)
- subsonic: fall back to album cover for artists with no lastfm image (8df10c3)
- subsonic: implement topSongsByArtistId (fc28428)
- subsonic: pad albumInfo notes with musicbrainz disambiguation (fe9c018)
- subsonic: pad and cap transcoded bytes to estimation, with 3% headroom (e4cf8ff), closes #704
- subsonic: pad artistInfo biography with musicbrainz info (db65b0d)
- subsonic: prefer db musicbrainz ID over lastfm's in artistInfo (60fd5d7)
- subsonic: report subsonic api version 1.16.1 (3c517f6)
- subsonic: return artist disambiguation (960a94c)
- subsonic: support for the transcoding extension (dd6b5a9), closes #697
- subsonic: support trailing * as prefix wildcard in search2/search3 (#730) (d92a536), closes #727
Bug Fixes
- ci: bump image (a8eb0f8)
- ci: pass custom_tag via env and use docker/login-action (54eadfc)
- db: clear all wrapped negative bitrates and lengths (d54dc9c)
- db: make track ISRCs unique per track (c270397)
- db: preload in chunks to stay under the SQL variable limit (9952430), closes #719
- jukebox: fix large playlists over mpv IPC (68fa6b6), closes #558
- podcast: dedupe by GUID (662cdd9)
- scanner: don't pair mbids with mismatched artist name count (5bc0b24), closes #709
- subsonic: always emit musicBrainzId on artist responses (30fcdc0)
- subsonic: check playlist user in getCoverArt (c7f6080)
- subsonic: check status code when fetching artist images from lastfm (61ff47d)
- subsonic: contain getCoverArt cache path with SafeJoin (c6450d0)
- subsonic: create playlist path on create when id doesn't resolve (490c7a0)
- subsonic: emit played as empty string when never played (09cbaf1)
- subsonic: match similar songs by title and artist (876dab0), closes #714
- subsonic: reject invalid song ids on playlist create/update (9729983)
- subsonic: require admin for downloadPodcastEpisode (87102c2)
- subsonic: scan album play time regardless of driver time format (33c7ad3)
- taglib: bump and fix max int bitrates (ad51344)