add fallback for artist Top Tracks when server returns none

This commit is contained in:
Drew Weymouth
2024-06-26 08:28:24 -07:00
parent d9cec2e493
commit 2b39c6ba66
3 changed files with 21 additions and 0 deletions
+15
View File
@@ -2,6 +2,7 @@ package helpers
import (
"fmt"
"sort"
"github.com/dweymouth/supersonic/backend/mediaprovider"
"github.com/dweymouth/supersonic/sharedutil"
@@ -37,3 +38,17 @@ func GetArtistTracks(mp mediaprovider.MediaProvider, artistID string) ([]*mediap
}
return allTracks, nil
}
func GetTopTracksFallback(mp mediaprovider.MediaProvider, artistID string, count int) ([]*mediaprovider.Track, error) {
tracks, err := GetArtistTracks(mp, artistID)
if err != nil {
return nil, err
}
sort.Slice(tracks, func(i, j int) bool {
return tracks[i].PlayCount > tracks[j].PlayCount
})
if len(tracks) > count {
return tracks[:count], nil
}
return tracks, nil
}
@@ -182,6 +182,9 @@ func (j *jellyfinMediaProvider) GetTopTracks(artist mediaprovider.Artist, limit
if err != nil {
return nil, err
}
if len(tr) == 0 {
return helpers.GetTopTracksFallback(j, artist.ID, limit)
}
return sharedutil.MapSlice(tr, toTrack), nil
}
@@ -248,6 +248,9 @@ func (s *subsonicMediaProvider) GetTopTracks(artist mediaprovider.Artist, count
if err != nil {
return nil, err
}
if len(tr) == 0 {
return helpers.GetTopTracksFallback(s, artist.ID, count)
}
return sharedutil.MapSlice(tr, toTrack), nil
}