misc: Move Jellyfin Artist iterator to separate file
This commit is contained in:
@@ -0,0 +1,55 @@
|
|||||||
|
package jellyfin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/dweymouth/go-jellyfin"
|
||||||
|
"github.com/dweymouth/supersonic/backend/mediaprovider"
|
||||||
|
"github.com/dweymouth/supersonic/backend/mediaprovider/helpers"
|
||||||
|
"github.com/dweymouth/supersonic/sharedutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ArtistSortNameAZ string = "Name (A-Z)"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (j *jellyfinMediaProvider) ArtistSortOrders() []string {
|
||||||
|
return []string{
|
||||||
|
ArtistSortNameAZ,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *jellyfinMediaProvider) IterateArtists(sortOrder string, filter mediaprovider.ArtistFilter) 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, filter, j.prefetchCoverCB)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *jellyfinMediaProvider) SearchArtists(searchQuery string, filter mediaprovider.ArtistFilter) mediaprovider.ArtistIterator {
|
||||||
|
fetcher := func(offs, limit int) ([]*mediaprovider.Artist, error) {
|
||||||
|
sr, err := j.client.Search(searchQuery, jellyfin.TypeArtist, jellyfin.Paging{StartIndex: offs, Limit: limit})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return sharedutil.MapSlice(sr.Artists, toArtist), nil
|
||||||
|
}
|
||||||
|
return helpers.NewArtistIterator(fetcher, filter, j.prefetchCoverCB)
|
||||||
|
}
|
||||||
@@ -16,8 +16,6 @@ const (
|
|||||||
AlbumSortArtistAZ string = "Artist (A-Z)"
|
AlbumSortArtistAZ string = "Artist (A-Z)"
|
||||||
AlbumSortYearAscending string = "Year (ascending)"
|
AlbumSortYearAscending string = "Year (ascending)"
|
||||||
AlbumSortYearDescending string = "Year (descending)"
|
AlbumSortYearDescending string = "Year (descending)"
|
||||||
|
|
||||||
ArtistSortNameAZ string = "Name (A-Z)"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (j *jellyfinMediaProvider) AlbumSortOrders() []string {
|
func (j *jellyfinMediaProvider) AlbumSortOrders() []string {
|
||||||
@@ -31,12 +29,6 @@ func (j *jellyfinMediaProvider) AlbumSortOrders() []string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *jellyfinMediaProvider) ArtistSortOrders() []string {
|
|
||||||
return []string{
|
|
||||||
ArtistSortNameAZ,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (j *jellyfinMediaProvider) IterateAlbums(sortOrder string, filter mediaprovider.AlbumFilter) mediaprovider.AlbumIterator {
|
func (j *jellyfinMediaProvider) IterateAlbums(sortOrder string, filter mediaprovider.AlbumFilter) mediaprovider.AlbumIterator {
|
||||||
var jfSort jellyfin.Sort
|
var jfSort jellyfin.Sort
|
||||||
switch sortOrder {
|
switch sortOrder {
|
||||||
@@ -124,43 +116,6 @@ func (j *jellyfinMediaProvider) IterateTracks(searchQuery string) mediaprovider.
|
|||||||
return helpers.NewTrackIterator(fetcher, j.prefetchCoverCB)
|
return helpers.NewTrackIterator(fetcher, j.prefetchCoverCB)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *jellyfinMediaProvider) IterateArtists(sortOrder string, filter mediaprovider.ArtistFilter) 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, filter, j.prefetchCoverCB)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (j *jellyfinMediaProvider) SearchArtists(searchQuery string, filter mediaprovider.ArtistFilter) mediaprovider.ArtistIterator {
|
|
||||||
fetcher := func(offs, limit int) ([]*mediaprovider.Artist, error) {
|
|
||||||
sr, err := j.client.Search(searchQuery, jellyfin.TypeArtist, jellyfin.Paging{StartIndex: offs, Limit: limit})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return sharedutil.MapSlice(sr.Artists, toArtist), nil
|
|
||||||
}
|
|
||||||
return helpers.NewArtistIterator(fetcher, filter, j.prefetchCoverCB)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creates the Jellyfin filter to implement the given mediaprovider filter,
|
// Creates the Jellyfin filter to implement the given mediaprovider filter,
|
||||||
// and returns a modified mediaprovider filter, with now-unneeded fields zeroed out.
|
// and returns a modified mediaprovider filter, with now-unneeded fields zeroed out.
|
||||||
func jfFilterFromFilter(filter mediaprovider.AlbumFilter) (jellyfin.Filter, mediaprovider.AlbumFilter) {
|
func jfFilterFromFilter(filter mediaprovider.AlbumFilter) (jellyfin.Filter, mediaprovider.AlbumFilter) {
|
||||||
|
|||||||
Reference in New Issue
Block a user