4236 Commits

Author SHA1 Message Date
Deluan
30918bd4a2
fix(scanner): normalize attribute strings and add edge case tests for PID calculation
Relates to https://github.com/navidrome/navidrome/issues/4183#issuecomment-2952729458

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:55:26 +00:00
Deluan Quintão
6776af7be2
feat(ui): add song Love and Rating functionality to playlist view (#4134)
* feat(ui): add playlist track love button

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

* feat(ui): add star rating feature for playlist tracks

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

* fix(ui): handle loading state and error logging in toggle love and rating components

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:55:26 +00:00
Deluan Quintão
15f28d8d93
fix(ui): update audio title link to include playlist support (#4175)
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:55:26 +00:00
Deluan Quintão
241f605019
fix(subsonic): fix JukeboxRole logic in GetUser and eliminate code duplication (#4170)
- Fix GetUser JukeboxRole to properly respect AdminOnly setting

- Extract buildUserResponse helper to eliminate duplication between GetUser and GetUsers

- Fix username field inconsistency (GetUsers was using loggedUser.Name instead of UserName)

- Add comprehensive tests covering jukebox role permissions and consistency between methods

Fixes #4160
2026-01-02 20:55:26 +00:00
Patrick O'Shea
99865347e0
fix(jukebox): jukebox mode doesn't include MusicFolder (#4067)
* fix(configuration.go, mpv.go): Jukebox mode doesn't include MusicFolder in mpv command - #4066

The call to createMPVCommand is not including the MusicFolder path in
mpv command causing it to fail with file not found errors.

Updated default command template and createMPVCommand to use additional
substitution with conf.server.MusicFolder

Signed-off-by: Pat <patso.oshea@gmail.com>

* Revert config.go change, use filepath.Join for cross platform

* Update track.go with mf.AbsolutePath()

---------

Signed-off-by: Pat <patso.oshea@gmail.com>
Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:55:25 +00:00
Deluan Quintão
d9d21ffdfd
fix(jukebox): fix mpv command and template parsing (#4162)
* test(mpv): add unit tests for MPV command generation and execution

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

* fix(mpv): improve command template parsing

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

* fix(mpv): update mock script to output arguments to stdout instead of a file

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

* test(mpv): add test suite for MPV command functionality

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

* fix(mpv): improve MPV command template parsing to handle quoted arguments

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

* fix(mpv): simplify MPV command check by removing unnecessary string containment

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

* fix(mpv): add error handling for empty command arguments and malformed templates

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:55:25 +00:00
Kendall Garner
d4ffa6a3cd
fix(scanner): update prometheus at the end of the scan (#4163)
* fix(scannner): use prometheus instance over noop if configured properly

* Real Fix: move `WriteAfterScanMetrics` outside gofunc

* refactor: remove unused artwork.CacheWarmer param from CallScan function

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:55:25 +00:00
Deluan
809282c2a8
fix(ui): improve layout and responsiveness of SelectPlaylistInput component
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:55:25 +00:00
Deluan
bdb4931288
fix(server): don't override /song routes
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:55:24 +00:00
Deluan
bf09b25102
fix(ui): make the height of the AddToPlaylistDialog static.
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:54:44 +00:00
Deluan Quintão
cff81757a0
refactor: simplify configuration endpoint with JSON serialization (#4159)
* refactor(config): reorganize configuration handling

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

* refactor(aboutUtils): improve array formatting and handling in TOML conversion

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

* refactor(aboutUtils): add escapeTomlKey function to handle special characters in TOML keys

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

* fix(test): remove unused getNestedValue function

* fix(ui): apply prettier formatting

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:54:36 +00:00
Deluan Quintão
47a131aa1d
fix(ui): add button is covered when adding to a playlist (#4156)
* refactor: fix SelectPlaylistInput layout and improve readability - Replace dropdown with fixed list to prevent button overlay - Break down into smaller focused components - Add comprehensive test coverage - Reduce spacing for compact layout

* refactor: update playlist input translations

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

* fix: format code with prettier - Fix formatting issues in AddToPlaylistDialog.test.jsx

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:27 +00:00
Kendall Garner
6538796523
fix(ui): DevFlags order in TOML export (#4155)
* fix(ui): update artist link rendering and improve button styles

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

* fix(ui): Move Dev* flags before sections in export

---------

Signed-off-by: Deluan <deluan@navidrome.org>
Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:27 +00:00
Deluan Quintão
2bb3bb8fd0
feat(ui): add 'Show in Playlist' context menu (#4139)
* Update song playlist menu and endpoint

* feat(ui): show submenu on click, not on hover

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

* feat(ui): integrate dataProvider for fetching playlists in song context menu

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

* feat(ui): update song context menu to use dataProvider for fetching playlists and inspecting songs

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

* feat(ui): stop event propagation when closing playlist submenu

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

* feat(ui): add 'show in playlist' option to options object

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:27 +00:00
Deluan Quintão
db5d8f9272
feat(ui): add configuration tab in About dialog (#4142)
* Flatten config endpoint and improve About dialog

* add config resource

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

* fix(ui): replace `==` with `===`

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

* feat(ui): add environment variables

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

* feat(ui): add sensitive value redaction

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

* feat(ui): more translations

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

* address PR comments

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

* feat(ui): add configuration export feature in About dialog

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

* feat(ui): translate development flags section header

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

* refactor

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

* feat(api): refactor routes for keepalive and insights endpoints

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

* lint

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

* fix(ui): enhance string escaping in formatTomlValue function

Updated the formatTomlValue function to properly escape backslashes in addition to quotes. Added new test cases to ensure correct handling of strings containing both backslashes and quotes.

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

* feat(ui): adjust dialog size

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:27 +00:00
Deluan Quintão
93ac9dce0d
fix(server): enhance artist folder detection with directory traversal (#4151)
* fix: enhance artist folder detection with directory traversal

Enhanced fromArtistFolder function to implement directory traversal fallback for finding artist images. The original implementation only searched in the calculated artist folder, which failed for single album artists where artist.jpg files were not detected.

Changes: Modified fromArtistFolder to search up to 3 directory levels (artist folder + 2 parent levels), extracted findImageInFolder helper function for cleaner code organization, added proper boundary checks to prevent infinite traversal, maintained backward compatibility with existing functionality.

This fix ensures artist.jpg files are properly detected for single album artists while preserving all existing behavior for multi-album artists.

* refactor: address PR review suggestions

Applied review suggestions from gemini-code-assist bot:

- Added maxArtistFolderTraversalDepth constant instead of hardcoded value 3

- Updated error message to mention that parent directories were also searched

- Enhanced test assertion to verify the improved error message

* fix: improve artist folder traversal logic and enhance error logging

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

* fix: remove test for special glob characters in artist folder detection

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

* fix: add logging for artist image search in folder

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:27 +00:00
Michael Tighe
6d60425441
fix(ui): reset page to 1 on playlist change - #1676 (#4154)
Signed-off-by: Michael Tighe <strideriidx@gmail.com>
2026-01-02 20:51:26 +00:00
Kevian
7ef5552b88
fix(ui): update Spanish translation (#4146)
Changed translation of "Top Rated" from "Los Mejores Calificados" to "Mejor Calificados" for consistency purposes with other list entries. While the previous version was correct, this version is shorter and aligns better with the rest of the terms.
2026-01-02 20:51:26 +00:00
Deluan
fe16608012
fix(ui): restructure AboutDialog's version notification layout
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:26 +00:00
Deluan Quintão
da069d3cdb
fix(ui): update song fetching logic to disable for radio (#4149)
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:26 +00:00
Deluan
fc128dc038
test: add tests for filtering artists by role
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:26 +00:00
Deluan
d250f5e29c
fix(subsonic): change role filter logic
fix #4140

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:26 +00:00
Caio Cotts
778e78ba5e
Merge commit from fork 2026-01-02 20:51:26 +00:00
Deluan
0dbbe23179
fix(ui): refine playlist details layout and disable play date display for mobile
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:26 +00:00
Deluan Quintão
3c1e29e8eb
fix(ui): update German, Greek, Esperanto, Spanish, Finnish, French, Indonesian, Dutch, Portuguese (BR), Russian, Swedish, Turkish, Ukrainian translations from POEditor (#3981)
Co-authored-by: navidrome-bot <navidrome-bot@navidrome.org>
2026-01-02 20:51:26 +00:00
Deluan
f6580e5e9e
fix(ui): improve playlist details layout with word break and stats styling
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:26 +00:00
Deluan Quintão
5a3f91e92e
feat(server): add option Lastfm.ScrobbleFirstArtistOnly to send only the first artist (#4131)
fixes #3791

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:26 +00:00
ChekeredList71
6b5b64588e
fix(ui): update Hungarian translation (#4113)
added "missing" strings

Co-authored-by: peter <asd@>
2026-01-02 20:51:26 +00:00
Deluan
8a55dc27ca
feat(server): add M3U file to downloaded playlist
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:26 +00:00
Deluan
f2626e6ebc
Revert "fix(server): failed transcoded files should not be cached (#4124)"
This reverts commit 9dd5a8c3347f5223d138d4279e3d51e5def4edce.
2026-01-02 20:51:25 +00:00
Deluan
3fbce92e36
refactor: unify logic to export to M3U8
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
Deluan Quintão
30716652e7
fix(ui): update titles for radios, shares and show pages (#4128) 2026-01-02 20:51:25 +00:00
Deluan Quintão
678b71fffe
fix(server): failed transcoded files should not be cached (#4124)
* Close stream on caching errors

* fix(test): replace errPartialReader with errFakeReader to fix lint error

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

* fix(test): update error assertion to check for substring in closed file error

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
Deluan
904cd4f6ad
fix(ui): enhance external link display with consistent minimum heights
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
Kendall Garner
6c5e5b0c62
fix(share): force share image to be square (to fix aspect ratio) (#4122)
* fix(ui): update artist link rendering and improve button styles

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

* square share player

---------

Signed-off-by: Deluan <deluan@navidrome.org>
Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
Deluan
c0d03dea3f
fix(ui): fix Reading mediafile(id:undefined): data not found error
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
Deluan Quintão
ba78e4319c
feat(ui): add smooth image transitions to album and artist artwork (#4120)
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
Deluan
49da388d6c
feat(ui): add playlist cover art display
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
Deluan
ee126bfe68
test: improve test reliability with longer sleep durations and generous tolerances
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
Deluan
6fc3e2762b
build(makefile): add golangci-lint installation step to setup
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
Deluan Quintão
7f62aaa578
fix(server): fix numeric comparisons for float custom tags in smart playlists (#4116)
* Fix numeric comparisons for custom float tags

* feat(criteria): cast numeric tags for sorting and comparisons

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:25 +00:00
dependabot[bot]
ecf9a54263
chore(deps): bump eslint-config-prettier from 9.1.0 to 10.1.5 in /ui (#4077)
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 9.1.0 to 10.1.5.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v9.1.0...v10.1.5)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.5
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-02 20:51:25 +00:00
dependabot[bot]
377c06f52a
build(deps): bump golangci/golangci-lint-action in /.github/workflows (#4035)
Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 7 to 8.
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](https://github.com/golangci/golangci-lint-action/compare/v7...v8)

---
updated-dependencies:
- dependency-name: golangci/golangci-lint-action
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-02 20:51:25 +00:00
Deluan
24e8b2c378
test: update test command to run without watch mode
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
Deluan
dbdf6d6c3d
chore(deps): update JS dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
Deluan
2f1b8709db
build(makefile): fix golangci-lint installation path check
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
Deluan
0ced591918
chore(deps): update Go dependencies
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
Deluan Quintão
35e51c9b0f
fix(ui): improve scan status handling (again) (#4115) 2026-01-02 20:51:24 +00:00
Deluan
b51afbec90
feat(ui): add missing filter for admin users in album, artist, and song lists
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-02 20:51:24 +00:00
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