/// <summary> /// Get all elements from a paging list /// </summary> /// <typeparam name="T">The type the paging list contains</typeparam> /// <param name="pagingList">The original paging list</param> /// <param name="getNext">Code to retrieve more from the paging list. Argument is offset. Should return the next block of items in the paging list</param> /// <returns></returns> private async Task <List <T> > GetAllFromPagingList <T>(SAPIModels.Paging <T> pagingList, Func <int, Task <SAPIModels.Paging <T> > > getNext) where T : class { if (pagingList == null || pagingList?.Items == null) { return(null); } List <T> list = new List <T>(); list.AddRange(pagingList.Items.Select(x => x).ToList()); while (pagingList.Next != null && pagingList.Items != null) { pagingList = await getNext(pagingList.Offset + pagingList.Limit); if (pagingList.Items != null) { list.AddRange(pagingList.Items.Select(x => x)); } } return(list); }
/// <summary> /// Gets all elements of a paging list /// </summary> /// <typeparam name="T"></typeparam> /// <param name="api">A reference to the api</param> /// <param name="pagingList">The list to get the rest of</param> /// <returns></returns> public static async Task <List <T> > GetAllFromPagingAsync <T>(SpotifyAPI.Web.SpotifyWebAPI api, SAPIModels.Paging <T> pagingList) where T : class { List <T> returnList = new List <T>(pagingList.Items); while (pagingList.Next != null) { pagingList = await api.GetNextPageAsync(pagingList); returnList.AddRange(pagingList.Items); } return(returnList); }