Increased interval to 1050ms and moved to class scope

Review comments from JustAMan.
This commit is contained in:
PloughPuff 2019-03-14 00:43:41 +00:00 committed by Ploughpuff
parent 6d3e6d800f
commit f8bb7a7ff4

View File

@ -33,6 +33,12 @@ namespace MediaBrowser.Providers.Music
public readonly string MusicBrainzBaseUrl;
// The Jellyfin user-agent is unrestricted but source IP must not exceed
// one request per second, therefore we rate limit to avoid throttling.
// Be prudent, use a value slightly above the minimun required.
// https://musicbrainz.org/doc/XML_Web_Service/Rate_Limiting
private const long MusicBrainzQueryIntervalMs = 1050u;
public MusicBrainzAlbumProvider(
IHttpClient httpClient,
IApplicationHost appHost,
@ -715,15 +721,10 @@ namespace MediaBrowser.Providers.Music
/// </summary>
internal async Task<HttpResponseInfo> GetMusicBrainzResponse(string url, CancellationToken cancellationToken)
{
// The Jellyfin user-agent is unrestricted but source IP must not exceed
// one request per second, therefore we rate limit to avoid throttling
// https://musicbrainz.org/doc/XML_Web_Service/Rate_Limiting
const long QueryIntervalMs = 1000u;
// Only delay if necessary
if (_stopWatchMusicBrainz.ElapsedMilliseconds < QueryIntervalMs)
if (_stopWatchMusicBrainz.ElapsedMilliseconds < MusicBrainzQueryIntervalMs)
{
var delayMs = QueryIntervalMs - _stopWatchMusicBrainz.ElapsedMilliseconds;
// MusicBrainz is extremely adamant about limiting to one request per second
var delayMs = MusicBrainzQueryIntervalMs - _stopWatchMusicBrainz.ElapsedMilliseconds;
await Task.Delay((int)delayMs, cancellationToken).ConfigureAwait(false);
}