private async Task <List <LfmArtist> > GetLibraryGetArtistTracks(LfmUser lfmUser, IProgress <double> progress, CancellationToken cancellationToken, double maxProgress, double progressOffset) { var artists = new List <LfmArtist>(); var page = 1; bool moreTracks; do { cancellationToken.ThrowIfCancellationRequested(); var response = await _lastfmApi.LibraryGetArtistTracks(lfmUser, page ++).ConfigureAwait(false); if (response?.artists?.artist == null || !response.artists.artist.Any()) { break; } artists.AddRange(response.artists.artist); moreTracks = !response.artists.attr.IsLastPage(); //Only report progress in download because it will be 90% of the time taken var currentProgress = (double)response.artists.attr.page / response.artists.attr.totalPages * (maxProgress - progressOffset) + progressOffset; Plugin.Logger.Debug("Progress: " + currentProgress * 100); progress.Report(currentProgress * 100); } while(moreTracks); return(artists); }