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