aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/Books/GoogleBooksProvider.cs45
-rw-r--r--MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs14
-rw-r--r--MediaBrowser.Providers/Manager/ItemImageProvider.cs24
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs69
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs50
-rw-r--r--MediaBrowser.Providers/Manager/ProviderUtils.cs2
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj2
-rw-r--r--MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs16
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs2
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs27
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs2
-rw-r--r--MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs16
-rw-r--r--MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs11
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbProvider.cs32
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbSearch.cs100
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs3
-rw-r--r--MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs46
-rw-r--r--MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs11
-rw-r--r--MediaBrowser.Providers/Music/AudioDbArtistProvider.cs15
-rw-r--r--MediaBrowser.Providers/Music/FanArtArtistProvider.cs11
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs160
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs28
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbItemProvider.cs114
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbProvider.cs34
-rw-r--r--MediaBrowser.Providers/People/MovieDbPersonProvider.cs24
-rw-r--r--MediaBrowser.Providers/TV/DummySeasonProvider.cs4
-rw-r--r--MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs11
-rw-r--r--MediaBrowser.Providers/TV/MissingEpisodeProvider.cs4
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs7
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs14
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs57
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs27
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs116
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;
}
}