WIP - Jellyfin multi library
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user