4187 Commits

Author SHA1 Message Date
Xabi
4fbd09d21a
fix(ui): update Basque translation (#4064)
* Update eu.json

Added roles, reordered some strings, small fixes

* fix(ui): update Basque translation

* Update eu.json

third time's the charm

* please bear with me

I'm not a developer. I'm trying my hardest.

* Update eu.json

Added newest strings
2026-01-02 20:51:24 +00:00
ChekeredList71
a83e87f612
fix(ui): update Hungarian translation (#4112)
added: bitDepth, sampleRate, album/date, saveQueue, missing/empty, actions/remove_all, remove_all_missing_title, remove_all_missing_content, scanType, status, elapsedTime

edited (better sentence structuring, making it make more sense, etc.): listenBrainzLinkSuccess, playListsText

Co-authored-by: ChekeredList71 <asd@asd.com>
2026-01-02 20:51:24 +00:00
Deluan
376828ff39
fix(scanner): optimize missing flag update logic for artists
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
Deluan
ea221743db
fix(ui): improve elapsed time handling during scans
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
Deluan
4008ab6856
fix(ui): elapsed time for scans
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
Deluan Quintão
7810736486
feat(ui) add Save Queue to Playlist (#4110)
* ui: add save queue to playlist

* fix(ui): improve toolbar layout

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

* fix(ui): add loading state to save queue dialog

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

* fix(ui): refresh playlist after saving queue

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

* fix lint

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

* remove duplication in PlayerToolbar and add tests

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

* fix(i18n): update save queue text for clarity in English and Portuguese

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
Deluan
ec9b44826f
fix(ui): update artist link rendering and improve button styles
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
Deluan
3e0e091cb1
test: fix flaky scanner tests by setting maximum open connections to 1
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:23 +00:00
Ewen
e32071a046
fix(ui): update French translation (#4069)
Signed-off-by: Malesio <krytonspace@gmail.com>
2026-01-02 20:51:23 +00:00
Deluan
e3f1146bd9
fix(ui): the Portuguese translation is actually Brazilian Portuguese
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:23 +00:00
Deluan
12a74a9e2b
fix: small formatting error in en.json
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:23 +00:00
Deluan
9ce9986326
fix(ui): update Portuguese translations
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:23 +00:00
Deluan
77ee54fd5d
fix: add useResourceRefresh hook to AlbumShow, ArtistShow, MissingFilesList, and PlaylistShow components
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:23 +00:00
Deluan Quintão
93eecd4332
feat(ui): add remove all missing files functionality (#4108)
* Add remove all missing files feature

* test: update mediafile_repository tests for missing files deletion

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:23 +00:00
Copilot
8225bddca3
feat(scanner): add Scanner.PurgeMissing configuration option (#4107)
* Initial plan for issue

* Add Scanner.PurgeMissing configuration option

Co-authored-by: deluan <331353+deluan@users.noreply.github.com>

* Remove GC call from phaseMissingTracks.purgeMissing method

Co-authored-by: deluan <331353+deluan@users.noreply.github.com>

* Address PR comments for Scanner.PurgeMissing feature

Co-authored-by: deluan <331353+deluan@users.noreply.github.com>

* Address PR comments and add DeleteAllMissing method

Co-authored-by: deluan <331353+deluan@users.noreply.github.com>

* refactor(scanner): simplify purgeMissing logic and improve error handling

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

* fix configuration test

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: deluan <331353+deluan@users.noreply.github.com>
Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:21 +00:00
Deluan Quintão
a693231e98
test: add PERFORMER tests (#4105)
* Add performer participant tests with MBIDs

* test: add handling for mismatched performer names and MBIDs in participant tests

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:55 +00:00
Deluan Quintão
0d11fb2afb
test: fix ignored artwork tests (#4103)
* Fix artwork internal tests

* fix: rename artistReader functions to artistArtworkReader for clarity

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

* fix: update artwork internal tests to handle corrupted cover scenarios

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:55 +00:00
Deluan
841c97e5bb
chore: update Makefile to install golangci-lint if not present and adjust lint command
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:55 +00:00
Deluan
5a67929258
docs: update copilot instructions with important commands and linting guidelines
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:55 +00:00
Deluan Quintão
5a6d99ab09
fix(transcoding): restrict transcoding operations to admin users (#4096)
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:55 +00:00
Kendall Garner
1bbc5f6566
fix(db): allow deleting users that have shares (#4098)
* fix(db): allow deleting users that have shares

* remove placeholders
2026-01-02 20:49:55 +00:00
Deluan
380d9e2bd0
docs: add code guidelines for backend and frontend development
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:55 +00:00
Deluan Quintão
e6089d18df
fix(server): memory leak in cache warmer (#4095)
* Prevent cache warmer memory leak when cache disabled

* refactor(tests): replace disabledCache with mockFileCache in CacheWarmer tests

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

* test(cache): enhance CacheWarmer tests for initialization, buffer management, and error handling

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:54 +00:00
Deluan
5c049ea478
Revert "refactor(server): simplify lastfm agent initialization logic"
This reverts commit 6f52c0201cdc6e92bf4e47394d79767db9c33640.

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:54 +00:00
Kendall Garner
43692bca00
fix(subsonic): find lyrics by artist or albumartist (#4093)
* find artist by multivalued exact match, instead of 'artist' field

* check if lyrics are not empty

* refactor(filters): rename function to better reflect its purpose

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:54 +00:00
Deluan Quintão
702295698a
feat(ui): add scan progress and error reporting to UI (#4094)
* feat(scanner): add LastScanError tracking to scanner status

- Introduced LastScanErrorKey constant for error tracking.
- Updated StatusInfo struct to include LastError field.
- Modified scanner logic to store and retrieve last scan error.
- Enhanced ScanStatus response to include error information.
- Updated UI components to display last scan error when applicable.
- Added tests to verify last scan error functionality.

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

* feat(scanner): enhance scan status with type and elapsed time tracking

- Added LastScanTypeKey and LastScanStartTimeKey constants for tracking scan type and start time.
- Updated StatusInfo struct to include ScanType and ElapsedTime fields.
- Implemented getScanInfo method to retrieve scan type, elapsed time, and last error.
- Modified scanner logic to store scan type and start time during scans.
- Enhanced ScanStatus response and UI components to display scan type and elapsed time.
- Added formatShortDuration utility for better elapsed time representation.
- Updated activity reducer to handle new scan status fields.

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

* refactor(tests): consolidate controller status tests into a single file

- Removed the old controller_status_test.go file.
- Merged relevant tests into the new controller_test.go file for better organization and maintainability.
- Ensured all existing test cases for controller status are preserved and functional.

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

* Fix formatting issues

* refactor(scanner): update getScanInfo method documentation

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:54 +00:00
Caio Cotts
6e8d961240
feat(server): add DefaultShareExpiration config option (#4082)
* add DefaultShareExpiration config option

* run prettier so that I can push

* undo reformatting

* sort imports
2026-01-02 20:49:54 +00:00
Deluan Quintão
a106dc67d1
feat: hide missing artists from regular users and Subsonic API (#4092)
* Handle missing artists for non-admin users

* feat(artist): enhance ArtistList with missing row styling and class management

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:54 +00:00
Deluan
92f8cfb78e
chore: removed unused file
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:54 +00:00
Deluan Quintão
04d5a0e92e
feat(subsonic): add ISRC support for OpenSubsonic Child (#4088)
* docs: add testing and logging guidelines to AGENTS.md

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

* Introduce TagISRC and update ISRC handling

* fix: update .gitignore to exclude executable files and bin directory

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:54 +00:00
Caio Cotts
72a6f96242
fix: update Makefile with new demo URLs (#4080) 2026-01-02 20:49:54 +00:00
Deluan Quintão
976d5ac101
feat(scanner): add Scanner.FollowSymlinks option (#4061)
* Add Scanner.FollowSymlinks option (default: true) - Fixes #4060

* fix(mockMusicFS): improve symlink handling in Open, Stat, and ReadDir methods

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

* refactor(tests): enhance walkDirTree tests with symlink handling and cleanup

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:54 +00:00
Deluan Quintão
7522702de3
fix(scanner): optimize refresh (#4059)
* fix(artist): update RefreshStats to only process artists with recently updated media files

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

* fix: paginate Artist's RefreshStats, also replace rawSQL with Expr

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:54 +00:00
Kendall Garner
76af60dae9
feat:(server): support reading lyrics from filesystem (#2897)
* simplified lyrics handling

* address initial feedback

* add some trace and error logging

* allow fallback lyrics

* update nit

* restore artist/title filter only
2026-01-02 20:49:54 +00:00
Kendall Garner
8c645be311
fix(scanner): check if aiff/wma file has cover art (#3996)
* check if aiff file has cover art

* add cover art to test files, more support in wrapper

* remove wavpak since tag does't read it anyway
2026-01-02 20:49:54 +00:00
Deluan
c5d8492f8e
docs(scanner): add overview README document
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:53 +00:00
Kendall Garner
4bbffbc26f
feat(server): add artist/albumartist filter to media file (#4001)
* add artist/albumartist filter to media file

* artist -> artists_id
2026-01-02 20:49:53 +00:00
DDinghoya
a4fb8b2194
fix(ui): update Korean translation (#3980)
* Update ko.json

* Extra characters '들' present before the key.

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update resources/i18n/ko.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update resources/i18n/ko.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update resources/i18n/ko.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update resources/i18n/ko.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update resources/i18n/ko.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: Deluan Quintão <github@deluan.com>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2026-01-02 20:49:53 +00:00
Kendall Garner
3db88372f7
feat(scanner): add unsynced lyrics to default mapping (#3997) 2026-01-02 20:49:53 +00:00
Deluan Quintão
2517c4b7d5
chore: remove DevEnableBufferedScrobble and always enable buffered scrobbling (#3999)
Removed all code, config, and test references to DevEnableBufferedScrobble. Buffered scrobbling is now always enabled. Added this option to the list of deprecated config options with a warning. Updated all logic and tests to reflect this. No linter issues remain. Some PlayTracker tests are failing, but these are likely due to test data or logic unrelated to this change. All other tests pass. Review required for PlayTracker test failures.

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:53 +00:00
Deluan
c7a4c952fa
refactor(server): simplify lastfm agent initialization logic
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:53 +00:00
Deluan
4cd9d26011
test: add tests for userName and AbsolutePath in core/common.go
Added Ginkgo/Gomega tests for userName and AbsolutePath functions in core/common.go. Tests cover normal and error cases, using existing mocks and helpers. This improves coverage and ensures correct behavior for user context extraction and library path resolution.
2026-01-02 20:49:53 +00:00
Ivan Pešić
8eff207f0e
fix(ui): update Serbian translation (#3941) 2026-01-02 20:49:53 +00:00
Deluan Quintão
ea5460cec3
fix(ui): always order album tracks by disc and track number (fixes #3720) (#3975)
* fix(ui): ensure album tracks are always ordered by disc and track number (fixes #3720)

* refactor(ui): remove obsolete release date grouping logic from SongDatagrid and AlbumSongs

* fix(ui): ensure correct album track ordering in context menu and play button

* fix: Update album sort to use album_id instead of release_date

* refactor: Adjust filters in PlayButton and AlbumContextMenu

* fix: correct typo in comment regarding participants in GetMissingAndMatching function

* fix: prevent visual separation of tracks on same disc

Removes the leftover `releaseDate` check from the `firstTracksOfDiscs` calculation in `SongDatagridBody`. This check caused unnecessary `DiscSubtitleRow` insertions when tracks on the same disc had different release dates, leading to an incorrect visual grouping that resembled a multi-disc layout.

This change ensures disc subtitles are only shown when the actual `discNumber` changes, correcting the UI presentation issue reported in issue #3720 after PR #3975.

* fix: remove remaining releaseDate references in SongDatagrid

Cleaned up leftover `releaseDate` references in `SongDatagrid.jsx`:

- Removed `releaseDate` parameter and usage from `handlePlaySubset` in `DiscSubtitleRow`.

- Removed `releaseDate` prop passed to `AlbumContextMenu` in `DiscSubtitleRow`.

- Removed `releaseDate` from the drag item data in `SongDatagridRow`.

- Removed `releaseDate` parameter and the corresponding `else` block from the `playSubset` function in `SongDatagridBody`.

This ensures the component consistently uses `discNumber` for grouping and playback actions initiated from the disc subtitle, fully resolving the inconsistencies related to issue #3720.
2026-01-02 20:49:53 +00:00
Deluan Quintão
feb40005f5
fix(ui): update Russian, Turkish translations from POEditor (#3971)
Co-authored-by: navidrome-bot <navidrome-bot@navidrome.org>
2026-01-02 20:49:53 +00:00
marcbres
797cd86164
fix(ui): updated Catalan translations (#3973)
Co-authored-by: Marc Bres Gil <marc@helm>
2026-01-02 20:49:53 +00:00
Dongeun
cecfa05ba0
fix(ui): update Chinese (Simplified) translations (#3938) 2026-01-02 20:49:53 +00:00
Thomas Johansen
4637e23e8b
fix(ui): update Norwegian translation #3943 2026-01-02 20:49:53 +00:00
Guilherme Souza
aa7ad63a5b
feat(ui): show sampleRate in song info dialog (#3960)
* feat(ui): show sampleRate in song info dialog

* npm run prettier --write
2026-01-02 20:49:53 +00:00
Deluan
d945bdaef3
fix(server): albumtype in Smart Playlists
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:49:52 +00:00