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