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); }
/// <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)); }