quintodrome/server/subsonic
Deluan Quintão f03ca44a8e
feat(plugins): add lyrics provider plugin capability (#5126)
* feat(plugins): add lyrics provider plugin capability

Refactor the lyrics system from a static function to an interface-based
service that supports WASM plugin providers. Plugins listed in the
LyricsPriority config (alongside "embedded" and file extensions) are
now resolved through the plugin system.

Includes capability definition, Go/Rust PDK, adapter, Wire integration,
and tests for plugin fallback behavior.

* test(plugins): add lyrics capability integration test with test plugin

* fix(plugins): default lyrics language to 'xxx' when plugin omits it

Per the OpenSubsonic spec, the server must return 'und' or 'xxx' when
the lyrics language is unknown. The lyrics plugin adapter was passing
an empty string through when a plugin didn't provide a language value.
This defaults the language to 'xxx', consistent with all other callers
of model.ToLyrics() in the codebase.

* refactor(plugins): rename lyrics import to improve clarity

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

* refactor(lyrics): update TrackInfo description for clarity

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

* fix(lyrics): enhance lyrics plugin handling and case sensitivity

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

* fix(plugins): update payload type to string with byte format for task data

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

---------

Signed-off-by: Deluan <deluan@navidrome.org>
2026-03-03 15:48:39 -05:00
..
filter fix(subsonic): only use genre tag when searching by genre (#4361) 2025-07-19 21:52:29 -04:00
responses fix(subsonic): restore public attribute for playlists in XML responses 2026-02-23 18:17:44 -05:00
album_lists.go feat: Multi-library support (#4181) 2025-07-18 18:41:12 -04:00
album_lists_test.go feat(plugins): add lyrics provider plugin capability (#5126) 2026-03-03 15:48:39 -05:00
api.go feat(plugins): add lyrics provider plugin capability (#5126) 2026-03-03 15:48:39 -05:00
api_suite_test.go feat:(server): support reading lyrics from filesystem (#2897) 2025-04-30 08:10:19 -04:00
api_test.go fix(subsonic): validate JSONP callback parameter 2026-02-08 10:33:46 -05:00
bookmarks.go feat(subsonic): implement indexBasedQueue extension (#4244) 2025-11-09 12:52:05 -05:00
browsing.go feat(subsonic): append album version to names in Subsonic API (#5111) 2026-02-26 10:50:12 -05:00
browsing_test.go feat: Multi-library support (#4181) 2025-07-18 18:41:12 -04:00
helpers.go feat(subsonic): append album version to names in Subsonic API (#5111) 2026-02-26 10:50:12 -05:00
helpers_test.go fix(subsonic): fix support for LegacyClients 2026-01-25 18:06:48 -05:00
jukebox.go refactor: small improvements and clean up (#3423) 2024-10-22 22:54:31 -04:00
library_scanning.go feat(scanner): implement selective folder scanning and file system watcher improvements (#4674) 2025-11-14 22:15:43 -05:00
library_scanning_test.go feat(scanner): implement selective folder scanning and file system watcher improvements (#4674) 2025-11-14 22:15:43 -05:00
media_annotation.go feat(plugins): experimental support for plugins (#3998) 2025-06-22 20:45:38 -04:00
media_annotation_test.go feat(plugins): add lyrics provider plugin capability (#5126) 2026-03-03 15:48:39 -05:00
media_retrieval.go feat(plugins): add lyrics provider plugin capability (#5126) 2026-03-03 15:48:39 -05:00
media_retrieval_test.go feat(plugins): add lyrics provider plugin capability (#5126) 2026-03-03 15:48:39 -05:00
middlewares.go refactor(auth): replace untyped JWT claims with typed Claims struct 2026-03-02 14:03:27 -05:00
middlewares_test.go feat: rename "reverse proxy authentication" to "external authentication" (#4418) 2025-12-02 12:01:48 -05:00
opensubsonic.go feat(subsonic): implement indexBasedQueue extension (#4244) 2025-11-09 12:52:05 -05:00
opensubsonic_test.go feat(plugins): add lyrics provider plugin capability (#5126) 2026-03-03 15:48:39 -05:00
playlists.go refactor: move playlist business logic from repositories to service layer (#5027) 2026-02-21 19:57:13 -05:00
playlists_test.go feat(plugins): add lyrics provider plugin capability (#5126) 2026-03-03 15:48:39 -05:00
radio.go Replace all utils.Param* with req.Params 2023-12-21 17:41:09 -05:00
searching.go feat(subsonic): sort search3 results by relevance (#5086) 2026-02-23 08:51:54 -05:00
searching_test.go feat(plugins): add lyrics provider plugin capability (#5126) 2026-03-03 15:48:39 -05:00
sharing.go fix(subsonic): make Share's lastVisited optional 2025-01-09 16:10:53 -05:00
stream.go Add log.IsGreaterOrEqualTo, that take into consideration path-scoped log levels 2023-12-25 16:35:16 -05:00
system.go Some cleanup, adding missing context handling 2022-12-06 19:57:47 -05:00
users.go feat(server): add EnableCoverArtUpload config option 2026-03-02 16:59:05 -05:00
users_test.go feat(server): add EnableCoverArtUpload config option 2026-03-02 16:59:05 -05:00