Merge pull request #1259 from MediaBrowser/master

merge from master
This commit is contained in:
Luke 2015-11-12 13:45:33 -05:00
commit 5571bc98f3
4 changed files with 14 additions and 56 deletions

View file

@ -186,20 +186,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
} }
} }
/// <summary>
/// The _semaphoreLocks
/// </summary>
private readonly ConcurrentDictionary<string, SemaphoreSlim> _semaphoreLocks = new ConcurrentDictionary<string, SemaphoreSlim>(StringComparer.OrdinalIgnoreCase);
/// <summary>
/// Gets the lock.
/// </summary>
/// <param name="url">The filename.</param>
/// <returns>System.Object.</returns>
private SemaphoreSlim GetLock(string url)
{
return _semaphoreLocks.GetOrAdd(url, key => new SemaphoreSlim(1, 1));
}
/// <summary> /// <summary>
/// Gets the response internal. /// Gets the response internal.
/// </summary> /// </summary>
@ -270,7 +256,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
var url = options.Url; var url = options.Url;
var urlHash = url.ToLower().GetMD5().ToString("N"); var urlHash = url.ToLower().GetMD5().ToString("N");
var responseCachePath = Path.Combine(_appPaths.CachePath, "httpclient", urlHash); var responseCachePath = Path.Combine(_appPaths.CachePath, "httpclient", urlHash);
response = await GetCachedResponse(responseCachePath, options.CacheLength, url).ConfigureAwait(false); response = await GetCachedResponse(responseCachePath, options.CacheLength, url).ConfigureAwait(false);
@ -279,31 +265,14 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
return response; return response;
} }
var semaphore = GetLock(url); response = await SendAsyncInternal(options, httpMethod).ConfigureAwait(false);
await semaphore.WaitAsync(options.CancellationToken).ConfigureAwait(false); if (response.StatusCode == HttpStatusCode.OK)
try
{ {
response = await GetCachedResponse(responseCachePath, options.CacheLength, url).ConfigureAwait(false); await CacheResponse(response, responseCachePath).ConfigureAwait(false);
if (response != null)
{
return response;
}
response = await SendAsyncInternal(options, httpMethod).ConfigureAwait(false);
if (response.StatusCode == HttpStatusCode.OK)
{
await CacheResponse(response, responseCachePath).ConfigureAwait(false);
}
return response;
}
finally
{
semaphore.Release();
} }
return response;
} }
private async Task<HttpResponseInfo> GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url) private async Task<HttpResponseInfo> GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url)
@ -348,13 +317,12 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
using (var responseStream = response.Content) using (var responseStream = response.Content)
{ {
using (var fileStream = _fileSystem.GetFileStream(responseCachePath, FileMode.Create, FileAccess.Write, FileShare.Read, true)) var memoryStream = new MemoryStream();
await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false);
memoryStream.Position = 0;
using (var fileStream = _fileSystem.GetFileStream(responseCachePath, FileMode.Create, FileAccess.Write, FileShare.None, true))
{ {
var memoryStream = new MemoryStream();
await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false);
memoryStream.Position = 0;
await memoryStream.CopyToAsync(fileStream).ConfigureAwait(false); await memoryStream.CopyToAsync(fileStream).ConfigureAwait(false);
memoryStream.Position = 0; memoryStream.Position = 0;

View file

@ -297,12 +297,6 @@ namespace MediaBrowser.Providers.Music
ResourcePool = _musicBrainzResourcePool ResourcePool = _musicBrainzResourcePool
}; };
if (!isSearch)
{
options.CacheMode = CacheMode.Unconditional;
options.CacheLength = TimeSpan.FromDays(3);
}
using (var xml = await _httpClient.Get(options).ConfigureAwait(false)) using (var xml = await _httpClient.Get(options).ConfigureAwait(false))
{ {
using (var oReader = new StreamReader(xml, Encoding.UTF8)) using (var oReader = new StreamReader(xml, Encoding.UTF8))

View file

@ -99,9 +99,7 @@ namespace MediaBrowser.Providers.Omdb
{ {
Url = url, Url = url,
ResourcePool = OmdbProvider.ResourcePool, ResourcePool = OmdbProvider.ResourcePool,
CancellationToken = cancellationToken, CancellationToken = cancellationToken
CacheMode = CacheMode.Unconditional,
CacheLength = TimeSpan.FromDays(2)
}).ConfigureAwait(false)) }).ConfigureAwait(false))
{ {
@ -133,7 +131,7 @@ namespace MediaBrowser.Providers.Omdb
item.SetProviderId(MetadataProviders.Imdb, result.imdbID); item.SetProviderId(MetadataProviders.Imdb, result.imdbID);
int parsedYear; int parsedYear;
if (result.Year.Length > 0 if (result.Year.Length > 0
&& int.TryParse(result.Year.Substring(0, Math.Min(result.Year.Length, 4)), NumberStyles.Any, CultureInfo.InvariantCulture, out parsedYear)) && int.TryParse(result.Year.Substring(0, Math.Min(result.Year.Length, 4)), NumberStyles.Any, CultureInfo.InvariantCulture, out parsedYear))
{ {
item.ProductionYear = parsedYear; item.ProductionYear = parsedYear;

View file

@ -43,9 +43,7 @@ namespace MediaBrowser.Providers.Omdb
{ {
Url = url, Url = url,
ResourcePool = ResourcePool, ResourcePool = ResourcePool,
CancellationToken = cancellationToken, CancellationToken = cancellationToken
CacheMode = CacheMode.Unconditional,
CacheLength = TimeSpan.FromDays(7)
}).ConfigureAwait(false)) }).ConfigureAwait(false))
{ {