diff --git a/backend/mediaprovider/jellyfin/jellyfinmediaprovider.go b/backend/mediaprovider/jellyfin/jellyfinmediaprovider.go index 59ccc31..41210ac 100644 --- a/backend/mediaprovider/jellyfin/jellyfinmediaprovider.go +++ b/backend/mediaprovider/jellyfin/jellyfinmediaprovider.go @@ -74,16 +74,46 @@ func (s *jellyfinMediaProvider) GetAlbumInfo(albumID string) (*mediaprovider.Alb return nil, errors.New("unimplemented") } -func (s *jellyfinMediaProvider) GetArtist(artistID string) (*mediaprovider.ArtistWithAlbums, error) { - return nil, errors.New("unimplemented") +func (j *jellyfinMediaProvider) GetArtist(artistID string) (*mediaprovider.ArtistWithAlbums, error) { + ar, err := j.client.GetArtist(artistID) + if err != nil { + return nil, err + } + var opts jellyfin.QueryOpts + opts.Filter.ArtistID = artistID + al, err := j.client.GetAlbums(opts) + if err != nil { + return nil, err + } + + artist := &mediaprovider.ArtistWithAlbums{ + Albums: sharedutil.MapSlice(al, toAlbum), + } + fillArtist(ar, &artist.Artist) + return artist, nil } -func (s *jellyfinMediaProvider) GetArtistInfo(artistID string) (*mediaprovider.ArtistInfo, error) { - return nil, errors.New("unimplemented") +func (j *jellyfinMediaProvider) GetArtistInfo(artistID string) (*mediaprovider.ArtistInfo, error) { + ar, err := j.client.GetArtist(artistID) + if err != nil { + return nil, err + } + similar, err := j.client.GetSimilarArtists(artistID) + if err != nil { + return nil, err + } + return &mediaprovider.ArtistInfo{ + SimilarArtists: sharedutil.MapSlice(similar, toArtist), + Biography: ar.Overview, + }, nil } -func (s *jellyfinMediaProvider) GetArtists() ([]*mediaprovider.Artist, error) { - return nil, errors.New("unimplemented") +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) { @@ -274,6 +304,20 @@ func toTrack(ch *jellyfin.Song) *mediaprovider.Track { return t } +func toArtist(a *jellyfin.Artist) *mediaprovider.Artist { + art := &mediaprovider.Artist{} + fillArtist(a, art) + return art +} + +func fillArtist(a *jellyfin.Artist, artist *mediaprovider.Artist) { + artist.AlbumCount = a.AlbumCount + artist.Favorite = a.UserData.IsFavorite + artist.ID = a.ID + artist.Name = a.Name + artist.CoverArtID = a.ID +} + func toAlbum(a *jellyfin.Album) *mediaprovider.Album { album := &mediaprovider.Album{} fillAlbum(a, album)