Ejemplo n.º 1
0
        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);
        }