diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-10-20 12:16:56 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-10-20 12:16:56 -0400 |
| commit | 060215143ff62e4cf475a493e57c8607beca8640 (patch) | |
| tree | 1d1095525a83bb8183184db952d28556bc05f323 /MediaBrowser.Providers | |
| parent | 86226ff97c7d6dc4005c3bb1978861e948de1e20 (diff) | |
improve httpclient resource disposal
Diffstat (limited to 'MediaBrowser.Providers')
19 files changed, 434 insertions, 326 deletions
diff --git a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs index e271772cc..17b0646ed 100644 --- a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs +++ b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs @@ -179,7 +179,7 @@ namespace MediaBrowser.Providers.BoxSets RootObject mainResult = null; - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -187,7 +187,10 @@ namespace MediaBrowser.Providers.BoxSets }).ConfigureAwait(false)) { - mainResult = _json.DeserializeFromStream<RootObject>(json); + using (var json = response.Content) + { + mainResult = _json.DeserializeFromStream<RootObject>(json); + } } cancellationToken.ThrowIfCancellationRequested(); @@ -204,7 +207,7 @@ namespace MediaBrowser.Providers.BoxSets url += "&include_image_language=" + MovieDbProvider.GetImageLanguagesParam(language); } - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -212,7 +215,10 @@ namespace MediaBrowser.Providers.BoxSets }).ConfigureAwait(false)) { - mainResult = _json.DeserializeFromStream<RootObject>(json); + using (var json = response.Content) + { + mainResult = _json.DeserializeFromStream<RootObject>(json); + } } } } diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 28367662b..9dd5052da 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -153,16 +153,16 @@ namespace MediaBrowser.Providers.Manager public async Task SaveImage(IHasMetadata item, string url, ImageType type, int? imageIndex, CancellationToken cancellationToken) { - var response = await _httpClient.GetResponse(new HttpRequestOptions + using (var response = await _httpClient.GetResponse(new HttpRequestOptions { CancellationToken = cancellationToken, Url = url, BufferContent = false - }).ConfigureAwait(false); - - await SaveImage(item, response.Content, response.ContentType, type, imageIndex, cancellationToken) - .ConfigureAwait(false); + }).ConfigureAwait(false)) + { + await SaveImage(item, response.Content, response.ContentType, type, imageIndex, cancellationToken).ConfigureAwait(false); + } } public Task SaveImage(IHasMetadata item, Stream source, string mimeType, ImageType type, int? imageIndex, CancellationToken cancellationToken) diff --git a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs index 0214788ab..545c3baba 100644 --- a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs +++ b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs @@ -274,17 +274,20 @@ namespace MediaBrowser.Providers.Movies try { - using (var response = await _httpClient.Get(new HttpRequestOptions + using (var httpResponse = await _httpClient.SendAsync(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, BufferContent = true - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - using (var fileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + using (var response = httpResponse.Content) { - await response.CopyToAsync(fileStream).ConfigureAwait(false); + using (var fileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + { + await response.CopyToAsync(fileStream).ConfigureAwait(false); + } } } } diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs index 0a6067694..06adbffd7 100644 --- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs @@ -146,7 +146,7 @@ namespace MediaBrowser.Providers.Movies return _tmdbSettings; } - using (var json = await GetMovieDbResponse(new HttpRequestOptions + using (var response = await GetMovieDbResponse(new HttpRequestOptions { Url = string.Format(TmdbConfigUrl, ApiKey), CancellationToken = cancellationToken, @@ -154,9 +154,12 @@ namespace MediaBrowser.Providers.Movies }).ConfigureAwait(false)) { - _tmdbSettings = _jsonSerializer.DeserializeFromStream<TmdbSettingsResult>(json); + using (var json = response.Content) + { + _tmdbSettings = _jsonSerializer.DeserializeFromStream<TmdbSettingsResult>(json); - return _tmdbSettings; + return _tmdbSettings; + } } } @@ -339,7 +342,7 @@ namespace MediaBrowser.Providers.Movies try { - using (var json = await GetMovieDbResponse(new HttpRequestOptions + using (var response = await GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -349,7 +352,10 @@ namespace MediaBrowser.Providers.Movies }).ConfigureAwait(false)) { - mainResult = _jsonSerializer.DeserializeFromStream<CompleteMovieData>(json); + using (var json = response.Content) + { + mainResult = _jsonSerializer.DeserializeFromStream<CompleteMovieData>(json); + } } } catch (HttpException ex) @@ -381,7 +387,7 @@ namespace MediaBrowser.Providers.Movies url += "&include_image_language=" + GetImageLanguagesParam(language); } - using (var json = await GetMovieDbResponse(new HttpRequestOptions + using (var response = await GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -391,9 +397,12 @@ namespace MediaBrowser.Providers.Movies }).ConfigureAwait(false)) { - var englishResult = _jsonSerializer.DeserializeFromStream<CompleteMovieData>(json); + using (var json = response.Content) + { + var englishResult = _jsonSerializer.DeserializeFromStream<CompleteMovieData>(json); - mainResult.overview = englishResult.overview; + mainResult.overview = englishResult.overview; + } } } @@ -407,7 +416,7 @@ namespace MediaBrowser.Providers.Movies /// <summary> /// Gets the movie db response. /// </summary> - internal async Task<Stream> GetMovieDbResponse(HttpRequestOptions options) + internal async Task<HttpResponseInfo> GetMovieDbResponse(HttpRequestOptions options) { var delayTicks = (requestIntervalMs * 10000) - (DateTime.UtcNow.Ticks - _lastRequestTicks); var delayMs = Math.Min(delayTicks / 10000, requestIntervalMs); @@ -423,7 +432,7 @@ namespace MediaBrowser.Providers.Movies options.BufferContent = true; options.UserAgent = "Emby/" + _appHost.ApplicationVersion; - return await _httpClient.Get(options).ConfigureAwait(false); + return await _httpClient.SendAsync(options, "GET").ConfigureAwait(false); } /// <summary> diff --git a/MediaBrowser.Providers/Movies/MovieDbSearch.cs b/MediaBrowser.Providers/Movies/MovieDbSearch.cs index 595c0249f..673af5534 100644 --- a/MediaBrowser.Providers/Movies/MovieDbSearch.cs +++ b/MediaBrowser.Providers/Movies/MovieDbSearch.cs @@ -154,7 +154,7 @@ namespace MediaBrowser.Providers.Movies var url3 = string.Format(Search3, WebUtility.UrlEncode(name), ApiKey, language, type); - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url3, CancellationToken = cancellationToken, @@ -162,38 +162,41 @@ namespace MediaBrowser.Providers.Movies }).ConfigureAwait(false)) { - var searchResults = _json.DeserializeFromStream<TmdbMovieSearchResults>(json); + using (var json = response.Content) + { + var searchResults = _json.DeserializeFromStream<TmdbMovieSearchResults>(json); - var results = searchResults.results ?? new List<TmdbMovieSearchResult>(); + var results = searchResults.results ?? new List<TmdbMovieSearchResult>(); - return results - .Select(i => - { - var remoteResult = new RemoteSearchResult + return results + .Select(i => { - SearchProviderName = MovieDbProvider.Current.Name, - Name = i.title ?? i.name ?? i.original_title, - ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : baseImageUrl + i.poster_path - }; + var remoteResult = new RemoteSearchResult + { + SearchProviderName = MovieDbProvider.Current.Name, + Name = i.title ?? i.name ?? i.original_title, + ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : baseImageUrl + i.poster_path + }; - if (!string.IsNullOrWhiteSpace(i.release_date)) - { - DateTime r; + if (!string.IsNullOrWhiteSpace(i.release_date)) + { + DateTime r; // These dates are always in this exact format if (DateTime.TryParseExact(i.release_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out r)) - { - remoteResult.PremiereDate = r.ToUniversalTime(); - remoteResult.ProductionYear = remoteResult.PremiereDate.Value.Year; + { + remoteResult.PremiereDate = r.ToUniversalTime(); + remoteResult.ProductionYear = remoteResult.PremiereDate.Value.Year; + } } - } - remoteResult.SetProviderId(MetadataProviders.Tmdb, i.id.ToString(EnUs)); + remoteResult.SetProviderId(MetadataProviders.Tmdb, i.id.ToString(EnUs)); - return remoteResult; + return remoteResult; - }) - .ToList(); + }) + .ToList(); + } } } @@ -206,7 +209,7 @@ namespace MediaBrowser.Providers.Movies var url3 = string.Format(Search3, WebUtility.UrlEncode(name), ApiKey, language, "tv"); - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url3, CancellationToken = cancellationToken, @@ -214,38 +217,41 @@ namespace MediaBrowser.Providers.Movies }).ConfigureAwait(false)) { - var searchResults = _json.DeserializeFromStream<TmdbTvSearchResults>(json); + using (var json = response.Content) + { + var searchResults = _json.DeserializeFromStream<TmdbTvSearchResults>(json); - var results = searchResults.results ?? new List<TvResult>(); + var results = searchResults.results ?? new List<TvResult>(); - return results - .Select(i => - { - var remoteResult = new RemoteSearchResult + return results + .Select(i => { - SearchProviderName = MovieDbProvider.Current.Name, - Name = i.name ?? i.original_name, - ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : baseImageUrl + i.poster_path - }; + var remoteResult = new RemoteSearchResult + { + SearchProviderName = MovieDbProvider.Current.Name, + Name = i.name ?? i.original_name, + ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : baseImageUrl + i.poster_path + }; - if (!string.IsNullOrWhiteSpace(i.first_air_date)) - { - DateTime r; + if (!string.IsNullOrWhiteSpace(i.first_air_date)) + { + DateTime r; // These dates are always in this exact format if (DateTime.TryParseExact(i.first_air_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out r)) - { - remoteResult.PremiereDate = r.ToUniversalTime(); - remoteResult.ProductionYear = remoteResult.PremiereDate.Value.Year; + { + remoteResult.PremiereDate = r.ToUniversalTime(); + remoteResult.ProductionYear = remoteResult.PremiereDate.Value.Year; + } } - } - remoteResult.SetProviderId(MetadataProviders.Tmdb, i.id.ToString(EnUs)); + remoteResult.SetProviderId(MetadataProviders.Tmdb, i.id.ToString(EnUs)); - return remoteResult; + return remoteResult; - }) - .ToList(); + }) + .ToList(); + } } } diff --git a/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs b/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs index 80f122402..1082685a8 100644 --- a/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs @@ -161,16 +161,19 @@ namespace MediaBrowser.Providers.Music _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); - using (var response = await _httpClient.Get(new HttpRequestOptions + using (var httpResponse = await _httpClient.SendAsync(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + using (var response = httpResponse.Content) { - await response.CopyToAsync(xmlFileStream).ConfigureAwait(false); + using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + { + await response.CopyToAsync(xmlFileStream).ConfigureAwait(false); + } } } } diff --git a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs index d8a7dbc04..66d688959 100644 --- a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs +++ b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs @@ -147,19 +147,22 @@ namespace MediaBrowser.Providers.Music var path = GetArtistInfoPath(_config.ApplicationPaths, musicBrainzId); - using (var response = await _httpClient.Get(new HttpRequestOptions + using (var httpResponse = await _httpClient.SendAsync(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, BufferContent = true - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); - - using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + using (var response = httpResponse.Content) { - await response.CopyToAsync(xmlFileStream).ConfigureAwait(false); + _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); + + using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + { + await response.CopyToAsync(xmlFileStream).ConfigureAwait(false); + } } } } diff --git a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs index 6094fd26e..c06ee9d73 100644 --- a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs +++ b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs @@ -251,17 +251,20 @@ namespace MediaBrowser.Providers.Music try { - using (var response = await _httpClient.Get(new HttpRequestOptions + using (var httpResponse = await _httpClient.SendAsync(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, BufferContent = true - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - using (var saveFileStream = _fileSystem.GetFileStream(jsonPath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + using (var response = httpResponse.Content) { - await response.CopyToAsync(saveFileStream).ConfigureAwait(false); + using (var saveFileStream = _fileSystem.GetFileStream(jsonPath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + { + await response.CopyToAsync(saveFileStream).ConfigureAwait(false); + } } } } diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs index a35fd696a..b54d14935 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs @@ -83,9 +83,12 @@ namespace MediaBrowser.Providers.Music if (!string.IsNullOrWhiteSpace(url)) { - using (var stream = await GetMusicBrainzResponse(url, isNameSearch, forceMusicBrainzProper, cancellationToken).ConfigureAwait(false)) + using (var response = await GetMusicBrainzResponse(url, isNameSearch, forceMusicBrainzProper, cancellationToken).ConfigureAwait(false)) { - return GetResultsFromResponse(stream); + using (var stream = response.Content) + { + return GetResultsFromResponse(stream); + } } } @@ -226,19 +229,22 @@ namespace MediaBrowser.Providers.Music WebUtility.UrlEncode(albumName), artistId); - using (var stream = await GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false)) + using (var response = await GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false)) { - using (var oReader = new StreamReader(stream, Encoding.UTF8)) + using (var stream = response.Content) { - var settings = _xmlSettings.Create(false); + using (var oReader = new StreamReader(stream, Encoding.UTF8)) + { + var settings = _xmlSettings.Create(false); - settings.CheckCharacters = false; - settings.IgnoreProcessingInstructions = true; - settings.IgnoreComments = true; + settings.CheckCharacters = false; + settings.IgnoreProcessingInstructions = true; + settings.IgnoreComments = true; - using (var reader = XmlReader.Create(oReader, settings)) - { - return ReleaseResult.Parse(reader).FirstOrDefault(); + using (var reader = XmlReader.Create(oReader, settings)) + { + return ReleaseResult.Parse(reader).FirstOrDefault(); + } } } } @@ -250,19 +256,22 @@ namespace MediaBrowser.Providers.Music WebUtility.UrlEncode(albumName), WebUtility.UrlEncode(artistName)); - using (var stream = await GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false)) + using (var response = await GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false)) { - using (var oReader = new StreamReader(stream, Encoding.UTF8)) + using (var stream = response.Content) { - var settings = _xmlSettings.Create(false); + using (var oReader = new StreamReader(stream, Encoding.UTF8)) + { + var settings = _xmlSettings.Create(false); - settings.CheckCharacters = false; - settings.IgnoreProcessingInstructions = true; - settings.IgnoreComments = true; + settings.CheckCharacters = false; + settings.IgnoreProcessingInstructions = true; + settings.IgnoreComments = true; - using (var reader = XmlReader.Create(oReader, settings)) - { - return ReleaseResult.Parse(reader).FirstOrDefault(); + using (var reader = XmlReader.Create(oReader, settings)) + { + return ReleaseResult.Parse(reader).FirstOrDefault(); + } } } } @@ -431,23 +440,26 @@ namespace MediaBrowser.Providers.Music { var url = string.Format("/ws/2/release?release-group={0}", releaseGroupId); - using (var stream = await GetMusicBrainzResponse(url, true, true, cancellationToken).ConfigureAwait(false)) + using (var response = await GetMusicBrainzResponse(url, true, true, cancellationToken).ConfigureAwait(false)) { - using (var oReader = new StreamReader(stream, Encoding.UTF8)) + using (var stream = response.Content) { - var settings = _xmlSettings.Create(false); - - settings.CheckCharacters = false; - settings.IgnoreProcessingInstructions = true; - settings.IgnoreComments = true; - - using (var reader = XmlReader.Create(oReader, settings)) + using (var oReader = new StreamReader(stream, Encoding.UTF8)) { - var result = ReleaseResult.Parse(reader).FirstOrDefault(); + var settings = _xmlSettings.Create(false); + + settings.CheckCharacters = false; + settings.IgnoreProcessingInstructions = true; + settings.IgnoreComments = true; - if (result != null) + using (var reader = XmlReader.Create(oReader, settings)) { - return result.ReleaseId; + var result = ReleaseResult.Parse(reader).FirstOrDefault(); + + if (result != null) + { + return result.ReleaseId; + } } } } @@ -466,53 +478,56 @@ namespace MediaBrowser.Providers.Music { var url = string.Format("/ws/2/release-group/?query=reid:{0}", releaseEntryId); - using (var stream = await GetMusicBrainzResponse(url, false, cancellationToken).ConfigureAwait(false)) + using (var response = await GetMusicBrainzResponse(url, false, cancellationToken).ConfigureAwait(false)) { - using (var oReader = new StreamReader(stream, Encoding.UTF8)) + using (var stream = response.Content) { - var settings = _xmlSettings.Create(false); - - settings.CheckCharacters = false; - settings.IgnoreProcessingInstructions = true; - settings.IgnoreComments = true; - - using (var reader = XmlReader.Create(oReader, settings)) + using (var oReader = new StreamReader(stream, Encoding.UTF8)) { - reader.MoveToContent(); - reader.Read(); + var settings = _xmlSettings.Create(false); - // Loop through each element - while (!reader.EOF && reader.ReadState == ReadState.Interactive) + settings.CheckCharacters = false; + settings.IgnoreProcessingInstructions = true; + settings.IgnoreComments = true; + + using (var reader = XmlReader.Create(oReader, settings)) { - if (reader.NodeType == XmlNodeType.Element) + reader.MoveToContent(); + reader.Read(); + + // Loop through each element + while (!reader.EOF && reader.ReadState == ReadState.Interactive) { - switch (reader.Name) + if (reader.NodeType == XmlNodeType.Element) { - case "release-group-list": - { - if (reader.IsEmptyElement) + switch (reader.Name) + { + case "release-group-list": { - reader.Read(); - continue; + if (reader.IsEmptyElement) + { + reader.Read(); + continue; + } + using (var subReader = reader.ReadSubtree()) + { + return GetFirstReleaseGroupId(subReader); + } } - using (var subReader = reader.ReadSubtree()) + default: { - return GetFirstReleaseGroupId(subReader); + reader.Skip(); + break; } - } - default: - { - reader.Skip(); - break; - } + } + } + else + { + reader.Read(); } } - else - { - reader.Read(); - } + return null; } - return null; } } } @@ -598,11 +613,14 @@ namespace MediaBrowser.Providers.Music UserAgent = _appHost.Name + "/" + _appHost.ApplicationVersion }; - using (var stream = await _httpClient.Get(options).ConfigureAwait(false)) + using (var response = await _httpClient.SendAsync(options, "GET").ConfigureAwait(false)) { - var results = _json.DeserializeFromStream<List<MbzUrl>>(stream); + using (var stream = response.Content) + { + var results = _json.DeserializeFromStream<List<MbzUrl>>(stream); - list = results; + list = results; + } } _lastMbzUrlQueryTicks = DateTime.UtcNow.Ticks; } @@ -626,7 +644,7 @@ namespace MediaBrowser.Providers.Music return list; } - internal Task<Stream> GetMusicBrainzResponse(string url, bool isSearch, CancellationToken cancellationToken) + internal Task<HttpResponseInfo> GetMusicBrainzResponse(string url, bool isSearch, CancellationToken cancellationToken) { return GetMusicBrainzResponse(url, isSearch, false, cancellationToken); } @@ -634,7 +652,7 @@ namespace MediaBrowser.Providers.Music /// <summary> /// Gets the music brainz response. /// </summary> - internal async Task<Stream> GetMusicBrainzResponse(string url, bool isSearch, bool forceMusicBrainzProper, CancellationToken cancellationToken) + internal async Task<HttpResponseInfo> GetMusicBrainzResponse(string url, bool isSearch, bool forceMusicBrainzProper, CancellationToken cancellationToken) { var urlInfo = await GetMbzUrl(forceMusicBrainzProper).ConfigureAwait(false); var throttleMs = urlInfo.throttleMs; @@ -656,7 +674,7 @@ namespace MediaBrowser.Providers.Music BufferContent = throttleMs > 0 }; - return await _httpClient.Get(options).ConfigureAwait(false); + return await _httpClient.SendAsync(options, "GET").ConfigureAwait(false); } public int Order diff --git a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs index 06f60c8a3..f514791a7 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs @@ -35,10 +35,12 @@ namespace MediaBrowser.Providers.Music { var url = string.Format("/ws/2/artist/?query=arid:{0}", musicBrainzId); - using (var stream = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, false, cancellationToken) - .ConfigureAwait(false)) + using (var response = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, false, cancellationToken).ConfigureAwait(false)) { - return GetResultsFromResponse(stream); + using (var stream = response.Content) + { + return GetResultsFromResponse(stream); + } } } else @@ -48,13 +50,16 @@ namespace MediaBrowser.Providers.Music var url = String.Format("/ws/2/artist/?query=artist:\"{0}\"", UrlEncode(nameToSearch)); - using (var stream = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false)) + using (var response = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false)) { - var results = GetResultsFromResponse(stream); - - if (results.Count > 0) + using (var stream = response.Content) { - return results; + var results = GetResultsFromResponse(stream); + + if (results.Count > 0) + { + return results; + } } } @@ -63,9 +68,12 @@ namespace MediaBrowser.Providers.Music // Try again using the search with accent characters url url = String.Format("/ws/2/artist/?query=artistaccent:\"{0}\"", UrlEncode(nameToSearch)); - using (var stream = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false)) + using (var response = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false)) { - return GetResultsFromResponse(stream); + using (var stream = response.Content) + { + return GetResultsFromResponse(stream); + } } } } diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs index bab1374c2..c1b98dfbf 100644 --- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs @@ -126,65 +126,68 @@ namespace MediaBrowser.Providers.Omdb var url = OmdbProvider.GetOmdbUrl(urlQuery, cancellationToken); - using (var stream = await OmdbProvider.GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false)) + using (var response = await OmdbProvider.GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false)) { - var resultList = new List<SearchResult>(); - - if (isSearch) + using (var stream = response.Content) { - var searchResultList = _jsonSerializer.DeserializeFromStream<SearchResultList>(stream); - if (searchResultList != null && searchResultList.Search != null) - { - resultList.AddRange(searchResultList.Search); - } - } - else - { - var result = _jsonSerializer.DeserializeFromStream<SearchResult>(stream); - if (string.Equals(result.Response, "true", StringComparison.OrdinalIgnoreCase)) - { - resultList.Add(result); - } - } + var resultList = new List<SearchResult>(); - return resultList.Select(result => - { - var item = new RemoteSearchResult + if (isSearch) { - IndexNumber = searchInfo.IndexNumber, - Name = result.Title, - ParentIndexNumber = searchInfo.ParentIndexNumber, - SearchProviderName = Name - }; - - if (episodeSearchInfo != null && episodeSearchInfo.IndexNumberEnd.HasValue) - { - item.IndexNumberEnd = episodeSearchInfo.IndexNumberEnd.Value; - } - - item.SetProviderId(MetadataProviders.Imdb, result.imdbID); - - int parsedYear; - if (result.Year.Length > 0 - && int.TryParse(result.Year.Substring(0, Math.Min(result.Year.Length, 4)), NumberStyles.Any, CultureInfo.InvariantCulture, out parsedYear)) - { - item.ProductionYear = parsedYear; + var searchResultList = _jsonSerializer.DeserializeFromStream<SearchResultList>(stream); + if (searchResultList != null && searchResultList.Search != null) + { + resultList.AddRange(searchResultList.Search); + } } - - DateTime released; - if (!string.IsNullOrEmpty(result.Released) - && DateTime.TryParse(result.Released, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out released)) + else { - item.PremiereDate = released; + var result = _jsonSerializer.DeserializeFromStream<SearchResult>(stream); + if (string.Equals(result.Response, "true", StringComparison.OrdinalIgnoreCase)) + { + resultList.Add(result); + } } - if (!string.IsNullOrWhiteSpace(result.Poster) && !string.Equals(result.Poster, "N/A", StringComparison.OrdinalIgnoreCase)) + return resultList.Select(result => { - item.ImageUrl = result.Poster; - } - - return item; - }); + var item = new RemoteSearchResult + { + IndexNumber = searchInfo.IndexNumber, + Name = result.Title, + ParentIndexNumber = searchInfo.ParentIndexNumber, + SearchProviderName = Name + }; + + if (episodeSearchInfo != null && episodeSearchInfo.IndexNumberEnd.HasValue) + { + item.IndexNumberEnd = episodeSearchInfo.IndexNumberEnd.Value; + } + + item.SetProviderId(MetadataProviders.Imdb, result.imdbID); + + int parsedYear; + if (result.Year.Length > 0 + && int.TryParse(result.Year.Substring(0, Math.Min(result.Year.Length, 4)), NumberStyles.Any, CultureInfo.InvariantCulture, out parsedYear)) + { + item.ProductionYear = parsedYear; + } + + DateTime released; + if (!string.IsNullOrEmpty(result.Released) + && DateTime.TryParse(result.Released, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out released)) + { + item.PremiereDate = released; + } + + if (!string.IsNullOrWhiteSpace(result.Poster) && !string.Equals(result.Poster, "N/A", StringComparison.OrdinalIgnoreCase)) + { + item.ImageUrl = result.Poster; + } + + return item; + }); + } } } diff --git a/MediaBrowser.Providers/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Omdb/OmdbProvider.cs index c481bf0e9..2cac44944 100644 --- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs @@ -301,11 +301,14 @@ namespace MediaBrowser.Providers.Omdb var url = GetOmdbUrl(string.Format("i={0}&plot=short&tomatoes=true&r=json", imdbParam), cancellationToken); - using (var stream = await GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false)) + using (var response = await GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false)) { - var rootObject = _jsonSerializer.DeserializeFromStream<RootObject>(stream); - _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); - _jsonSerializer.SerializeToFile(rootObject, path); + using (var stream = response.Content) + { + var rootObject = _jsonSerializer.DeserializeFromStream<RootObject>(stream); + _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); + _jsonSerializer.SerializeToFile(rootObject, path); + } } return path; @@ -335,25 +338,28 @@ namespace MediaBrowser.Providers.Omdb var url = GetOmdbUrl(string.Format("i={0}&season={1}&detail=full", imdbParam, seasonId), cancellationToken); - using (var stream = await GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false)) + using (var response = await GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false)) { - var rootObject = _jsonSerializer.DeserializeFromStream<SeasonRootObject>(stream); - _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); - _jsonSerializer.SerializeToFile(rootObject, path); + using (var stream = response.Content) + { + var rootObject = _jsonSerializer.DeserializeFromStream<SeasonRootObject>(stream); + _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); + _jsonSerializer.SerializeToFile(rootObject, path); + } } return path; } - public static Task<Stream> GetOmdbResponse(IHttpClient httpClient, string url, CancellationToken cancellationToken) + public static Task<HttpResponseInfo> GetOmdbResponse(IHttpClient httpClient, string url, CancellationToken cancellationToken) { - return httpClient.Get(new HttpRequestOptions + return httpClient.SendAsync(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, BufferContent = true, EnableDefaultUserAgent = true - }); + }, "GET"); } internal string GetDataFilePath(string imdbId) diff --git a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs index 9aeaa8d1f..c921df61c 100644 --- a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs +++ b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs @@ -91,7 +91,7 @@ namespace MediaBrowser.Providers.People var url = string.Format(@"https://api.themoviedb.org/3/search/person?api_key={1}&query={0}", WebUtility.UrlEncode(searchInfo.Name), MovieDbProvider.ApiKey); - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -99,10 +99,13 @@ namespace MediaBrowser.Providers.People }).ConfigureAwait(false)) { - var result = _jsonSerializer.DeserializeFromStream<PersonSearchResults>(json) ?? - new PersonSearchResults(); + using (var json = response.Content) + { + var result = _jsonSerializer.DeserializeFromStream<PersonSearchResults>(json) ?? + new PersonSearchResults(); - return result.Results.Select(i => GetSearchResult(i, tmdbImageUrl)); + return result.Results.Select(i => GetSearchResult(i, tmdbImageUrl)); + } } } @@ -223,7 +226,7 @@ namespace MediaBrowser.Providers.People var url = string.Format(@"https://api.themoviedb.org/3/person/{1}?api_key={0}&append_to_response=credits,images,external_ids", MovieDbProvider.ApiKey, id); - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -231,11 +234,14 @@ namespace MediaBrowser.Providers.People }).ConfigureAwait(false)) { - _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(dataFilePath)); - - using (var fs = _fileSystem.GetFileStream(dataFilePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + using (var json = response.Content) { - await json.CopyToAsync(fs).ConfigureAwait(false); + _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(dataFilePath)); + + using (var fs = _fileSystem.GetFileStream(dataFilePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + { + await json.CopyToAsync(fs).ConfigureAwait(false); + } } } } diff --git a/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs b/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs index 583e5900d..33bf1a7c2 100644 --- a/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs @@ -316,17 +316,20 @@ namespace MediaBrowser.Providers.TV try { - using (var response = await _httpClient.Get(new HttpRequestOptions + using (var httpResponse = await _httpClient.SendAsync(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, BufferContent = true - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - using (var fileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + using (var response = httpResponse.Content) { - await response.CopyToAsync(fileStream).ConfigureAwait(false); + using (var fileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + { + await response.CopyToAsync(fileStream).ConfigureAwait(false); + } } } } diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs index 5ca2d5518..b19936480 100644 --- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs +++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs @@ -125,7 +125,7 @@ namespace MediaBrowser.Providers.TV cancellationToken.ThrowIfCancellationRequested(); - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -133,7 +133,10 @@ namespace MediaBrowser.Providers.TV }).ConfigureAwait(false)) { - return _jsonSerializer.DeserializeFromStream<RootObject>(json); + using (var json = response.Content) + { + return _jsonSerializer.DeserializeFromStream<RootObject>(json); + } } } diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs index ac4523788..0c4c2d9ab 100644 --- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs +++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs @@ -214,7 +214,7 @@ namespace MediaBrowser.Providers.TV cancellationToken.ThrowIfCancellationRequested(); - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -222,7 +222,10 @@ namespace MediaBrowser.Providers.TV }).ConfigureAwait(false)) { - return _jsonSerializer.DeserializeFromStream<RootObject>(json); + using (var json = response.Content) + { + return _jsonSerializer.DeserializeFromStream<RootObject>(json); + } } } diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs index 72745a9c3..08099179c 100644 --- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs @@ -352,7 +352,7 @@ namespace MediaBrowser.Providers.TV RootObject mainResult; - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -360,11 +360,14 @@ namespace MediaBrowser.Providers.TV }).ConfigureAwait(false)) { - mainResult = _jsonSerializer.DeserializeFromStream<RootObject>(json); - - if (!string.IsNullOrEmpty(language)) + using (var json = response.Content) { - mainResult.ResultLanguage = language; + mainResult = _jsonSerializer.DeserializeFromStream<RootObject>(json); + + if (!string.IsNullOrEmpty(language)) + { + mainResult.ResultLanguage = language; + } } } @@ -386,7 +389,7 @@ namespace MediaBrowser.Providers.TV url += "&include_image_language=" + MovieDbProvider.GetImageLanguagesParam(language); } - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -394,10 +397,13 @@ namespace MediaBrowser.Providers.TV }).ConfigureAwait(false)) { - var englishResult = _jsonSerializer.DeserializeFromStream<RootObject>(json); + using (var json = response.Content) + { + var englishResult = _jsonSerializer.DeserializeFromStream<RootObject>(json); - mainResult.overview = englishResult.overview; - mainResult.ResultLanguage = "en"; + mainResult.overview = englishResult.overview; + mainResult.ResultLanguage = "en"; + } } } @@ -449,7 +455,7 @@ namespace MediaBrowser.Providers.TV MovieDbProvider.ApiKey, externalSource); - using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions + using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, @@ -457,27 +463,30 @@ namespace MediaBrowser.Providers.TV }).ConfigureAwait(false)) { - var result = _jsonSerializer.DeserializeFromStream<MovieDbSearch.ExternalIdLookupResult>(json); - - if (result != null && result.tv_results != null) + using (var json = response.Content) { - var tv = result.tv_results.FirstOrDefault(); + var result = _jsonSerializer.DeserializeFromStream<MovieDbSearch.ExternalIdLookupResult>(json); - if (tv != null) + if (result != null && result.tv_results != null) { - var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); - var tmdbImageUrl = tmdbSettings.images.secure_base_url + "original"; + var tv = result.tv_results.FirstOrDefault(); - var remoteResult = new RemoteSearchResult + if (tv != null) { - Name = tv.name, - SearchProviderName = Name, - ImageUrl = string.IsNullOrWhiteSpace(tv.poster_path) ? null : tmdbImageUrl + tv.poster_path - }; + var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); + var tmdbImageUrl = tmdbSettings.images.secure_base_url + "original"; - remoteResult.SetProviderId(MetadataProviders.Tmdb, tv.id.ToString(_usCulture)); + var remoteResult = new RemoteSearchResult + { + Name = tv.name, + SearchProviderName = Name, + ImageUrl = string.IsNullOrWhiteSpace(tv.poster_path) ? null : tmdbImageUrl + tv.poster_path + }; - return remoteResult; + remoteResult.SetProviderId(MetadataProviders.Tmdb, tv.id.ToString(_usCulture)); + + return remoteResult; + } } } } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs index 30d2691e3..ebcd61a6e 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs @@ -142,16 +142,20 @@ namespace MediaBrowser.Providers.TV if (string.IsNullOrEmpty(lastUpdateTime)) { // First get tvdb server time - using (var stream = await _httpClient.Get(new HttpRequestOptions + using (var response = await _httpClient.SendAsync(new HttpRequestOptions { Url = ServerTimeUrl, CancellationToken = cancellationToken, EnableHttpCompression = true, BufferContent = false - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - newUpdateTime = GetUpdateTime(stream); + // First get tvdb server time + using (var stream = response.Content) + { + newUpdateTime = GetUpdateTime(stream); + } } existingDirectories.AddRange(missingSeries); @@ -238,23 +242,26 @@ namespace MediaBrowser.Providers.TV private async Task<Tuple<IEnumerable<string>, string>> GetSeriesIdsToUpdate(IEnumerable<string> existingSeriesIds, string lastUpdateTime, CancellationToken cancellationToken) { // First get last time - using (var stream = await _httpClient.Get(new HttpRequestOptions + using (var response = await _httpClient.SendAsync(new HttpRequestOptions { Url = string.Format(UpdatesUrl, lastUpdateTime), CancellationToken = cancellationToken, EnableHttpCompression = true, BufferContent = false - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - var data = GetUpdatedSeriesIdList(stream); + using (var stream = response.Content) + { + var data = GetUpdatedSeriesIdList(stream); - var existingDictionary = existingSeriesIds.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); + var existingDictionary = existingSeriesIds.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); - var seriesList = data.Item1 - .Where(i => !string.IsNullOrWhiteSpace(i) && existingDictionary.ContainsKey(i)); + var seriesList = data.Item1 + .Where(i => !string.IsNullOrWhiteSpace(i) && existingDictionary.ContainsKey(i)); - return new Tuple<IEnumerable<string>, string>(seriesList, data.Item2); + return new Tuple<IEnumerable<string>, string>(seriesList, data.Item2); + } } } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs index 812d80b3b..846ab9558 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs @@ -216,24 +216,27 @@ namespace MediaBrowser.Providers.TV var url = string.Format(SeriesGetZip, TVUtils.TvdbApiKey, seriesId, NormalizeLanguage(preferredMetadataLanguage)); - using (var zipStream = await _httpClient.Get(new HttpRequestOptions + using (var response = await _httpClient.SendAsync(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, BufferContent = false - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - // Delete existing files - DeleteXmlFiles(seriesDataPath); - - // Copy to memory stream because we need a seekable stream - using (var ms = _memoryStreamProvider.CreateNew()) + using (var zipStream = response.Content) { - await zipStream.CopyToAsync(ms).ConfigureAwait(false); + // Delete existing files + DeleteXmlFiles(seriesDataPath); + + // Copy to memory stream because we need a seekable stream + using (var ms = _memoryStreamProvider.CreateNew()) + { + await zipStream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - _zipClient.ExtractAllFromZip(ms, seriesDataPath, true); + ms.Position = 0; + _zipClient.ExtractAllFromZip(ms, seriesDataPath, true); + } } } @@ -260,15 +263,18 @@ namespace MediaBrowser.Providers.TV { var url = string.Format(GetSeriesByImdbId, id, NormalizeLanguage(language)); - using (var result = await _httpClient.Get(new HttpRequestOptions + using (var response = await _httpClient.SendAsync(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, BufferContent = false - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - return FindSeriesId(result); + using (var result = response.Content) + { + return FindSeriesId(result); + } } } @@ -514,64 +520,67 @@ namespace MediaBrowser.Providers.TV var comparableName = GetComparableName(name); - using (var stream = await _httpClient.Get(new HttpRequestOptions + using (var response = await _httpClient.SendAsync(new HttpRequestOptions { Url = url, CancellationToken = cancellationToken, BufferContent = false - }).ConfigureAwait(false)) + }, "GET").ConfigureAwait(false)) { - var settings = _xmlSettings.Create(false); + using (var stream = response.Content) + { + var settings = _xmlSettings.Create(false); - settings.CheckCharacters = false; - settings.IgnoreProcessingInstructions = true; - settings.IgnoreComments = true; + settings.CheckCharacters = false; + settings.IgnoreProcessingInstructions = true; + settings.IgnoreComments = true; - using (var streamReader = new StreamReader(stream, Encoding.UTF8)) - { - // Use XmlReader for best performance - using (var reader = XmlReader.Create(streamReader, settings)) + using (var streamReader = new StreamReader(stream, Encoding.UTF8)) { - reader.MoveToContent(); - reader.Read(); - - // Loop through each element - while (!reader.EOF && reader.ReadState == ReadState.Interactive) + // Use XmlReader for best performance + using (var reader = XmlReader.Create(streamReader, settings)) { - cancellationToken.ThrowIfCancellationRequested(); + reader.MoveToContent(); + reader.Read(); - if (reader.NodeType == XmlNodeType.Element) + // Loop through each element + while (!reader.EOF && reader.ReadState == ReadState.Interactive) { - switch (reader.Name) + cancellationToken.ThrowIfCancellationRequested(); + + if (reader.NodeType == XmlNodeType.Element) { - case "Series": - { - if (reader.IsEmptyElement) - { - reader.Read(); - continue; - } - using (var subtree = reader.ReadSubtree()) + switch (reader.Name) + { + case "Series": { - var searchResult = GetSeriesSearchResultFromSubTree(subtree, comparableName); - if (searchResult != null) + if (reader.IsEmptyElement) { - searchResult.SearchProviderName = Name; - searchResults.Add(searchResult); + reader.Read(); + continue; } + using (var subtree = reader.ReadSubtree()) + { + var searchResult = GetSeriesSearchResultFromSubTree(subtree, comparableName); + if (searchResult != null) + { + searchResult.SearchProviderName = Name; + searchResults.Add(searchResult); + } + } + break; } - break; - } - default: - reader.Skip(); - break; + default: + reader.Skip(); + break; + } + } + else + { + reader.Read(); } - } - else - { - reader.Read(); } } } |
