From 1e05d88a8d74dff067ec417cd9322aac4224d6da Mon Sep 17 00:00:00 2001 From: Michael Manganiello Date: Sun, 7 Apr 2024 20:27:06 -0300 Subject: [PATCH] misc: Move Jellyfin Artist iterator to separate file --- .../mediaprovider/jellyfin/artistiterator.go | 55 +++++++++++++++++++ backend/mediaprovider/jellyfin/iterators.go | 45 --------------- 2 files changed, 55 insertions(+), 45 deletions(-) create mode 100644 backend/mediaprovider/jellyfin/artistiterator.go diff --git a/backend/mediaprovider/jellyfin/artistiterator.go b/backend/mediaprovider/jellyfin/artistiterator.go new file mode 100644 index 0000000..75481a1 --- /dev/null +++ b/backend/mediaprovider/jellyfin/artistiterator.go @@ -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) +} diff --git a/backend/mediaprovider/jellyfin/iterators.go b/backend/mediaprovider/jellyfin/iterators.go index 33d38f1..9b1d1c1 100644 --- a/backend/mediaprovider/jellyfin/iterators.go +++ b/backend/mediaprovider/jellyfin/iterators.go @@ -16,8 +16,6 @@ const ( AlbumSortArtistAZ string = "Artist (A-Z)" AlbumSortYearAscending string = "Year (ascending)" AlbumSortYearDescending string = "Year (descending)" - - ArtistSortNameAZ string = "Name (A-Z)" ) 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 { var jfSort jellyfin.Sort switch sortOrder { @@ -124,43 +116,6 @@ func (j *jellyfinMediaProvider) IterateTracks(searchQuery string) mediaprovider. 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, // and returns a modified mediaprovider filter, with now-unneeded fields zeroed out. func jfFilterFromFilter(filter mediaprovider.AlbumFilter) (jellyfin.Filter, mediaprovider.AlbumFilter) {