Fix #387: pass offset to subsonic random album fetch call
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user