private async Task <IResult <InstaWebData> > GetFormerAsync(InstaWebType type, PaginationParameters paginationParameters) { UserAuthValidator.Validate(_userAuthValidate); var webData = new InstaWebData(); try { if (paginationParameters == null) { paginationParameters = PaginationParameters.MaxPagesToLoad(1); } InstaWebData Convert(InstaWebSettingsPageResponse settingsPageResponse) { return(ConvertersFabric.Instance.GetWebDataConverter(settingsPageResponse).Convert()); } Uri CreateUri(string cursor = null) { switch (type) { case InstaWebType.FormerBioTexts: return(WebUriCreator.GetFormerBiographyTextsUri(cursor)); case InstaWebType.FormerLinksInBio: return(WebUriCreator.GetFormerBiographyLinksUri(cursor)); case InstaWebType.FormerUsernames: return(WebUriCreator.GetFormerUsernamesUri(cursor)); case InstaWebType.FormerFullNames: return(WebUriCreator.GetFormerFullNamesUri(cursor)); case InstaWebType.FormerPhones: return(WebUriCreator.GetFormerPhoneNumbersUri(cursor)); case InstaWebType.FormerEmails: return(WebUriCreator.GetFormerEmailsUri(cursor)); default: return(WebUriCreator.GetFormerBiographyLinksUri(cursor)); } } var request = await GetRequest(CreateUri(paginationParameters?.NextMaxId)); if (!request.Succeeded) { if (request.Value != null) { return(Result.Fail(request.Info, Convert(request.Value))); } else { return(Result.Fail(request.Info, webData)); } } var response = request.Value; paginationParameters.NextMaxId = response.Data.Cursor; while (!string.IsNullOrEmpty(paginationParameters.NextMaxId) && paginationParameters.PagesLoaded < paginationParameters.MaximumPagesToLoad) { var nextRequest = await GetRequest(CreateUri(paginationParameters?.NextMaxId)); if (!nextRequest.Succeeded) { return(Result.Fail(nextRequest.Info, Convert(response))); } var nextResponse = nextRequest.Value; if (nextResponse.Data != null) { response.Data.Data.AddRange(nextResponse.Data.Data); } response.Data.Cursor = paginationParameters.NextMaxId = nextResponse.Data?.Cursor; paginationParameters.PagesLoaded++; } return(Result.Success(Convert(response))); } catch (HttpRequestException httpException) { _logger?.LogException(httpException); return(Result.Fail(httpException, webData, ResponseType.NetworkProblem)); } catch (Exception exception) { _logger?.LogException(exception); return(Result.Fail(exception, webData)); } }