diff options
Diffstat (limited to 'MediaBrowser.Providers')
33 files changed, 598 insertions, 500 deletions
diff --git a/MediaBrowser.Providers/Books/GoogleBooksProvider.cs b/MediaBrowser.Providers/Books/GoogleBooksProvider.cs new file mode 100644 index 0000000000..7330b8c43e --- /dev/null +++ b/MediaBrowser.Providers/Books/GoogleBooksProvider.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Providers; + +namespace MediaBrowser.Providers.Books +{ + public class GoogleBooksProvider : IRemoteMetadataProvider<AudioBook, SongInfo> + { + public string Name => "Google Books"; + private readonly IHttpClient _httpClient; + + public GoogleBooksProvider(IHttpClient httpClient) + { + _httpClient = httpClient; + } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + return _httpClient.GetResponse(new HttpRequestOptions + { + CancellationToken = cancellationToken, + Url = url, + BufferContent = false + }); + } + + public async Task<MetadataResult<AudioBook>> GetMetadata(SongInfo info, CancellationToken cancellationToken) + { + return new MetadataResult<AudioBook>(); + } + + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SongInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + } +} diff --git a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs index e271772cca..17b0646eda 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/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs index 00fd54271c..4419b48cbb 100644 --- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs +++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs @@ -517,21 +517,11 @@ namespace MediaBrowser.Providers.Manager return true; } - if (libraryOptions.DownloadImagesInAdvance) - { - return false; - } - if (item.LocationType == LocationType.Remote || item.LocationType == LocationType.Virtual) { return true; } - if (!item.IsSaveLocalMetadataEnabled()) - { - return true; - } - if (item is IItemByName && !(item is MusicArtist)) { var hasDualAccess = item as IHasDualAccess; @@ -541,13 +531,17 @@ namespace MediaBrowser.Providers.Manager } } - switch (type) + if (libraryOptions.DownloadImagesInAdvance) { - case ImageType.Primary: - return true; - default: - return true; + return false; } + + //if (!item.IsSaveLocalMetadataEnabled()) + //{ + // return true; + //} + + return true; } private void SaveImageStub(IHasMetadata item, ImageType imageType, IEnumerable<string> urls) diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index b93f783418..af03e21b2d 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -13,6 +13,7 @@ using System.Threading.Tasks; using MediaBrowser.Model.IO; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Providers; +using MediaBrowser.Providers.MediaInfo; namespace MediaBrowser.Providers.Manager { @@ -47,17 +48,45 @@ namespace MediaBrowser.Providers.Manager var libraryOptions = LibraryManager.GetLibraryOptions((BaseItem)item); - if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None) + if (!requiresRefresh && libraryOptions.AutomaticRefreshIntervalDays > 0 && (DateTime.UtcNow - item.DateLastRefreshed).TotalDays >= libraryOptions.AutomaticRefreshIntervalDays) { - // TODO: If this returns true, should we instead just change metadata refresh mode to Full? - requiresRefresh = item.RequiresRefresh(); + requiresRefresh = true; } - if (!requiresRefresh && - libraryOptions.AutomaticRefreshIntervalDays > 0 && - (DateTime.UtcNow - item.DateLastRefreshed).TotalDays >= libraryOptions.AutomaticRefreshIntervalDays) + DateTime? newDateModified = null; + if (item.LocationType == LocationType.FileSystem) { - requiresRefresh = true; + var file = refreshOptions.DirectoryService.GetFile(item.Path); + if (file != null) + { + newDateModified = file.LastWriteTimeUtc; + if (item.EnableRefreshOnDateModifiedChange) + { + if (newDateModified != item.DateModified) + { + Logger.Debug("Date modified for {0}. Old date {1} new date {2} Id {3}", item.Path, item.DateModified, newDateModified, item.Id); + requiresRefresh = true; + } + } + + if (!requiresRefresh && item.SupportsLocalMetadata) + { + var video = item as Video; + + if (video != null && !video.IsPlaceHolder) + { + requiresRefresh = !video.SubtitleFiles + .SequenceEqual(SubtitleResolver.GetSubtitleFiles(video, refreshOptions.DirectoryService, FileSystem, false) + .OrderBy(i => i), StringComparer.OrdinalIgnoreCase); + } + } + } + } + + if (!requiresRefresh && refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None) + { + // TODO: If this returns true, should we instead just change metadata refresh mode to Full? + requiresRefresh = item.RequiresRefresh(); } var itemImageProvider = new ItemImageProvider(Logger, ProviderManager, ServerConfigurationManager, FileSystem); @@ -145,20 +174,9 @@ namespace MediaBrowser.Providers.Manager var beforeSaveResult = BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh, updateType); updateType = updateType | beforeSaveResult; - if (item.LocationType == LocationType.FileSystem) + if (newDateModified.HasValue) { - var file = refreshOptions.DirectoryService.GetFile(item.Path); - if (file != null) - { - var fileLastWriteTime = file.LastWriteTimeUtc; - if (item.EnableRefreshOnDateModifiedChange && fileLastWriteTime != item.DateModified) - { - Logger.Debug("Date modified for {0}. Old date {1} new date {2} Id {3}", item.Path, item.DateModified, fileLastWriteTime, item.Id); - requiresRefresh = true; - } - - item.DateModified = fileLastWriteTime; - } + item.DateModified = newDateModified.Value; } // Save if changes were made, or it's never been saved before @@ -204,7 +222,7 @@ namespace MediaBrowser.Providers.Manager LibraryManager.UpdatePeople(baseItem, result.People); await SavePeopleMetadata(result.People, libraryOptions, cancellationToken).ConfigureAwait(false); } - await result.Item.UpdateToRepository(reason, cancellationToken).ConfigureAwait(false); + result.Item.UpdateToRepository(reason, cancellationToken); } private async Task SavePeopleMetadata(List<PersonInfo> people, LibraryOptions libraryOptions, CancellationToken cancellationToken) @@ -238,7 +256,7 @@ namespace MediaBrowser.Providers.Manager if (saveEntity) { - await personEntity.UpdateToRepository(updateType, cancellationToken).ConfigureAwait(false); + personEntity.UpdateToRepository(updateType, cancellationToken); } } } @@ -453,6 +471,11 @@ namespace MediaBrowser.Providers.Manager return item is TItemType; } + public bool CanRefreshPrimary(Type type) + { + return type == typeof(TItemType); + } + protected virtual async Task<RefreshResult> RefreshWithProviders(MetadataResult<TItemType> metadata, TIdType id, MetadataRefreshOptions options, @@ -655,6 +678,8 @@ namespace MediaBrowser.Providers.Manager if (result.HasMetadata) { + result.Provider = provider.Name; + results.Add(result); refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataDownload; diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index c36d4cf63c..9dd5052dae 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -118,7 +118,29 @@ namespace MediaBrowser.Providers.Manager public Task<ItemUpdateType> RefreshSingleItem(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken) { - var service = _metadataServices.FirstOrDefault(i => i.CanRefresh(item)); + IMetadataService service = null; + var type = item.GetType(); + + foreach (var current in _metadataServices) + { + if (current.CanRefreshPrimary(type)) + { + service = current; + break; + } + } + + if (service == null) + { + foreach (var current in _metadataServices) + { + if (current.CanRefresh(item)) + { + service = current; + break; + } + } + } if (service != null) { @@ -131,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) @@ -452,6 +474,8 @@ namespace MediaBrowser.Providers.Manager GetPluginSummary<MusicAlbum>(), GetPluginSummary<MusicArtist>(), GetPluginSummary<Audio>(), + GetPluginSummary<AudioBook>(), + GetPluginSummary<AudioPodcast>(), GetPluginSummary<Genre>(), GetPluginSummary<Studio>(), GetPluginSummary<GameGenre>(), @@ -560,30 +584,20 @@ namespace MediaBrowser.Providers.Manager new MetadataOptions(); } - private Task _completedTask = Task.FromResult(true); /// <summary> /// Saves the metadata. /// </summary> - /// <param name="item">The item.</param> - /// <param name="updateType">Type of the update.</param> - /// <returns>Task.</returns> - public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType) + public void SaveMetadata(IHasMetadata item, ItemUpdateType updateType) { SaveMetadata(item, updateType, _savers); - return _completedTask; } /// <summary> /// Saves the metadata. /// </summary> - /// <param name="item">The item.</param> - /// <param name="updateType">Type of the update.</param> - /// <param name="savers">The savers.</param> - /// <returns>Task.</returns> - public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<string> savers) + public void SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<string> savers) { SaveMetadata(item, updateType, _savers.Where(i => savers.Contains(i.Name, StringComparer.OrdinalIgnoreCase))); - return _completedTask; } /// <summary> diff --git a/MediaBrowser.Providers/Manager/ProviderUtils.cs b/MediaBrowser.Providers/Manager/ProviderUtils.cs index 41612321b3..b727e13546 100644 --- a/MediaBrowser.Providers/Manager/ProviderUtils.cs +++ b/MediaBrowser.Providers/Manager/ProviderUtils.cs @@ -51,7 +51,7 @@ namespace MediaBrowser.Providers.Manager } } - if (replaceData || !target.CommunityRating.HasValue) + if (replaceData || !target.CommunityRating.HasValue || (source.CommunityRating.HasValue && string.Equals(sourceResult.Provider, "The Open Movie Database", StringComparison.OrdinalIgnoreCase))) { target.CommunityRating = source.CommunityRating; } diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index 65791ed102..ae44993507 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -41,6 +41,7 @@ <Compile Include="Books\AudioBookMetadataService.cs" /> <Compile Include="Books\AudioPodcastMetadataService.cs" /> <Compile Include="Books\BookMetadataService.cs" /> + <Compile Include="Books\GoogleBooksProvider.cs" /> <Compile Include="BoxSets\BoxSetMetadataService.cs" /> <Compile Include="BoxSets\MovieDbBoxSetImageProvider.cs" /> <Compile Include="BoxSets\MovieDbBoxSetProvider.cs" /> @@ -84,7 +85,6 @@ <Compile Include="Movies\MovieDbImageProvider.cs" /> <Compile Include="Movies\FanartMovieImageProvider.cs" /> <Compile Include="MusicGenres\MusicGenreMetadataService.cs" /> - <Compile Include="Music\AlbumImageFromSongProvider.cs" /> <Compile Include="Music\AlbumMetadataService.cs" /> <Compile Include="Music\ArtistMetadataService.cs" /> <Compile Include="Music\AudioDbAlbumImageProvider.cs" /> diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs index a4f2053a9d..3499d5d3f8 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs @@ -19,7 +19,7 @@ namespace MediaBrowser.Providers.MediaInfo /// <summary> /// Uses ffmpeg to create video images /// </summary> - public class AudioImageProvider : IDynamicImageProvider, IHasItemChangeMonitor + public class AudioImageProvider : IDynamicImageProvider { private readonly IMediaEncoder _mediaEncoder; private readonly IServerConfigurationManager _config; @@ -134,19 +134,5 @@ namespace MediaBrowser.Providers.MediaInfo return item.LocationType == LocationType.FileSystem && audio != null; } - - public bool HasChanged(IHasMetadata item, IDirectoryService directoryService) - { - if (item.EnableRefreshOnDateModifiedChange && !string.IsNullOrWhiteSpace(item.Path) && item.LocationType == LocationType.FileSystem) - { - var file = directoryService.GetFile(item.Path); - if (file != null && file.LastWriteTimeUtc != item.DateModified) - { - return true; - } - } - - return false; - } } } diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs index aa6e5ad316..cb0075b335 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs @@ -123,7 +123,7 @@ namespace MediaBrowser.Providers.MediaInfo audio.Name = data.Name; } - if (!audio.LockedFields.Contains(MetadataFields.Cast)) + if (audio.SupportsPeople && !audio.LockedFields.Contains(MetadataFields.Cast)) { var people = new List<PersonInfo>(); diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs index a9aa71bfa4..bce4219019 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs @@ -34,7 +34,6 @@ namespace MediaBrowser.Providers.MediaInfo ICustomMetadataProvider<Audio>, ICustomMetadataProvider<AudioPodcast>, ICustomMetadataProvider<AudioBook>, - IHasItemChangeMonitor, IHasOrder, IForcedProvider, IPreRefreshProvider @@ -180,32 +179,6 @@ namespace MediaBrowser.Providers.MediaInfo return prober.Probe(item, cancellationToken); } - public bool HasChanged(IHasMetadata item, IDirectoryService directoryService) - { - if (item.EnableRefreshOnDateModifiedChange && !string.IsNullOrWhiteSpace(item.Path) && item.LocationType == LocationType.FileSystem) - { - var file = directoryService.GetFile(item.Path); - if (file != null && file.LastWriteTimeUtc != item.DateModified) - { - return true; - } - } - - if (item.SupportsLocalMetadata) - { - var video = item as Video; - - if (video != null && !video.IsPlaceHolder) - { - return !video.SubtitleFiles - .SequenceEqual(SubtitleResolver.GetSubtitleFiles(video, directoryService, _fileSystem, false) - .OrderBy(i => i), StringComparer.OrdinalIgnoreCase); - } - } - - return false; - } - public int Order { get diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs index 64a485bc20..a6a363ffdf 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs @@ -248,7 +248,7 @@ namespace MediaBrowser.Providers.MediaInfo if (string.IsNullOrWhiteSpace(chapter.Name) || TimeSpan.TryParse(chapter.Name, out time)) { - chapter.Name = string.Format(_localization.GetLocalizedString("LabelChapterName"), index.ToString(CultureInfo.InvariantCulture)); + chapter.Name = string.Format(_localization.GetLocalizedString("ChapterNameValue"), index.ToString(CultureInfo.InvariantCulture)); } index++; } diff --git a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs index 9b0d29cf04..9fde9c70fa 100644 --- a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs @@ -16,7 +16,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Providers.MediaInfo { - public class VideoImageProvider : IDynamicImageProvider, IHasItemChangeMonitor, IHasOrder + public class VideoImageProvider : IDynamicImageProvider, IHasOrder { private readonly IMediaEncoder _mediaEncoder; private readonly ILogger _logger; @@ -149,19 +149,5 @@ namespace MediaBrowser.Providers.MediaInfo return 100; } } - - public bool HasChanged(IHasMetadata item, IDirectoryService directoryService) - { - if (item.EnableRefreshOnDateModifiedChange && !string.IsNullOrWhiteSpace(item.Path) && item.LocationType == LocationType.FileSystem) - { - var file = directoryService.GetFile(item.Path); - if (file != null && file.LastWriteTimeUtc != item.DateModified) - { - return true; - } - } - - return false; - } } } diff --git a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs index 0214788ab4..545c3baba6 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 fe798d4f0f..06adbffd7c 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> @@ -629,8 +638,7 @@ namespace MediaBrowser.Providers.Movies { get { - // After Omdb - return 1; + return 0; } } diff --git a/MediaBrowser.Providers/Movies/MovieDbSearch.cs b/MediaBrowser.Providers/Movies/MovieDbSearch.cs index 1c6157c03b..673af5534c 100644 --- a/MediaBrowser.Providers/Movies/MovieDbSearch.cs +++ b/MediaBrowser.Providers/Movies/MovieDbSearch.cs @@ -100,6 +100,12 @@ namespace MediaBrowser.Providers.Movies name = name.Replace("!", " "); name = name.Replace("?", " "); + var parenthIndex = name.IndexOf('('); + if (parenthIndex != -1) + { + name = name.Substring(0, parenthIndex); + } + name = name.Trim(); // Search again if the new name is different @@ -148,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, @@ -156,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(); + } } } @@ -200,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, @@ -208,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/Movies/MovieDbTrailerProvider.cs b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs index 36297914d4..6d1259d205 100644 --- a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs @@ -36,8 +36,7 @@ namespace MediaBrowser.Providers.Movies { get { - // After Omdb - return 1; + return 0; } } diff --git a/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs b/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs deleted file mode 100644 index 57e20b8526..0000000000 --- a/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs +++ /dev/null @@ -1,46 +0,0 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Providers.Music -{ - public class AlbumImageFromSongProvider : IDynamicImageProvider - { - public IEnumerable<ImageType> GetSupportedImages(IHasMetadata item) - { - return new List<ImageType> { ImageType.Primary }; - } - - public Task<DynamicImageResponse> GetImage(IHasMetadata item, ImageType type, CancellationToken cancellationToken) - { - var album = (MusicAlbum)item; - - var image = album.GetRecursiveChildren(i => !i.IsFolder) - .Select(i => i.GetImageInfo(type, 0)) - .FirstOrDefault(i => i != null && i.IsLocalFile); - - var imagePath = image == null ? null : image.Path; - - return Task.FromResult(new DynamicImageResponse - { - Path = imagePath, - HasImage = !string.IsNullOrEmpty(imagePath) - }); - } - - public string Name - { - get { return "Image Extractor"; } - } - - public bool Supports(IHasMetadata item) - { - return item is MusicAlbum; - } - } -} diff --git a/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs b/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs index 80f1224022..1082685a88 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 d8a7dbc041..66d6889595 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 6094fd26ec..c06ee9d738 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 a35fd696a3..b54d14935e 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 06f60c8a37..f514791a7a 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 e769c8cab2..c1b98dfbf8 100644 --- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs @@ -22,7 +22,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Providers.Omdb { public class OmdbItemProvider : IRemoteMetadataProvider<Series, SeriesInfo>, - IRemoteMetadataProvider<Movie, MovieInfo>, IRemoteMetadataProvider<Trailer, TrailerInfo> + IRemoteMetadataProvider<Movie, MovieInfo>, IRemoteMetadataProvider<Trailer, TrailerInfo>, IHasOrder { private readonly IJsonSerializer _jsonSerializer; private readonly IHttpClient _httpClient; @@ -41,6 +41,15 @@ namespace MediaBrowser.Providers.Omdb _configurationManager = configurationManager; } + public int Order + { + get + { + // After primary option + return 1; + } + } + public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken) { return GetSearchResults(searchInfo, "series", cancellationToken); @@ -117,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) - { - 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); - } - } - - return resultList.Select(result => + using (var stream = response.Content) { - var item = new RemoteSearchResult - { - IndexNumber = searchInfo.IndexNumber, - Name = result.Title, - ParentIndexNumber = searchInfo.ParentIndexNumber, - SearchProviderName = Name - }; + var resultList = new List<SearchResult>(); - if (episodeSearchInfo != null && episodeSearchInfo.IndexNumberEnd.HasValue) + if (isSearch) { - item.IndexNumberEnd = episodeSearchInfo.IndexNumberEnd.Value; + var searchResultList = _jsonSerializer.DeserializeFromStream<SearchResultList>(stream); + if (searchResultList != null && searchResultList.Search != null) + { + resultList.AddRange(searchResultList.Search); + } } - - 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)) + else { - item.ProductionYear = parsedYear; + var result = _jsonSerializer.DeserializeFromStream<SearchResult>(stream); + if (string.Equals(result.Response, "true", StringComparison.OrdinalIgnoreCase)) + { + resultList.Add(result); + } } - DateTime released; - if (!string.IsNullOrEmpty(result.Released) - && DateTime.TryParse(result.Released, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out released)) + return resultList.Select(result => { - item.PremiereDate = released; - } - - if (!string.IsNullOrWhiteSpace(result.Poster) && !string.Equals(result.Poster, "N/A", StringComparison.OrdinalIgnoreCase)) - { - 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 e2043faaf3..2cac449446 100644 --- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs @@ -46,7 +46,7 @@ namespace MediaBrowser.Providers.Omdb var result = await GetRootObject(imdbId, cancellationToken).ConfigureAwait(false); // Only take the name and rating if the user's language is set to english, since Omdb has no localization - if (string.Equals(language, "en", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(language, "en", StringComparison.OrdinalIgnoreCase) || _configurationManager.Configuration.EnableNewOmdbSupport) { item.Name = result.Title; @@ -153,7 +153,7 @@ namespace MediaBrowser.Providers.Omdb } // Only take the name and rating if the user's language is set to english, since Omdb has no localization - if (string.Equals(language, "en", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(language, "en", StringComparison.OrdinalIgnoreCase) || _configurationManager.Configuration.EnableNewOmdbSupport) { item.Name = result.Title; @@ -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) @@ -389,7 +395,7 @@ namespace MediaBrowser.Providers.Omdb { T item = itemResult.Item; - var isConfiguredForEnglish = IsConfiguredForEnglish(item); + var isConfiguredForEnglish = IsConfiguredForEnglish(item) || _configurationManager.Configuration.EnableNewOmdbSupport; // Grab series genres because imdb data is better than tvdb. Leave movies alone // But only do it if english is the preferred language because this data will not be localized diff --git a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs index 9aeaa8d1f1..c921df61ca 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/DummySeasonProvider.cs b/MediaBrowser.Providers/TV/DummySeasonProvider.cs index de51126eec..771570cbc7 100644 --- a/MediaBrowser.Providers/TV/DummySeasonProvider.cs +++ b/MediaBrowser.Providers/TV/DummySeasonProvider.cs @@ -78,7 +78,7 @@ namespace MediaBrowser.Providers.TV else if (existingSeason.IsVirtualItem) { existingSeason.IsVirtualItem = false; - await existingSeason.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false); + existingSeason.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken); } } @@ -97,7 +97,7 @@ namespace MediaBrowser.Providers.TV else if (existingSeason.IsVirtualItem) { existingSeason.IsVirtualItem = false; - await existingSeason.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false); + existingSeason.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken); } } diff --git a/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs b/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs index 583e5900de..33bf1a7c28 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/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs index 44e3cff6a1..b68e6e4a9f 100644 --- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs @@ -350,8 +350,6 @@ namespace MediaBrowser.Providers.TV foreach (var episodeToRemove in episodesToRemove.Select(e => e.Episode)) { - _logger.Info("Removing missing/unaired episode {0} {1}x{2}", episodeToRemove.Series.Name, episodeToRemove.ParentIndexNumber, episodeToRemove.IndexNumber); - await episodeToRemove.Delete(new DeleteOptions { DeleteFileLocation = true @@ -418,8 +416,6 @@ namespace MediaBrowser.Providers.TV foreach (var seasonToRemove in seasonsToRemove) { - _logger.Info("Removing virtual season {0} {1}", seasonToRemove.Series.Name, seasonToRemove.IndexNumber); - await seasonToRemove.Delete(new DeleteOptions { DeleteFileLocation = true diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs index 5ca2d5518e..b199364807 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 528ba3d0c4..0c4c2d9ab5 100644 --- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs +++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs @@ -60,7 +60,12 @@ namespace MediaBrowser.Providers.TV result.HasMetadata = true; result.Item = new Season(); - result.Item.Name = seasonInfo.name; + + // Don't use moviedb season names for now until if/when we have field-level configuration + //result.Item.Name = seasonInfo.name; + + result.Item.Name = info.Name; + result.Item.IndexNumber = seasonNumber; result.Item.Overview = seasonInfo.overview; @@ -209,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, @@ -217,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 72745a9c3a..08099179ce 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 30d2691e3b..ebcd61a6e7 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 af18f5f0be..846ab9558a 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(); } } } @@ -1631,8 +1640,7 @@ namespace MediaBrowser.Providers.TV { get { - // After Omdb - return 1; + return 0; } } |
