Features
- db: add a covering index on tracks (album_id, length) (018343d), closes #508
- lastfm: paginate loved tracks (5c7d065)
- playlist: assume playlists in the root dir without a user dir belong to admin (#499) (f5893ea)
- podcast: download most recent episode when switching to download recent mode (c222ecb), closes #557
- podcast: use podcast author if episode author is not defined (#574) (19b707c)
- scanner: cleanup bookmarks on scan (#583) (b8dfe14)
- scanner: support full scan cleanups in watcher (#496) (93ce039)
- scanner: use wrtag/coverparse for cover selection (453639e), closes #338 #516
- subsonic: allow search albums with MBID (7b19101)
- subsonic: allow search with MBID (#579) (2d4111d)
- subsonic: bump image cache expiration (bbe16b7)
- subsonic: expose album
isCompilation
andreleaseTypes
(29b7549) - subsonic: expose replaygain tags (0e45f5e)
- subsonic: fallback to filename when title is missing tags (58d54c2), closes #541
- subsonic: support more podcast metadata and podcast bookmarks (#569) (63a420d)
- transcode: add cache pruning and config options (bcb613c)
Bug Fixes
- admin: better handing of resolve proxy path escaping (7b21e82), closes #493
- adminui: resolve reverse proxy paths for fonts (718686a), closes #543
- ci: bump golangci-lint (640d872)
- ci: ignore gosec integer overflow conversion (120fd79)
- ci: update .golangci.yml exclude config (e5f7ef3)
- ci: use new sqlite package name (1c23771)
- dockerfile: install abuild key (#526) (fb36dbf)
- playlist: fix non-admin users not being able to create playlists (#524) (ac798ac)
- podcast: gracefully handle no podcast cover URL (#547) (aef5f92)
- subsonic: gracefully handle missing playqueue items (3fc9d5d)
- subsonic: order some browse-by-tag responses (39df00e), closes #512
- subsonic: populate ArtistID and AlbumID for playlists (#567) (c6d8751)
- subsonic: skip bookmarks for missing items instead of failing (#580) (e3dc188)
- taglib: support lower case filenames again (8a0fa05), closes #491