misc: Implement Iterator approach for artists
First step towards improving sorting for Artists. Use the same iterator approach as albums and tracks.
This commit is contained in:
@@ -16,6 +16,8 @@ const (
|
||||
AlbumSortArtistAZ string = "Artist (A-Z)"
|
||||
AlbumSortYearAscending string = "Year (ascending)"
|
||||
AlbumSortYearDescending string = "Year (descending)"
|
||||
|
||||
ArtistSortNameAZ string = "Name (A-Z)"
|
||||
)
|
||||
|
||||
func (j *jellyfinMediaProvider) AlbumSortOrders() []string {
|
||||
@@ -29,6 +31,12 @@ func (j *jellyfinMediaProvider) AlbumSortOrders() []string {
|
||||
}
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) ArtistSortOrders() []string {
|
||||
return []string{
|
||||
ArtistSortNameAZ,
|
||||
}
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) IterateAlbums(sortOrder string, filter mediaprovider.AlbumFilter) mediaprovider.AlbumIterator {
|
||||
var jfSort jellyfin.Sort
|
||||
switch sortOrder {
|
||||
@@ -116,6 +124,32 @@ func (j *jellyfinMediaProvider) IterateTracks(searchQuery string) mediaprovider.
|
||||
return helpers.NewTrackIterator(fetcher, j.prefetchCoverCB)
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) IterateArtists(sortOrder string) mediaprovider.ArtistIterator {
|
||||
var jfSort jellyfin.Sort
|
||||
|
||||
if sortOrder == "" {
|
||||
sortOrder = ArtistSortNameAZ // default
|
||||
}
|
||||
switch sortOrder {
|
||||
case ArtistSortNameAZ:
|
||||
jfSort.Field = jellyfin.SortByName
|
||||
jfSort.Mode = jellyfin.SortAsc
|
||||
}
|
||||
|
||||
fetcher := func(offs, limit int) ([]*mediaprovider.Artist, error) {
|
||||
ar, err := j.client.GetAlbumArtists(jellyfin.QueryOpts{
|
||||
Sort: jfSort,
|
||||
Paging: jellyfin.Paging{StartIndex: offs, Limit: limit},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return sharedutil.MapSlice(ar, toArtist), nil
|
||||
}
|
||||
|
||||
return helpers.NewArtistIterator(fetcher)
|
||||
}
|
||||
|
||||
// Creates the Jellyfin filter to implement the given mediaprovider filter,
|
||||
// and zeros out the now-unneeded fields in the mediaprovider filter.
|
||||
func jfFilterFromFilter(filter *mediaprovider.AlbumFilter) jellyfin.Filter {
|
||||
|
||||
@@ -159,14 +159,6 @@ func (j *jellyfinMediaProvider) GetArtistInfo(artistID string) (*mediaprovider.A
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) GetArtists() ([]*mediaprovider.Artist, error) {
|
||||
ar, err := j.client.GetAlbumArtists(jellyfin.QueryOpts{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return sharedutil.MapSlice(ar, toArtist), nil
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) GetTrack(trackID string) (*mediaprovider.Track, error) {
|
||||
tr, err := j.client.GetSong(trackID)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user