Allow playlists larger than 50 items (#159)

This commit ensures that playlists longer than 50 items return
successfully when `max_tracks_per_playlist` is set higher than 50.

Previously if this value was raised higher than 50 the addition of a
playlist with more than 50 items would hang indefinitely.
This commit is contained in:
Matt Kemp 2016-06-26 23:57:15 -05:00 committed by Matthieu Grieger
parent 57eaf7c3db
commit c85fddcb4f

View file

@ -134,9 +134,15 @@ func (yt *YouTube) GetTracks(url string, submitter *gumble.User) ([]interfaces.T
maxItems = viper.GetInt("queue.max_tracks_per_playlist") maxItems = viper.GetInt("queue.max_tracks_per_playlist")
} }
// YouTube playlist searches return a max of 50 results per page
maxResults := 50
if maxResults > maxItems {
maxResults = maxItems
}
pageToken := "" pageToken := ""
for len(tracks) < maxItems { for len(tracks) < maxItems {
curResp, curErr := http.Get(fmt.Sprintf(playlistItemsURL, id, maxItems, viper.GetString("api_keys.youtube"), pageToken)) curResp, curErr := http.Get(fmt.Sprintf(playlistItemsURL, id, maxResults, viper.GetString("api_keys.youtube"), pageToken))
defer curResp.Body.Close() defer curResp.Body.Close()
if curErr != nil { if curErr != nil {
// An error occurred, simply skip this track. // An error occurred, simply skip this track.
@ -163,6 +169,11 @@ func (yt *YouTube) GetTracks(url string, submitter *gumble.User) ([]interfaces.T
break break
} }
} }
pageToken, _ = v.GetString("nextPageToken")
if pageToken == "" {
break
}
} }
if len(tracks) == 0 { if len(tracks) == 0 {