diff options
| author | Anthony Lavado <anthony@lavado.ca> | 2020-08-18 14:12:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-18 14:12:28 -0400 |
| commit | 93fe595e5e9863874c1973e4f2d7f3c85549d3f9 (patch) | |
| tree | 1b85a93b1628a7c8379318e28bf79faa01d36540 /MediaBrowser.Providers/Manager | |
| parent | 684d9856b11e4795798cd08f84ac4e84e50fa17c (diff) | |
| parent | be67528958fc225d9af17cc34da87a613fb07cc9 (diff) | |
Merge pull request #3925 from crobibero/httpclient
Remove IHttpClient from Providers
Diffstat (limited to 'MediaBrowser.Providers/Manager')
| -rw-r--r-- | MediaBrowser.Providers/Manager/ItemImageProvider.cs | 26 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 36 |
2 files changed, 41 insertions, 21 deletions
diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs index 6cc3ca3691..a5eb095c46 100644 --- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs +++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs @@ -465,9 +465,16 @@ namespace MediaBrowser.Providers.Manager try { - var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false); + using var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false); + await using var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); - await _providerManager.SaveImage(item, response.Content, response.ContentType, type, null, cancellationToken).ConfigureAwait(false); + await _providerManager.SaveImage( + item, + stream, + response.Content.Headers.ContentType.MediaType, + type, + null, + cancellationToken).ConfigureAwait(false); result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate; return true; @@ -565,14 +572,14 @@ namespace MediaBrowser.Providers.Manager try { - var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false); + using var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false); // If there's already an image of the same size, skip it - if (response.ContentLength.HasValue) + if (response.Content.Headers.ContentLength.HasValue) { try { - if (item.GetImages(imageType).Any(i => _fileSystem.GetFileInfo(i.Path).Length == response.ContentLength.Value)) + if (item.GetImages(imageType).Any(i => _fileSystem.GetFileInfo(i.Path).Length == response.Content.Headers.ContentLength.Value)) { response.Content.Dispose(); continue; @@ -584,7 +591,14 @@ namespace MediaBrowser.Providers.Manager } } - await _providerManager.SaveImage(item, response.Content, response.ContentType, imageType, null, cancellationToken).ConfigureAwait(false); + await using var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); + await _providerManager.SaveImage( + item, + stream, + response.Content.Headers.ContentType.MediaType, + imageType, + null, + cancellationToken).ConfigureAwait(false); result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate; } catch (HttpException ex) diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index bbd7166e68..e67d1b8c37 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.IO; using System.Linq; using System.Net; +using System.Net.Http; using System.Net.Mime; using System.Threading; using System.Threading.Tasks; @@ -44,7 +45,7 @@ namespace MediaBrowser.Providers.Manager { private readonly object _refreshQueueLock = new object(); private readonly ILogger<ProviderManager> _logger; - private readonly IHttpClient _httpClient; + private readonly IHttpClientFactory _httpClientFactory; private readonly ILibraryMonitor _libraryMonitor; private readonly IFileSystem _fileSystem; private readonly IServerApplicationPaths _appPaths; @@ -66,7 +67,7 @@ namespace MediaBrowser.Providers.Manager /// <summary> /// Initializes a new instance of the <see cref="ProviderManager"/> class. /// </summary> - /// <param name="httpClient">The Http client.</param> + /// <param name="httpClientFactory">The Http client factory.</param> /// <param name="subtitleManager">The subtitle manager.</param> /// <param name="configurationManager">The configuration manager.</param> /// <param name="libraryMonitor">The library monitor.</param> @@ -75,7 +76,7 @@ namespace MediaBrowser.Providers.Manager /// <param name="appPaths">The server application paths.</param> /// <param name="libraryManager">The library manager.</param> public ProviderManager( - IHttpClient httpClient, + IHttpClientFactory httpClientFactory, ISubtitleManager subtitleManager, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, @@ -85,7 +86,7 @@ namespace MediaBrowser.Providers.Manager ILibraryManager libraryManager) { _logger = logger; - _httpClient = httpClient; + _httpClientFactory = httpClientFactory; _configurationManager = configurationManager; _libraryMonitor = libraryMonitor; _fileSystem = fileSystem; @@ -155,25 +156,23 @@ namespace MediaBrowser.Providers.Manager /// <inheritdoc/> public async Task SaveImage(BaseItem item, string url, ImageType type, int? imageIndex, CancellationToken cancellationToken) { - using var response = await _httpClient.GetResponse(new HttpRequestOptions - { - CancellationToken = cancellationToken, - Url = url, - BufferContent = false - }).ConfigureAwait(false); + var httpClient = _httpClientFactory.CreateClient(); + using var response = await httpClient.GetAsync(url, cancellationToken).ConfigureAwait(false); + + var contentType = response.Content.Headers.ContentType.MediaType; // Workaround for tvheadend channel icons // TODO: Isolate this hack into the tvh plugin - if (string.IsNullOrEmpty(response.ContentType)) + if (string.IsNullOrEmpty(contentType)) { if (url.IndexOf("/imagecache/", StringComparison.OrdinalIgnoreCase) != -1) { - response.ContentType = "image/png"; + contentType = "image/png"; } } // thetvdb will sometimes serve a rubbish 404 html page with a 200 OK code, because reasons... - if (response.ContentType.Equals(MediaTypeNames.Text.Html, StringComparison.OrdinalIgnoreCase)) + if (contentType.Equals(MediaTypeNames.Text.Html, StringComparison.OrdinalIgnoreCase)) { throw new HttpException("Invalid image received.") { @@ -181,7 +180,14 @@ namespace MediaBrowser.Providers.Manager }; } - await SaveImage(item, response.Content, response.ContentType, type, imageIndex, cancellationToken).ConfigureAwait(false); + await using var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); + await SaveImage( + item, + stream, + contentType, + type, + imageIndex, + cancellationToken).ConfigureAwait(false); } /// <inheritdoc/> @@ -888,7 +894,7 @@ namespace MediaBrowser.Providers.Manager } /// <inheritdoc/> - public Task<HttpResponseInfo> GetSearchImage(string providerName, string url, CancellationToken cancellationToken) + public Task<HttpResponseMessage> GetSearchImage(string providerName, string url, CancellationToken cancellationToken) { var provider = _metadataProviders.OfType<IRemoteSearchProvider>().FirstOrDefault(i => string.Equals(i.Name, providerName, StringComparison.OrdinalIgnoreCase)); |
