private IObservable <T> GenerateFromPaginable <T, TRes>(Func <IRestRequest> requestBuilder, int?max = null) where T : DiscogsEntity
            where TRes : DiscogsPaginableResults <T>
        {
            var paginable = new DiscogsPaginable()
            {
                per_page = (max > 0) ? Math.Min(50, max.Value) : new int?(),
                page     = 1
            };

            return(Observable.Create <T>(async(observer, cancel) =>
            {
                DiscogsPaginedResult pagination;
                do
                {
                    cancel.ThrowIfCancellationRequested();
                    var request = requestBuilder().AddAsParameter(paginable);
                    paginable.page++;

                    var res = await _Client.Execute <TRes>(request, cancel);
                    var elements = res?.GetResults();
                    if (elements == null)
                    {
                        return;
                    }

                    foreach (var result in elements)
                    {
                        cancel.ThrowIfCancellationRequested();
                        observer.OnNext(result);
                    }

                    pagination = res.pagination;
                }while (pagination.page != pagination.pages);
            }));
        }
        private async Task <T> GetPaginableAsync <T>(Func <IRestRequest> requestBuilder, DiscogsPaginable paginable, CancellationToken token)
        {
            paginable = paginable ?? new DiscogsPaginable()
            {
                per_page = 50,
                page     = 1
            };

            var request = requestBuilder().AddAsParameter(paginable);

            return(await _Client.Execute <T>(request, token));
        }
        public Task <DiscogsLabelReleases> GetAllLabelReleasesAsync(int labelId, DiscogsPaginable paginable, CancellationToken token)
        {
            IRestRequest RequestBuilder() => _Client.GetAllLabelReleasesRequest(labelId);

            return(GetPaginableAsync <DiscogsLabelReleases>(RequestBuilder, paginable, token));
        }
 public Task <DiscogsLabelReleases> GetAllLabelReleasesAsync(int labelId, DiscogsPaginable paginable = null)
 {
     return(GetAllLabelReleasesAsync(labelId, paginable, CancellationToken.None));
 }
        public Task <DiscogsArtistReleases> GetArtistReleaseAsync(int artistId, DiscogsSortInformation sort, DiscogsPaginable paginable, CancellationToken token)
        {
            IRestRequest RequestBuilder() => _Client.GetArtistReleaseVersionRequest(artistId).AddAsParameter(sort);

            return(GetPaginableAsync <DiscogsArtistReleases>(RequestBuilder, paginable, token));
        }
 public Task <DiscogsArtistReleases> GetArtistReleaseAsync(int artistId, DiscogsSortInformation sort = null, DiscogsPaginable paginable = null)
 {
     return(GetArtistReleaseAsync(artistId, sort, paginable, CancellationToken.None));
 }
        public Task <DiscogsReleaseVersions> GetMasterReleaseVersionsAsync(int masterId, DiscogsPaginable paginable, CancellationToken token)
        {
            IRestRequest RequestBuilder() => _Client.GetMasterReleaseVersionRequest(masterId);

            return(GetPaginableAsync <DiscogsReleaseVersions>(RequestBuilder, paginable, token));
        }
 public Task <DiscogsReleaseVersions> GetMasterReleaseVersionsAsync(int masterId, DiscogsPaginable paginable = null)
 {
     return(GetMasterReleaseVersionsAsync(masterId, paginable, CancellationToken.None));
 }
        public Task <DiscogsSearchResults> SearchAsync(DiscogsSearch search, DiscogsPaginable paginable, CancellationToken token)
        {
            IRestRequest RequestBuilder() => _Client.GetSearchRequest().AddAsParameter(search);

            return(GetPaginableAsync <DiscogsSearchResults>(RequestBuilder, paginable, token));
        }
示例#10
0
 public Task <DiscogsSearchResults> SearchAsync(DiscogsSearch search, DiscogsPaginable paginable = null)
 {
     return(SearchAsync(search, paginable, CancellationToken.None));
 }
示例#11
0
 public Task <DiscogsInstanceNotes> GetCollectionNotesByFolderAndReleaseAsync(string username, int folderID, int releaseID, int instanceID, DiscogsPaginable paginable = null)
 {
     return(GetCollectionNotesByFolderAndReleaseAsync(username, folderID, releaseID, instanceID, paginable, CancellationToken.None));
 }
示例#12
0
        public Task <DiscogsInstanceNotes> GetCollectionNotesByFolderAndReleaseAsync(string username, int folderID, int releaseID, int instanceID, DiscogsPaginable paginable, CancellationToken token)
        {
            IRestRequest RequestBuilder() => _Client.GetCollectionNotesByFolderAndReleaseRequest(username, folderID, releaseID, instanceID);

            return(GetPaginableAsync <DiscogsInstanceNotes>(RequestBuilder, paginable, token));
        }
示例#13
0
 public Task <DiscogsFolderReleases> GetCollectionReleasesByFolderAsync(string username, int folderID, DiscogsPaginable paginable = null)
 {
     return(GetCollectionReleasesByFolderAsync(username, folderID, paginable, CancellationToken.None));
 }
示例#14
0
 public Task <DiscogsCollectionFolders> GetCollectionFoldersAsync(string username, DiscogsPaginable paginable = null)
 {
     return(GetCollectionFoldersAsync(username, paginable, CancellationToken.None));
 }
示例#15
0
        public Task <DiscogsCollectionFolders> GetCollectionFoldersAsync(string username, DiscogsPaginable paginable, CancellationToken token)
        {
            IRestRequest RequestBuilder() => _Client.GetCollectionFoldersRequest(username);

            return(GetPaginableAsync <DiscogsCollectionFolders>(RequestBuilder, paginable, token));
        }