Skip to content

Releases: sentriz/gonic

gonic v0.16.4

20 Mar 21:21
02189bb
Compare
Choose a tag to compare

Features

  • support internet radio stations for jukebox (62d49a3), closes #481

Bug Fixes

  • subsonic: allow unlimited bitrate with no transcode setting configured (81f8a7e), closes #485

gonic v0.16.3

09 Mar 19:31
6b8d6b7
Compare
Choose a tag to compare

Features

  • bump audiotags fork to support taglib v2 (29c5397)
  • lastfm: autocorrect artist and album name misspellings when fetching info (2878b88), closes #472
  • lastfm: strip copyright text from albumInfo/artistInfo responses (aa82b94)
  • listenbrainz: submit release MBID (#443) (552aa3a)
  • replace ff with with flagconf (3ada74c)
  • subsonic: expose track musicbrainz id (f98b232)
  • subsonic: prefer tagged musicbrainz ID over lastfm in getAlbumInfo (422c684), closes #444
  • subsonic: return changed field in playlist response (8b4fc04), closes #455
  • subsonic: return playCount in album responses (ec55f3b), closes #458
  • subsonic: return an error if maxBitRate requested with no user transcode preferences set (88e58c0)
  • subsonic: return http form post opensubsonic extension key (e8ae1c1)
  • upgrade to ff v4 (4600ee1), closes #473

Bug Fixes

  • ci: manually add taglib v2 APKBUILD (51fa0ba)
  • db: add double index for right side of unique compound indexes (d640a9f), closes #426
  • docker: fix sqlite3 musl build (433829d)
  • listenbrainz: set track length submission and include submission client details (#424) (b27c02f)
  • playlist: return new playlist id for createPlaylist (314e963), closes #464
  • podcast: collect all episode errors when adding new podcast (2f109f1), closes #430
  • podcast: slightly more robust downloading and concurrency (#433) (f34cd2e)
  • scanner: clean up orphaned album genres when dir still exists without tracks (19ebd45), closes #466
  • scanner: gracefully handle multi value tag delim splits with adjacent delimiters (eb79cec), closes #448
  • specid: match music dirs with trailing slash (#439) (e63ee96)
  • subsonic: always return playlist duration (87943ea), closes #457
  • subsonic: fix getAvatar user request comparison (#469) (2949b4c)
  • subsonic: return error code 70 for not found errors in more places (42dbfa7), closes #454

gonic v0.16.2

30 Nov 22:31
Compare
Choose a tag to compare

Features

  • set global http timeouts except for streaming endpoints (2edb1b8), closes #411

Bug Fixes

  • admin: don't start with empty session key (dd0f6b3), closes #414
  • jukebox: make sure we clean up "seekable" event listener (b199bc1), closes #411
  • jukebox: restore play index only when incoming new track has index >0 (82c3c5b), closes #411
  • subsonic: return empty opensubsonic fields (5022500)

gonic v0.16.1

08 Nov 23:31
Compare
Choose a tag to compare

Features

  • add more and unify stats (2fdc1f4)
  • store and expose individual track artists (c1a34dc)
  • subsonic: add getAlbumInfo with cache (cc1a99f)
  • subsonic: expose all of album "name"/"title"/"album" for browse by tag and browse by folder (2df9052), closes #404
  • subsonic: expose track/album displayArtist/displayAlbumArtist (0718aab), closes #406
  • subsonic: support getAlbumList/getAlbumList2 type=highest (a30ee3d), closes #404

Bug Fixes

  • add track count to /debug/vars metrics endpoint (69c02e8), closes #392
  • contrib: update config example (d03d2dc)
  • don't panic when scan on start fails (37e826e), closes #399
  • metrics: have a distinction between folders and albums (cae3725), closes #396
  • scanner: make sure we roll back invalid parents (ddb686b), closes #402
  • store and scrobble with real album artist info string (fe0567a)
  • subsonic: don't return concatenated genres strings for song/trackchilds (f18151b)
  • subsonic: songCount and albumCount in genre objects is required (#390) (b17e76e)
  • use conf cache-path instead of XDG_CACHE_HOME for jukebox socket (9818523), closes #391

gonic v0.16.0

09 Oct 22:23
422a4b8
Compare
Choose a tag to compare

Highlights

  • support for multi valued tags such as albumartists and genres found in audio metadata

    • this means a cleaner artist list, and the ability to find the same album by multiple artists in their respective artist pages
    • since there is no longer a direct relationship between guessed "artist dir" and album dir, a side effect of this change is that support for local artist covers on the filesystem has been dropped. however, last.fm artist images are working now
    • use a nice client like airsonic-refix for a nice experience when clicking artist names too
      image
    • see the readme for more details
  • much improved last.fm artist covers and info situation

    • full artist covers from last.fm are fetched and rendered
    • artist bio responses from last.fm are cached so visiting artist pages should be much snappier
  • playlists (including tracks and podcast episodes) are now backed by m3u files instead of the gonic database

    • this means having gonic playlists can be parsed and generated by external tools, we get import and export for free, and solves an issue of playlist entry pointers having ephemeral ids during rescans
    • (you will need to add a new playlist directory when starting gonic, the old database entries will be migrated)
  • closer integration and collaboration with the @opensubsonic project

  • a new experimental tool gonic-lastfm-sync for bidirectional sync of lastfm and gonic data

  • many more features and fixes. see the granular changelog below

⚠ BREAKING CHANGES

  • build: bump to go 1.21
  • subsonic: drop support for guessed artist covers in filesystem
  • playlists-path option now required to start

Features

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

Bug Fixes

Read more

gonic v0.16.0 rc1

21 Sep 18:06
33f1f2e
Compare
Choose a tag to compare
gonic v0.16.0 rc1 Pre-release
Pre-release

gonic v0.16.0 release candidate 1
👉 if you want to help with the release of v0.16.0 please upgrade, test, and report issues. thanks!
👉 full v0.16.0 changelog is here

outstanding for full release
👉 fixes from your testing
👉 postgres support

installation
👉 docker dockerhub docker pull sentriz/gonic:v0.16.0-rc1
👉 docker ghcr docker pull ghcr.io/sentriz/gonic:v0.16.0-rc1
👉 source go install go.senan.xyz/cmd/gonic@v0.16.0-rc1

gonic v0.15.2

27 Dec 23:26
Compare
Choose a tag to compare

Bug Fixes

  • subsonic: send valid content-type with http.ServeStream (8dc58c7)

gonic v0.15.1

26 Dec 02:00
Compare
Choose a tag to compare

Features

  • 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

Bug Fixes

  • 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

gonic v0.15.0

17 Nov 19:58
Compare
Choose a tag to compare

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](https://www...
Read more

gonic v0.14.0

03 Oct 20:15
ea141cf
Compare
Choose a tag to compare

Features

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

Bug Fixes

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