0.16.0 (2023-10-09)
- build: bump to go 1.21
- subsonic: drop support for guessed artist covers in filesystem
- add .wav to list of supported audio types (#322) (ab07b87)
- add option for /debug/vars endpoint to expose database and media stats (2a7a455), closes #372 #150
- add support for wavpack (#380) (827baf2)
- admin: sort transcode profile names (ae5bc2e), closes #288
- admin: support application/x-mpegurl playlist uploads (6aa4c42), closes #282
- admin: update stylesheet (222256c)
- allow multi valued tag modes to be configurable (8f6610f)
- ci: add a bunch more linters (e3dd812)
- ci: update checkout and setup-go actions (#326) (6144ac7)
- ci: update golangci-lint and action (#325) (85eeb86)
- contrib: improve system related contrib files (ac74b35)
- enable profile-guided optimization (e842b89)
- lastfm: add user get loved tracks method (9026c9e)
- podcast: parse podcast episode descriptions from HTML to plain text (#351) (7d2c4fb)
- scanner: add a new option for excluding paths based on a regexp (1d38776)
- scanner: support more cover types (906164a)
- scanner: support non lowercase extensions like .Mp3 (d83fe56)
- store and use m3u files on filesystem for playlists (7dc9575), closes #306 #307 #66
- subsonic: add getOpenSubsonicExtensions endpoint and openSubsonic response key (2caee44)
- subsonic: add support for multi-valued album artist tags (3ac7782)
- subsonic: add support for podcast episodes in both playlists and play queues (aecee3d)
- subsonic: cache and use lastfm responses for covers, bios, top songs (c374577)
- subsonic: change frequent album list to use total time played per album instead of play count. (#331) (7982ffc)
- subsonic: drop support for guessed artist covers in filesystem (657fb22)
- subsonic: expose all album genres in a list of subsonic api (749233d)
- subsonic: fetch artist images from lastfm opengraph (4757495), closes #295
- subsonic: gracefully handle missing podcast episode paths when returning playlists (d5f8e23)
- subsonic: improve search2 and search3 when there are multiple words searched on. (#335) (cbab68b)
- subsonic: make it easier to add more tag reading backends (8382f61)
- subsonic: order results from getStarred reverse chronologically based on star date (b3c863c)
- subsonic: return artist cover ids for similar artists response (c15349f)
- subsonic: scrobble to different scrobble backends in parallel (1ea2402)
- subsonic: support timeOffset in stream.view (#384) (7eaf602)
- subsonic: update track play stats on scrobble instead of stream (e0b1603)
- sunsonic: expose type serverVersion in subsonic responses (b8fceae)
- tags: support multi valued tags like albumartists (623d5c3)
- transcode: add MP3 320 transcoding profile (#363) (a644f0f)
- transcode: add opus 192 profile (5dcc8c1)
- transcode: lock the destination transcode cache path (c9a2d2f)
- admin: continue on track match error (16e6046)
- podcasts: make sure we use safeFilename for podcast episodes too (#339) (5fb9c49)
- podcasts: remove query parameters from URL when getting the extension (19be6f0)
- scanner: fix watcher panic (78d0c52)
- scanner: remove redundant mod time look up (e0a8c18), closes #293
- subsonic: only return one bookmark entry per row in getBookmarks (efe72fc), closes #310
- build: bump to go 1.21 (658bae2)
0.15.2 (2022-12-27)
- subsonic: send valid content-type with http.ServeStream (8dc58c7)
0.15.1 (2022-12-26)
- allow for custom music folder path alias (7e097c9), closes #259
- scrobble: only send musicbrainz id if it's a valid uuid (2bc3f31)
- server: recover from panics (df93286)
- subsonic: add stub lyrics.view (0407a15), closes #274
- jukebox: gracefully handle case of no audio in feed item (b47c880), closes #269
- jukebox: use a tmp dir instead of file for mpv sock (4280700), closes #266 #265
- subsonic: update music folder id in bounds check (c6ddee8), closes #271
- transcode: don't leave half transcode cache files lying around (ce31310), closes #270
0.15.0 (2022-11-17)
- upgrade deps and require go 1.19
- podcast: make podcasts global not per user, to match spec
- add a ping endpoint that doesn't create a session (731a696)
- add CreatedAt to albums (#159) (848d85d)
- add multi folder support (40cd031), closes #50
- countrw: add countrw package (5155dee)
- jukebox: allow users to pass custom arguments to mpv (428fdda), closes #125 #164
- jukebox: use mpv over ipc as a player backend (e1488b0)
- lastfm: scrobble with duration (7d0d036)
- log all folders while scanning (b2388e6)
- mockfs: add DumpDB method (b0d5861)
- podcasts: add an option to purge old episodes (85cb0fe)
- render local artist images for getArtistInfo2 (cb6b33a)
- render local artist images with no foreign key (a74b5a2)
- scanner: add fuzzing test (f7f4b8b)
- scanner: add option to use fsnotify based scan watcher (#232) (ea28ff1)
- scanner: added option to scan at startup (f6c9550), closes #251
- server: support TLS (59c4047)
- subsonic: add avatar support (5e66261), closes #228
- subsonic: add detailed logging about requested audio (dc4d9e4), closes #212
- subsonic: add getNewestPodcasts (f6687df)
- subsonic: add internet radio support (7ab378a)
- subsonic: add support for track/album/artist ratings/stars (e8759cb)
- subsonic: add year and genre fields to track-by-folder response (53a4247), closes #223
- subsonic: implement getSimilarSongs.view (e1cfed7), closes #195
- subsonic: implement getSimilarSongs2.view (92febcf), closes #195
- subsonic: implement getTopSongs.view (39b3ae5), closes #195
- subsonic: improve getArtistInfo2.view similar artist results (#203) (55c0920)
- subsonic: log error responses (2440e69)
- subsonic: make the v param optional (50e2818)
- subsonic: return transcoded mime and transcoded suffix in subsonic responses (6e6404a)
- subsonic: skip transcoding if request bitrate is the same as track bitrate (f41dd08), closes #241
- subsonic: sort artist album list (e56f64a), closes #197
- subsonic: support dsub edgecase for queries by decade (03df207)
- subsonic: support public playlists (1647eaa)
- subsonic: update play stats when scrobbling (1ab47d6), closes #207
- transcode: add a generic transcoding package for encoding/decoding/caching (165904c)
- transcode: add opus 128 kbps profiles (bb83426), closes #241
- ui: add a link to wiki in transcode profile section (3348ca6), closes #254
- ui: show when a scan is in progress (7fbe7c0)
- use album create time for home ui and album listings (14a2668), closes #182 #135
- add stub getStarred views to shut up refix (27ac8e1)
- ci: set golangci-lint timeout (48c34fd)
- docs: add GONIC_HTTP_LOG to setting table (a11d6ab)
- don't send listenbrainz playing_now and submitted_at at the same time (b07b9a8), closes #168
- lastfm: make a better guess at callback protocol when incoming connection is TLS (4658d07), closes #213
- listenbrainz: set json header (e883de8)
- listenbrainz: submit track recording ID instead of track ID (8ee357b), closes #240
- make sure open cover and audio files are closed after use (1d1ab11)
- podcast: add error case for when DownloadEpisode is called via API and podcast is already downloaded (611bc96), closes #213
- podcast: add user agent to avoid 403s with some remotes (0f80ae2)
- render artistId in track types (7ec6440), closes #170
- scanner: better detect years given extraneous year tags (a9d3933)
- scanner: fix linting Ctim.Sec/Ctim.Nsec on 32 bit systems (b280e8d)
- scanner: fix records with album name same as artist (fdbb282), closes #230
- scanner: make sure we have an album artist before populating track (01747c8), closes #209
- scanner: respect "is full" setting (f2143e3)
- set ON DELETE SET NULL to artists.guessed_folder_id removing folders (24d64e2)
- show artist album count when searching by tags (0c79044)
- show artist covers (raw url in artist info, cover id elsewhere) via scanned guessed artist folder (c0ebd26), closes #180 #179
- subsonic: change order of fromYear toYear query (d7655cb), closes #208
- subsonic: correct album orderding in getAlbumList, add starred request type in getAlbumList (692ec68)
- subsonic: return an error when no tracks provided in savePlayQueue (d47d5e1)
- subsonic: return song artist ID, album and song genres from search3 (1a1f39f), closes #229
- subsonic: route settings.view -> admin home (f9133aa)
- podcast: make podcasts global not per user, to match spec (182c96e)
- upgrade deps and require go 1.19 (385a980)
0.14.0 (2021-10-03)
- ci: add debug build workflow (2780dba)
- ci: pin golangci-lint version (8f7131e)
- ci: test before release please, and only run extra tests on develop and pull request (cd5771f)
- ci: use GITHUB_TOKEN for release please (608504b)
- create cache directory on startup (f3bc3ae), closes #127
- encode: add hi-gain RG and upsampling support (616b152)
- encode: add mime-type headers to cache handlers (4109b5b)
- encode: use "true" (unconstrained) VBR for Opus profiles (b9f8ea7)
- jukebox: reduce complexity and update dependencies (#154) (3938136)
- support filter by genre in browse by folder mode (b56f00e)
- support filter by year in browse by folder mode (6e2d4f7)
- Support WMA files, including those with embedded album art (#143) (7100b2b)
- build: add zlib (ccc0e3c)
- ci: remove deprecated linters (3382af7)
- ci: trim short hash (6f26974)
- docs: update ubuntu / systemd service instructions (ef6dd6c), closes #126
- encode: Strip EBU R128 gain tags when using forced-RG transcoding (#145) (5444d40)
- return early before type switch in ServeStream (212a133), closes #152
- scanner: refactor a bit and fix the issue of repeatedly adding and removing tracks 😎 (93608d0), closes #26 #63
- scanner: spawn interval scans in a goroutine (c0ca6aa), closes #63
- scanner: update changed cover files when scanning (f50817a), closes #158
- show "gonic" not version in --help (3cf3bda)
- trim newlines when rendering flag values (4637cf7)
0.13.1 (2021-05-08)
- docker: bump alpine / go (1f941b2)
0.13.0 (2021-05-08)
- subsonic: don't return gonic version from responses
- bump to go1.16 and embed version