Skip to content

gonic v0.15.0

Compare
Choose a tag to compare
@github-actions github-actions released this 17 Nov 19:58

hi all, v0.15.0 is finally here
lots of new stuff in this release, and lots of bug fixes too - see below!
big thanks to everyone who contributed :~)
@brian-doherty @spijet @lxea @dertasiu @xaviercrochet @djl @grilix @hufman @jgdye @Duncaen @ZachMyers3

Highlights

  • much better combatibiliy with the subsonic api. including support for track/artist/albums stars/favourites, artist infos, podcast updates, avatars, internet radio stations
  • multi-folder support, just like the subsonic api defines. this can be handy for example if you divide your files into audiobooks, or split them by genre, or maybe tagged vs untagged, whatever you like. clients like DSub will allow you to pick a folder that you want to search, view recently added in, etc. see more here
  • change the jukebox mode's audio backend to be an mpv daemon. this gives us gapless playback, support for a wider range of file formats, etc. it's also possible to pass custom flags to mpv, meaning you can tweak the decoder settings, or make it output to a named pipe for multi-room audio with snapcast, for example
  • much improved scanner codebase, and some performance improvements in places. it can also watch your filesystem for changes and re-scan automatically 👍 see the new config options
  • 128kbps versions of the opus transcode profiles. see transcode profiles
  • improvements to the listenbrainz and lastfm scrobbling
  • just incase you don't have a fancy auto-TLS reverse proxy, gonic can now directly handle TLS connections. see the new config options
  • collaboration with the symfonium subsonic client for android to improve compatibility

(see Features and Bug Fixes for a more in-depth look)

⚠ BREAKING CHANGES

  • upgrade deps and require go 1.19
  • podcast: make podcasts global not per user, to match spec

Notes for package maintainers

  • alsalib / libasound is no longer required to build
  • mpv can be documented as an optional dependancy for jukebox mode support
  • go 1.19 is required

Sponsorship

like gonic? now you can buy me cigarettes and beer with github sponsors. thanks!

Features

  • 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

Bug Fixes

  • 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)

Code Refactoring

  • podcast: make podcasts global not per user, to match spec (182c96e)

Miscellaneous Chores

  • upgrade deps and require go 1.19 (385a980)