359 Commits

Author SHA1 Message Date
Deluan
d09d874dbb
Simplify resources code, enabling any resource to be overridden (not just translations) 2026-01-02 20:09:01 +00:00
Deluan
3c29a7adb4
Fix translations on Windows 2026-01-02 20:09:01 +00:00
Deluan
bb29e2bdd6
Fix double escaped lyrics and comments 2026-01-02 20:09:01 +00:00
Deluan
83380f2de2
Fix/Optimized Playlist tracks deletion 2026-01-02 20:09:01 +00:00
Deluan
9ca4fb538b
Optimize playlist updates 2026-01-02 20:09:00 +00:00
Deluan
54996563ed
Make SmartPlaylists read-only 2026-01-02 20:08:59 +00:00
Deluan
7eaf3ebb63
Import smart playlists (extension .nsp) 2026-01-02 20:08:59 +00:00
Deluan
874926481b
Add methods to Playlist model
Also, don't load genres for Playlists tracks (not necessary for now)
2026-01-02 20:08:58 +00:00
Deluan
2939c96bd8
Reduce number of queries for some playlists operations.
Also allow admins to update/delete playlists from other users in the Subsonic API. Closes #1366
2026-01-02 20:08:58 +00:00
Dheeraj Lalwani
830784e948
Adds Lyrics Support to Subsonic API (#1379)
* Add function 'isSynced' that identifies if lyrics are synced or not and add tests for the same

* implement 'getLyrics' which returns lyrics if they exist

Signed-off-by: Dheeraj Lalwani <lalwanidheeraj1234@gmail.com>

* remove timestamps frorom the the lyrics if they are synced, fix filters & clean up code

Signed-off-by: Dheeraj Lalwani <lalwanidheeraj1234@gmail.com>

* add snapshot tests for the 'Lyrics' response & add some clean up

Signed-off-by: Dheeraj Lalwani <lalwanidheeraj1234@gmail.com>

* add tests for 'GetLyrics' function

Signed-off-by: Dheeraj Lalwani <lalwanidheeraj1234@gmail.com>

* update the snapshot test & the test for 'GetLyrics' function

Signed-off-by: Dheeraj Lalwani <lalwanidheeraj1234@gmail.com>
2026-01-02 20:08:58 +00:00
Deluan
a7b43f9c56
Return playlists sorted in getPlaylists Subsonic endpoint 2026-01-02 20:08:57 +00:00
Deluan
6740708313
Add songs to playlists with drag and drop 2026-01-02 20:08:31 +00:00
Deluan Quintão
f50e521fec
Check goimports in the pipeline (#1381)
* Check goimports in the pipeline

* Check goimports in the pipeline

* Check goimports in the pipeline

* go mod tidy

* wip

* wip

* Fix goimports and go:build tags

* Run golangci-lint before goimports
2026-01-02 20:08:02 +00:00
Deluan
a262176232
Don't show Artist Page for "Various Artists" 2026-01-02 20:08:01 +00:00
Dnouv
b3b9832a9a
Artist Detail Page (first cut) (#1287)
* Configure fetching from API and route

* pretty

* Remove errors

* Remove errors

* Remove errors

* Complete page for Desktop view

* Fix error

* Add xs Artist page

* Remove unused import

* Add styles for theme

* Change route path

* Remove artId useEffect array

* Remove array

* Fix cover load err

* Add redirect on err

* Remove route

* What's in a name? consistency :)

* Fix err

* Fix UI changes

* Fetch album from resource

* Renaming done

* Review changes

* Some touch-up

* Small refactor, to make naming and structure more consistent with AlbumShow

* Make artist's album list similar to original implementation

* Reuse AlbumGridView, to avoid duplication

* Add feature flag to enable new Artist Page, default false

* Better biography styling. Small refactorings,

* Don't encode quotes and other symbols

* Moved AlbumShow to correct folder

Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:08:00 +00:00
caiocotts
f2cf716bcd
Add x-total-count to Subsonic API getAlbumList (#1360)
* Add x-total-count to Subsonic API getAlbumList

* Rename variable

Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:08:00 +00:00
Deluan Quintão
7b390686b3
Move Playlists to the sidebar menu (#1339)
* Show playlists in sidebar menu

* Fix menu

* Refresh playlist submenu when adding new playlist

* Group shared playlists below user's playlists

* Fix text overflow in menu options

* Add button in playlist menu to go to Playlists list

* Add config option `DevSidebarPlaylists` to enable this feature (default false)
2026-01-02 20:06:54 +00:00
Deluan
18f6d55acb
Use structs lib to map models to DB. Fix #1266 2026-01-02 20:06:11 +00:00
Deluan
e63769051f
Remove dependency of deprecated ioutil package 2026-01-02 20:06:10 +00:00
Deluan
5989a3d4fb
Use fs.FS in MergeFS implementation 2026-01-02 20:06:09 +00:00
Deluan
1e5b6a3c54
Small refactorings 2026-01-02 20:06:09 +00:00
Deluan
09603abe33
Make getGenre Subsonic endpoint returns genres sorted by counts 2026-01-02 20:06:09 +00:00
Deluan
8d7cd365cf
Optimize GetAll genres query 2026-01-02 20:06:09 +00:00
Deluan
bc266f8fad
Add Genre filters to UI 2026-01-02 20:06:08 +00:00
Deluan
15b3994d13
Remove unnecessary repositories methods 2026-01-02 20:06:08 +00:00
Deluan
5de062da03
Add multiple genres to Albums 2026-01-02 20:06:08 +00:00
Deluan
1e9e8edc49
Add multiple genres to MediaFile 2026-01-02 20:06:08 +00:00
Deluan
52510a55c4
Add genre tables, read multiple-genres from tags 2026-01-02 20:06:08 +00:00
Deluan
19e9ec46a2
Use AlbumArtist tag even for compilations, when it is specified.
If the tracks' AlbumArtists are different, then use "Various Artists"
2026-01-02 20:06:07 +00:00
Deluan
75cc2580b7
Disable Last.FM features based on LastFM.Enabled config option 2026-01-02 20:05:07 +00:00
Deluan
755fac76b0
Don't rely on goroutines to send keepalive events 2026-01-02 20:05:07 +00:00
Deluan
8c6a931037
Assign event ids in the main loop, to avoid out-of-order events 2026-01-02 20:05:07 +00:00
Deluan
39623748f2
Fix deadlock situation when events are sent too fast to the broker 2026-01-02 20:05:07 +00:00
Deluan
f51afe1f95
Add option to disable album cover animation in the player. Closes #1185 2026-01-02 20:05:06 +00:00
Deluan
c81ecbd96e
Add tests to /scrobble endpoint 2026-01-02 20:05:06 +00:00
Deluan
7b03f8a9e4
Enable Last.fm scrobbling by default (still requires user's authorization) 2026-01-02 20:05:06 +00:00
Deluan
ffd1aa7e89
Refactor: Consolidate scrobbling logic in play_tracker 2026-01-02 20:05:05 +00:00
Deluan
5db24ff145
Send NowPlaying and Scrobbles to Last.fm 2026-01-02 20:05:04 +00:00
Deluan
0a9f6cb807
Refactor Agents to be singleton
Initial work for Last.fm scrobbler
2026-01-02 20:05:04 +00:00
Deluan
883d316670
Use singleton in other places as well 2026-01-02 20:05:04 +00:00
Deluan
c0c229ad72
Expose Last.fm's ApiKey to UI 2026-01-02 20:05:04 +00:00
Deluan
f468522c72
Implement Last.FM Desktop Auth flow endpoints 2026-01-02 20:05:04 +00:00
Steve Richter
fb53bba5ab
Initial Last.fm UI implementation 2026-01-02 20:05:04 +00:00
Deluan
ce0fc7a274
Add flag to disable Scrobble config in the UI 2026-01-02 20:05:04 +00:00
Deluan
81b17bf941
Show notification if server is updated 2026-01-02 20:05:03 +00:00
Deluan
5bbf0e03f9
Fix cookie warning 2026-01-02 20:05:03 +00:00
Deluan
05498513c7
Fix lint error 2026-01-02 20:05:03 +00:00
Deluan
0057c9f38a
Try to register all playing music in GetNowPlaying 2026-01-02 20:04:23 +00:00
Deluan
1ac077cf22
Fix GetNowPlaying endpoint showing only the last play 2026-01-02 20:04:23 +00:00
Deluan
7b4b6f8130
New implementation of NowPlaying 2026-01-02 20:04:23 +00:00