diff --git a/backend/mediaprovider/jellyfin/iterators.go b/backend/mediaprovider/jellyfin/iterators.go index 05f87f8..98907a7 100644 --- a/backend/mediaprovider/jellyfin/iterators.go +++ b/backend/mediaprovider/jellyfin/iterators.go @@ -42,6 +42,9 @@ func (j *jellyfinMediaProvider) IterateAlbums(sortOrder string, filter mediaprov jfSort.Mode = jellyfin.SortDesc } jfFilt, modifiedFilter := jfFilterFromFilter(filter) + if j.currentLibraryID != "" { + jfFilt.ParentID = j.currentLibraryID + } fetcher := func(offs, limit int) ([]*mediaprovider.Album, error) { al, err := j.client.GetAlbums(jellyfin.QueryOpts{ @@ -89,6 +92,9 @@ func (j *jellyfinMediaProvider) IterateTracks(searchQuery string) mediaprovider. fetcher = func(offs, limit int) ([]*mediaprovider.Track, error) { var opts jellyfin.QueryOpts opts.Paging = jellyfin.Paging{StartIndex: offs, Limit: limit} + if j.currentLibraryID != "" { + opts.Filter.ParentID = j.currentLibraryID + } s, err := j.client.GetSongs(opts) if err != nil { return nil, err diff --git a/backend/mediaprovider/jellyfin/jellyfinmediaprovider.go b/backend/mediaprovider/jellyfin/jellyfinmediaprovider.go index 4857cac..c9dae5b 100644 --- a/backend/mediaprovider/jellyfin/jellyfinmediaprovider.go +++ b/backend/mediaprovider/jellyfin/jellyfinmediaprovider.go @@ -44,6 +44,8 @@ type jellyfinMediaProvider struct { client *jellyfin.Client prefetchCoverCB func(coverArtID string) + currentLibraryID string + genresCached []*mediaprovider.Genre genresCachedAt int64 // unix } @@ -60,10 +62,17 @@ func (j *jellyfinMediaProvider) SetPrefetchCoverCallback(cb func(coverArtID stri } func (j *jellyfinMediaProvider) GetLibraries() ([]mediaprovider.Library, error) { - return nil, nil + v, err := j.client.GetUserViews() + if err != nil { + return nil, err + } + return sharedutil.FilterMapSlice(v, func(v *jellyfin.BaseItem) (mediaprovider.Library, bool) { + return mediaprovider.Library{Name: v.Name, ID: v.ID}, v.CollectionType == string(jellyfin.CollectionTypeMusic) + }), nil } -func (j *jellyfinMediaProvider) SetLibrary(string) error { +func (j *jellyfinMediaProvider) SetLibrary(id string) error { + j.currentLibraryID = id return nil } @@ -186,6 +195,9 @@ func (j *jellyfinMediaProvider) GetTopTracks(artist mediaprovider.Artist, limit opts.Filter.ArtistID = artist.ID opts.Sort.Field = jellyfin.SortByCommunityRating opts.Sort.Mode = jellyfin.SortDesc + if j.currentLibraryID != "" { + opts.Filter.ParentID = j.currentLibraryID + } tr, err := j.client.GetSongs(opts) if err != nil { return nil, err @@ -201,6 +213,9 @@ func (j *jellyfinMediaProvider) GetRandomTracks(genreName string, limit int) ([] opts.Paging.Limit = limit opts.Filter.Genres = []string{genreName} opts.Sort.Field = jellyfin.SortByRandom + if j.currentLibraryID != "" { + opts.Filter.ParentID = j.currentLibraryID + } tr, err := j.client.GetSongs(opts) if err != nil { return nil, err @@ -266,7 +281,7 @@ func (j *jellyfinMediaProvider) GetGenres() ([]*mediaprovider.Genre, error) { return j.genresCached, nil } - g, err := j.client.GetGenres(jellyfin.Paging{}) + g, err := j.client.GetGenres(jellyfin.Paging{}, "") if err != nil { return nil, err } diff --git a/backend/mediaprovider/jellyfin/searchall.go b/backend/mediaprovider/jellyfin/searchall.go index 1494818..30f7347 100644 --- a/backend/mediaprovider/jellyfin/searchall.go +++ b/backend/mediaprovider/jellyfin/searchall.go @@ -55,7 +55,7 @@ func (j *jellyfinMediaProvider) SearchAll(searchQuery string, maxResults int) ([ wg.Add(1) go func() { - g, e := j.client.GetGenres(jellyfin.Paging{}) + g, e := j.client.GetGenres(jellyfin.Paging{}, "") if e == nil { genres = sharedutil.FilterSlice(g, func(g jellyfin.NameID) bool { return helpers.AllTermsMatch(strings.ToLower(sanitize.Accents(g.Name)), queryLowerWords) diff --git a/go.mod b/go.mod index 56284a4..23e035e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/deluan/sanitize v0.0.0-20230310221930-6e18967d9fc1 github.com/dweymouth/fyne-advanced-list v0.0.0-20250211191927-58ea85eec72c github.com/dweymouth/fyne-tooltip v0.3.0 - github.com/dweymouth/go-jellyfin v0.0.0-20250531151636-29591764f0a0 + github.com/dweymouth/go-jellyfin v0.0.0-20250715154414-d0a1630ee74f github.com/godbus/dbus/v5 v5.1.0 github.com/google/uuid v1.3.0 github.com/hashicorp/go-retryablehttp v0.7.7 diff --git a/go.sum b/go.sum index d2640c8..ba6e172 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,8 @@ github.com/dweymouth/fyne/v2 v2.3.0-rc1.0.20250712002006-5064d705dac4 h1:Q3r94Ac github.com/dweymouth/fyne/v2 v2.3.0-rc1.0.20250712002006-5064d705dac4/go.mod h1:YZt7SksjvrSNJCwbWFV32WON3mE1Sr7L41D29qMZ/lU= github.com/dweymouth/go-jellyfin v0.0.0-20250531151636-29591764f0a0 h1:9t1CR83uzn5Va4Nycwncmuw/NEAN64O4lf82VBPzdfE= github.com/dweymouth/go-jellyfin v0.0.0-20250531151636-29591764f0a0/go.mod h1:fcUagHBaQnt06GmBAllNE0J4O/7064zXRWdqnTTtVjI= +github.com/dweymouth/go-jellyfin v0.0.0-20250715154414-d0a1630ee74f h1:7O7Cn17pwKHG7zPgNhxMabXJP1ZdmNVxCb4i8yJgVZo= +github.com/dweymouth/go-jellyfin v0.0.0-20250715154414-d0a1630ee74f/go.mod h1:fcUagHBaQnt06GmBAllNE0J4O/7064zXRWdqnTTtVjI= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=