Fix #387: pass offset to subsonic random album fetch call

This commit is contained in:
Drew Weymouth
2024-05-20 18:17:41 -07:00
parent fd340ec97e
commit ce647c27b9
2 changed files with 10 additions and 4 deletions
+5 -3
View File
@@ -98,7 +98,7 @@ type randomAlbumIter struct {
// Once we start getting back too many already-returned albums, // Once we start getting back too many already-returned albums,
// switch to requesting more albums from a deterministic sort order. // switch to requesting more albums from a deterministic sort order.
deterministicFetcher AlbumFetchFn deterministicFetcher AlbumFetchFn
ramdomFetcher AlbumFetchFn randomFetcher AlbumFetchFn
phaseTwo bool phaseTwo bool
offset int offset int
done bool done bool
@@ -109,7 +109,7 @@ func NewRandomAlbumIter(deterministicFetcher, randomFetcher AlbumFetchFn, filter
filter: filter, filter: filter,
prefetchCB: prefetchCoverCB, prefetchCB: prefetchCoverCB,
deterministicFetcher: deterministicFetcher, deterministicFetcher: deterministicFetcher,
ramdomFetcher: randomFetcher, randomFetcher: randomFetcher,
albumIDSet: make(map[string]bool), albumIDSet: make(map[string]bool),
} }
} }
@@ -145,13 +145,14 @@ func (r *randomAlbumIter) Next() *mediaprovider.Album {
} }
} }
} else { } else {
albums, err := r.ramdomFetcher(0 /*offset - doesn't matter for random*/, 25) albums, err := r.randomFetcher(r.offset, 25)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
r.done = true r.done = true
r.albumIDSet = nil r.albumIDSet = nil
return nil return nil
} }
r.offset += len(albums)
var hitCount int var hitCount int
for _, album := range albums { for _, album := range albums {
if _, ok := r.albumIDSet[album.ID]; !ok { if _, ok := r.albumIDSet[album.ID]; !ok {
@@ -169,6 +170,7 @@ func (r *randomAlbumIter) Next() *mediaprovider.Album {
} }
if successRatio := float64(hitCount) / float64(25); successRatio < 0.3 { if successRatio := float64(hitCount) / float64(25); successRatio < 0.3 {
r.phaseTwo = true r.phaseTwo = true
r.offset = 0
} }
} }
} }
@@ -225,7 +225,11 @@ func (s *subsonicMediaProvider) newRandomIter(filter mediaprovider.AlbumFilter,
return helpers.NewRandomAlbumIter( return helpers.NewRandomAlbumIter(
s.fetchFnFromStandardSort("newest"), s.fetchFnFromStandardSort("newest"),
makeFetchFn(func(offset, limit int) ([]*subsonic.AlbumID3, error) { makeFetchFn(func(offset, limit int) ([]*subsonic.AlbumID3, error) {
return s.client.GetAlbumList2("random", map[string]string{"size": strconv.Itoa(limit)}) args := map[string]string{
"size": strconv.Itoa(limit),
"offset": strconv.Itoa(offset),
}
return s.client.GetAlbumList2("random", args)
}), }),
filter, s.prefetchCoverCB) filter, s.prefetchCoverCB)
} }