597 Commits

Author SHA1 Message Date
Deluan Quintão
4d1ed54ca9
fix(ui): don't hide Last.fm scrobble switch (#3561)
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:43:18 +00:00
Deluan Quintão
ebde3d1655
feat(Insights): add anonymous usage data collection (#3543)
* feat(insights): initial code (WIP)

* feat(insights): add more info

* feat(insights): add fs info

* feat(insights): export insights.Data

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): more config info

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(insights): move data struct to its own package

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(insights): omit some attrs if empty

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): send insights to server, add option to disable

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): remove info about anonymous login

Signed-off-by: Deluan <deluan@navidrome.org>

* chore(insights): fix lint

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): disable collector if EnableExternalServices is false

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): fix type casting for 32bit platforms

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): remove EnableExternalServices from the collection (as it will always be false)

Signed-off-by: Deluan <deluan@navidrome.org>

* chore(insights): fix lint

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(insights): rename function for consistency

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): log the data sent to the collector server

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): add last collection timestamp to the "about" dialog.

Also add opt-out info to the SignUp form

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): only sends the initial data collection after an admin user is created

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): remove dangling comment

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(insights): Translate insights messages

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(insights): reporting empty library

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor: move URL to consts.js

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
05521781a8
fix(server): encrypt jwt secret at rest
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
cdcfc99db8
fix(server): add disc number to fake path.
Also revert "feat(server): enable "Report Real Path" by default"

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:57 +00:00
Deluan
9e94cfcffc
refactor: load translations with sync.OnceValues
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:55 +00:00
Deluan Quintão
202b64ce9e
feat: cache login background images (#3462)
* feat: use direct links to unsplash for background images

Signed-off-by: Deluan <deluan@navidrome.org>

* feat: cache images from unsplash

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor: use cache.HTTPClient to reduce complexity

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor: remove magic numbers

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:41:22 +00:00
Deluan Quintão
e4c12c8739
refactor: small improvements and clean up (#3423)
* refactor: replace custom map functions with slice.Map

* refactor: extract StringerValue function

* refactor: removed unnecessary if

* chore: removed invalid comment

* refactor: replace more map functions

* chore: fix FFmpeg typo
2026-01-02 20:41:04 +00:00
Kendall Garner
8523c74d71
feat(subsonic): add MusicBrainz ID and Sort Name to getArtists 2026-01-02 20:41:03 +00:00
Deluan
e758337896
feat(subsonic): getOpenSubsonicExtensions is now public 2026-01-02 20:41:03 +00:00
Deluan Quintão
7980ea6909
feat(subsonic): support OS clearing play queue (#3399) 2026-01-02 20:41:02 +00:00
Deluan Quintão
d875863847
feat(ui): show user's lastAccess (#3342)
* feat(server): update user's lastAccess

* feat(ui): show user's lastAccess
2026-01-02 20:40:20 +00:00
crazygolem
3a0ddd5fc4
feat(server): require explicitly enabling reverse proxy auth for unix sockets (#3062) 2026-01-02 20:40:19 +00:00
Deluan
4d21ffa0a2
fix(server): allow changing local login background url 2026-01-02 20:40:18 +00:00
Caio Cotts
3b401e15d0
Fix wrong placement of When in test 2026-01-02 20:39:42 +00:00
Caio Cotts
6d5a80a18d
Make the UI use the new ShareURL option 2026-01-02 20:39:42 +00:00
Caio Cotts
d11462a042
Add ShareURL configuration option 2026-01-02 20:39:42 +00:00
Kendall Garner
dd38a28173
Only refresh smart playlist when fetching first track (#3244)
* Only refresh smart playlist when fetching first track

* res -> w
2026-01-02 20:39:41 +00:00
Deluan
c7b74f58da
Change error code type to avoid integer overflow conversion warning 2026-01-02 20:39:14 +00:00
Deluan
80209c8dfe
Fix lint errors 2026-01-02 20:39:13 +00:00
Deluan
b0f69646ea
Add http headers to trace log 2026-01-02 20:37:15 +00:00
Deluan
fe84788821
Increase artist image url sizes.
See https://support.symfonium.app/t/artist-picture-less-compressed/4447
2026-01-02 20:37:00 +00:00
Caio Cotts
821885bd28
Do not use lastFM api key and secret to determine if LastFM.Enabled should be set. 2026-01-02 20:37:00 +00:00
Deluan
59aaf56b0d
Increase artist image url sizes.
See https://support.symfonium.app/t/artist-picture-less-compressed/4447
2026-01-02 20:37:00 +00:00
Deluan
c48d3b3526
Replace gg.If with cmp.Or 2026-01-02 20:36:59 +00:00
Deluan
38a219648d
Refactor string utilities into its own package str 2026-01-02 20:36:59 +00:00
Caio Cotts
ce5a6aa4fd
Fix image stuttering (#3035)
* Fix image stuttering.

* Fix docker publishing for PRs

* Write tests for new square parameter.

* Simplify code for createImage.

---------

Co-authored-by: Deluan Quintão <deluan@navidrome.org>
2026-01-02 20:36:59 +00:00
Drew Weymouth
1247cb5174
Fix XML marshaling of OpenSubsonic structured lyrics (#3041) 2026-01-02 20:36:58 +00:00
Deluan
47068d2dea
Optimize SQLite3 access. Mainly separate read access from write access.
Based on tips from https://archive.is/Xfjh6#selection-257.0-278.0
2026-01-02 20:36:58 +00:00
Deluan
c98da13299
Fix G404 gosec lint error 2026-01-02 20:36:58 +00:00
Guilherme Souza
c9a39d9986
Deterministic pagination in random albums sort (#1841)
* Deterministic pagination in random albums sort

* Reseed on first random page

* Add unit tests

* Use rand in Subsonic API

* Use different seeds per user on SEEDEDRAND() SQLite3 function

* Small refactor

* Fix id mismatch

* Add seeded random to media_file (subsonic endpoint `getRandomSongs`)

* Refactor

* Remove unneeded import

---------

Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:36:58 +00:00
Deluan
b8ac62a13b
Fix lint error 2026-01-02 20:36:57 +00:00
Deluan
ffbc1cebd4
Associate main entities with library 2026-01-02 20:36:57 +00:00
Deluan
82e79073cd
Store MusicFolder as a library in DB 2026-01-02 20:36:57 +00:00
Deluan
b0f6a395a8
Rename MediaFolder to Library 2026-01-02 20:36:57 +00:00
Deluan
7057bd104d
Refactor to use more Go 1.22 features 2026-01-02 20:36:56 +00:00
Deluan
5d8b10635e
Simplify random.Int64 usage with generics 2026-01-02 20:36:56 +00:00
Deluan
af627aa18e
Refactor random functions 2026-01-02 20:36:56 +00:00
Deluan
2b13262b25
Uses Unix milliseconds support from standard Go lib 2026-01-02 20:36:56 +00:00
Deluan
0a5c72e8f2
Add samplingRate to OpenSubsonic responses 2026-01-02 20:36:56 +00:00
Deluan
d68cdac3d2
Do not panic if when updatePlaylist is called with a non-existent ID.
Fix #2876
2026-01-02 20:36:55 +00:00
Deluan
14a379e16c
Replace sync.WaitGroup with more appropriate errgroup.Group 2026-01-02 20:36:55 +00:00
Deluan
6640509044
Make dependency injection more consistent 2026-01-02 20:36:55 +00:00
Deluan
ad89e02a93
Limit access to Jukebox for admins only (configurable).
Closes #2849
2026-01-02 20:36:54 +00:00
Deluan
3459141f8c
Add HTTPSecurityHeaders.CustomFrameOptionsValue option.
Requested in https://github.com/navidrome/navidrome/issues/248#issuecomment-1783768985
2026-01-02 20:36:33 +00:00
Deluan
044ef35d8e
Fix int types in OpenSubsonic responses.
Refer to https://support.symfonium.app/t/symfonium-sync-crashes-when-tpos-is-not-an-int/4204
2026-01-02 20:35:32 +00:00
Deluan
88b7165362
Load mime_types from external file 2026-01-02 20:35:32 +00:00
crazygolem
7c196d544f
Add support for Reverse Proxy auth in Subsonic endpoints (#2558)
* feat(subsonic): Add support for Reverse Proxy auth - #2557

Signed-off-by: Jeremiah Menétrey <superjun1@gmail.com>

* Small refactoring

---------

Signed-off-by: Jeremiah Menétrey <superjun1@gmail.com>
Co-authored-by: Deluan Quintão <deluan@navidrome.org>
2026-01-02 20:35:31 +00:00
Deluan
281f611c0e
Add OpenSubsonic channelCount 2026-01-02 20:35:04 +00:00
crazygolem
b75b09e8da
Use the RealIP middleware also behind a reverse proxy (#2858)
* Use the RealIP middleware only behind a reverse proxy

* Fix proxy ip source in tests

* Fix test for PR#2087

The PR did not update the test after changing the behavior, but the test still
passed because another condition was preventing the user from being created in
the test.

* Use RealIP even without a trusted reverse proxy

* Use own type for context key

* Fix casing to follow go's conventions

* Do not apply RealIP middleware twice

* Fix IP source in logs

The most interesting data point in the log message is the proxy's IP, but
having the client IP too can help identify integration issues.
2026-01-02 20:35:04 +00:00
Deluan
76a906d2d2
Fix DiscTitle OpenSubsonic compatibility. Closes #2929 2026-01-02 20:34:24 +00:00