diff --git a/server/subsonic/filter/filters.go b/server/subsonic/filter/filters.go index ab285e15..4ab4f964 100644 --- a/server/subsonic/filter/filters.go +++ b/server/subsonic/filter/filters.go @@ -108,12 +108,19 @@ func SongsByRandom(genre string, fromYear, toYear int) Options { return addDefaultFilters(options) } -func SongWithArtistTitle(artist, title string) Options { +func SongWithLyrics(artist, title string) Options { return addDefaultFilters(Options{ - Sort: "updated_at", - Order: "desc", - Max: 1, - Filters: And{Eq{"artist": artist, "title": title}}, + Sort: "updated_at", + Order: "desc", + Max: 1, + Filters: And{ + Eq{"title": title}, + NotEq{"lyrics": "[]"}, + Or{ + persistence.Exists("json_tree(participants, '$.albumartist')", Eq{"value": artist}), + persistence.Exists("json_tree(participants, '$.artist')", Eq{"value": artist}), + }, + }, }) } diff --git a/server/subsonic/media_retrieval.go b/server/subsonic/media_retrieval.go index 35a3fd3d..5cca74c3 100644 --- a/server/subsonic/media_retrieval.go +++ b/server/subsonic/media_retrieval.go @@ -98,7 +98,7 @@ func (api *Router) GetLyrics(r *http.Request) (*responses.Subsonic, error) { response := newResponse() lyricsResponse := responses.Lyrics{} response.Lyrics = &lyricsResponse - mediaFiles, err := api.ds.MediaFile(r.Context()).GetAll(filter.SongWithArtistTitle(artist, title)) + mediaFiles, err := api.ds.MediaFile(r.Context()).GetAll(filter.SongWithLyrics(artist, title)) if err != nil { return nil, err