public DiscogsTrackDataSearch(DiscogsTrackDataSource dataSource, string query, int tracksPerPage, string format)
        {
            HasMoreResults = true;

            Source      = dataSource;
            SearchQuery = query;
            _perPage    = tracksPerPage;

            _nextPage = 1;
            _format   = format;


            _results = new List <TrackData>();


            InitRoles();

            LoadMoreResults();
        }
        public DiscogsTrackDataSearch(DiscogsTrackDataSource source, Uri releaseUri)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (releaseUri == null)
            {
                throw new ArgumentNullException("releaseUri");
            }

            this.SearchQuery    = releaseUri.AbsoluteUri;
            this.HasMoreResults = false;
            this.Source         = source;

            //Beatport.com URL regex
            System.Text.RegularExpressions.Regex releaseURIRegex = new System.Text.RegularExpressions.Regex(@"^http://www.discogs.com/(.*)/release/(\d*)$");


            var uriMatch = releaseURIRegex.Match(releaseUri.AbsoluteUri);

            if (uriMatch.Success)
            {
                int releaseId = System.Convert.ToInt32(uriMatch.Groups[2].Value);


                Dictionary <string, dynamic> releaseData = GetReleaseData(releaseId);

                IEnumerable <TrackData> releaseTracks = ParseReleaseData(releaseData, this.Source.Host);

                _results = new List <TrackData>(releaseTracks);
            }
            else
            {
                throw new ArgumentException("Invalid Discogs release URI format", "searchUri");
            }
        }