private async Task <MbzUrl> GetMbzUrl(bool forceMusicBrainzProper = false)
        {
            if (_chosenUrl == null || _mbzUrls == null || (DateTime.UtcNow.Ticks - _lastMbzUrlQueryTicks) > TimeSpan.FromHours(12).Ticks)
            {
                var urls = await RefreshMzbUrls(forceMusicBrainzProper).ConfigureAwait(false);

                if (urls.Count > 1)
                {
                    _chosenUrl = urls[new Random().Next(0, urls.Count)];
                }
                else
                {
                    _chosenUrl = urls[0];
                }
            }

            return(_chosenUrl);
        }
Esempio n. 2
0
        /// <summary>
        /// Gets the music brainz response.
        /// </summary>
        internal async Task <HttpResponseInfo> GetMusicBrainzResponse(string url, bool isSearch, bool forceMusicBrainzProper, CancellationToken cancellationToken)
        {
            var urlInfo    = new MbzUrl(MusicBrainzBaseUrl, 1000);
            var throttleMs = urlInfo.throttleMs;

            if (throttleMs > 0)
            {
                // MusicBrainz is extremely adamant about limiting to one request per second
                _logger.LogDebug("Throttling MusicBrainz by {0}ms", throttleMs.ToString(CultureInfo.InvariantCulture));
                await Task.Delay(throttleMs, cancellationToken).ConfigureAwait(false);
            }

            url = urlInfo.url.TrimEnd('/') + url;

            var options = new HttpRequestOptions
            {
                Url = url,
                CancellationToken = cancellationToken,
                UserAgent         = _appHost.Name + "/" + _appHost.ApplicationVersion,
                BufferContent     = throttleMs > 0
            };

            return(await _httpClient.SendAsync(options, "GET").ConfigureAwait(false));
        }