aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2015-09-02 11:50:00 -0400
committerLuke <luke.pulverenti@gmail.com>2015-09-02 11:50:00 -0400
commitf868dd81e856488280978006cbb67afc2677049d (patch)
tree616ba8ae846efe9ec889abeb12f6b2702c6b8592 /MediaBrowser.Providers
parentaf89446c20fb302087b82c18c28da92076dbc5ac (diff)
parente6d5901408ba7d8e344a27ea1f3b0046c40e56c1 (diff)
Merge pull request #1164 from MediaBrowser/dev
3.0.5724.1
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/Folders/DefaultImageProvider.cs166
-rw-r--r--MediaBrowser.Providers/Folders/UserViewMetadataService.cs13
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs23
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs13
-rw-r--r--MediaBrowser.Providers/Manager/ProviderUtils.cs4
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj1
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs36
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs16
-rw-r--r--MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs2
-rw-r--r--MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs37
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbImageProvider.cs17
-rw-r--r--MediaBrowser.Providers/Music/AudioDbArtistProvider.cs4
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs7
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbItemProvider.cs4
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbProvider.cs12
-rw-r--r--MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeriesProvider.cs4
17 files changed, 293 insertions, 72 deletions
diff --git a/MediaBrowser.Providers/Folders/DefaultImageProvider.cs b/MediaBrowser.Providers/Folders/DefaultImageProvider.cs
new file mode 100644
index 000000000..13e486ae9
--- /dev/null
+++ b/MediaBrowser.Providers/Folders/DefaultImageProvider.cs
@@ -0,0 +1,166 @@
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
+using MediaBrowser.Providers.Genres;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Providers.Folders
+{
+ public class DefaultImageProvider : IRemoteImageProvider, IHasItemChangeMonitor
+ {
+ private readonly IHttpClient _httpClient;
+
+ public DefaultImageProvider(IHttpClient httpClient)
+ {
+ _httpClient = httpClient;
+ }
+
+ public IEnumerable<ImageType> GetSupportedImages(IHasImages item)
+ {
+ return new List<ImageType>
+ {
+ ImageType.Primary,
+ ImageType.Thumb
+ };
+ }
+
+ public Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken)
+ {
+ var view = item as UserView;
+
+ if (view != null)
+ {
+ return GetImages(view.ViewType, cancellationToken);
+ }
+
+ var folder = (ICollectionFolder)item;
+ return GetImages(folder.CollectionType, cancellationToken);
+ }
+
+ private Task<IEnumerable<RemoteImageInfo>> GetImages(string viewType, CancellationToken cancellationToken)
+ {
+ var url = GetImageUrl(viewType);
+
+ var list = new List<RemoteImageInfo>();
+
+ if (!string.IsNullOrWhiteSpace(url))
+ {
+ list.AddRange(new List<RemoteImageInfo>{
+ new RemoteImageInfo
+ {
+ ProviderName = Name,
+ Url = url,
+ Type = ImageType.Primary
+ },
+
+ new RemoteImageInfo
+ {
+ ProviderName = Name,
+ Url = url,
+ Type = ImageType.Thumb
+ }
+ });
+ }
+
+ return Task.FromResult<IEnumerable<RemoteImageInfo>>(list);
+ }
+
+ private string GetImageUrl(string viewType)
+ {
+ const string urlPrefix = "https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/folders/";
+
+ if (string.Equals(viewType, CollectionType.Books, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "books.png";
+ }
+ if (string.Equals(viewType, CollectionType.Games, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "games.png";
+ }
+ if (string.Equals(viewType, CollectionType.Music, StringComparison.OrdinalIgnoreCase))
+ {
+ //return urlPrefix + "music.png";
+ }
+ if (string.Equals(viewType, CollectionType.Photos, StringComparison.OrdinalIgnoreCase))
+ {
+ //return urlPrefix + "photos.png";
+ }
+ if (string.Equals(viewType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase))
+ {
+ //return urlPrefix + "tv.png";
+ }
+ if (string.Equals(viewType, CollectionType.Channels, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "generic.png";
+ }
+ if (string.Equals(viewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "livetv.png";
+ }
+ if (string.Equals(viewType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase))
+ {
+ //return urlPrefix + "movies.png";
+ }
+ if (string.Equals(viewType, CollectionType.Playlists, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "playlists.png";
+ }
+ if (string.Equals(viewType, CollectionType.HomeVideos, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "homevideos.png";
+ }
+ if (string.Equals(viewType, CollectionType.MusicVideos, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "musicvideos.png";
+ }
+ if (string.Equals(viewType, CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase))
+ {
+ return urlPrefix + "generic.png";
+ }
+ if (string.IsNullOrWhiteSpace(viewType))
+ {
+ return urlPrefix + "generic.png";
+ }
+
+ return null;
+ }
+
+ public string Name
+ {
+ get { return "Default Image Provider"; }
+ }
+
+ public bool Supports(IHasImages item)
+ {
+ var view = item as UserView;
+
+ if (view != null)
+ {
+ return true;
+ }
+
+ return item is ICollectionFolder;
+ }
+
+ public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
+ {
+ return _httpClient.GetResponse(new HttpRequestOptions
+ {
+ CancellationToken = cancellationToken,
+ Url = url,
+ ResourcePool = GenreImageProvider.ImageDownloadResourcePool
+ });
+ }
+
+ public bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService)
+ {
+ return GetSupportedImages(item).Any(i => !item.HasImage(i));
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs
index 1dc09e01d..70b86830f 100644
--- a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs
+++ b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs
@@ -21,4 +21,17 @@ namespace MediaBrowser.Providers.Folders
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
}
+
+ public class CollectionFolderMetadataService : MetadataService<CollectionFolder, ItemLookupInfo>
+ {
+ public CollectionFolderMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager)
+ : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
+ {
+ }
+
+ protected override void MergeData(MetadataResult<CollectionFolder> source, MetadataResult<CollectionFolder> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+ }
+ }
}
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index c3d1ec080..cddc6f894 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -194,6 +194,15 @@ namespace MediaBrowser.Providers.Manager
return updateType;
}
+ protected async Task SaveItem(MetadataResult<TItemType> result, ItemUpdateType reason, CancellationToken cancellationToken)
+ {
+ if (result.Item.SupportsPeople && result.People != null)
+ {
+ await LibraryManager.UpdatePeople(result.Item as BaseItem, result.People.ToList());
+ }
+ await result.Item.UpdateToRepository(reason, cancellationToken).ConfigureAwait(false);
+ }
+
private readonly Task _cachedTask = Task.FromResult(true);
protected virtual Task AfterMetadataRefresh(TItemType item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
{
@@ -328,15 +337,6 @@ namespace MediaBrowser.Providers.Manager
return providers;
}
- protected async Task SaveItem(MetadataResult<TItemType> result, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- if (result.Item.SupportsPeople)
- {
- await LibraryManager.UpdatePeople(result.Item as BaseItem, result.People);
- }
- await result.Item.UpdateToRepository(reason, cancellationToken).ConfigureAwait(false);
- }
-
public bool CanRefresh(IHasMetadata item)
{
return item is TItemType;
@@ -408,7 +408,10 @@ namespace MediaBrowser.Providers.Manager
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.ImageUpdate;
}
- userDataList = localItem.UserDataLIst;
+ if (localItem.UserDataList != null)
+ {
+ userDataList.AddRange(localItem.UserDataList);
+ }
MergeData(localItem, temp, new List<MetadataFields>(), !options.ReplaceAllMetadata, true);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport;
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index 14009a94f..fe0e4890c 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -106,9 +106,15 @@ namespace MediaBrowser.Providers.Manager
_identityProviders = identityProviders.ToArray();
_identityConverters = identityConverters.ToArray();
_metadataProviders = metadataProviders.ToArray();
- _savers = metadataSavers.ToArray();
_imageSavers = imageSavers.ToArray();
_externalIds = externalIds.OrderBy(i => i.Name).ToArray();
+
+ _savers = metadataSavers.Where(i =>
+ {
+ var configurable = i as IConfigurableProvider;
+
+ return configurable == null || configurable.IsEnabled;
+ }).ToArray();
}
public Task<ItemUpdateType> RefreshSingleItem(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken)
@@ -183,7 +189,7 @@ namespace MediaBrowser.Providers.Manager
var results = await Task.WhenAll(tasks).ConfigureAwait(false);
- var images = results.SelectMany(i => i);
+ var images = results.SelectMany(i => i.ToList());
return images;
}
@@ -912,6 +918,9 @@ namespace MediaBrowser.Providers.Manager
{
try
{
+ // Try to throttle this a little bit.
+ await Task.Delay(100).ConfigureAwait(false);
+
var artist = item as MusicArtist;
var task = artist == null
? RefreshItem(item, refreshItem.Item2, CancellationToken.None)
diff --git a/MediaBrowser.Providers/Manager/ProviderUtils.cs b/MediaBrowser.Providers/Manager/ProviderUtils.cs
index a0a0493d5..fa4840f10 100644
--- a/MediaBrowser.Providers/Manager/ProviderUtils.cs
+++ b/MediaBrowser.Providers/Manager/ProviderUtils.cs
@@ -105,9 +105,9 @@ namespace MediaBrowser.Providers.Manager
if (!lockedFields.Contains(MetadataFields.Cast))
{
- if (replaceData || targetResult.People.Count == 0)
+ if (replaceData || targetResult.People == null || targetResult.People.Count == 0)
{
- targetResult.People = sourceResult.People;
+ targetResult.People = sourceResult.People ?? new List<PersonInfo>();
}
}
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index 444567afa..1d323e567 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -83,6 +83,7 @@
<Compile Include="BoxSets\MovieDbBoxSetProvider.cs" />
<Compile Include="Channels\ChannelMetadataService.cs" />
<Compile Include="Chapters\ChapterManager.cs" />
+ <Compile Include="Folders\DefaultImageProvider.cs" />
<Compile Include="Folders\FolderMetadataService.cs" />
<Compile Include="Channels\AudioChannelItemMetadataService.cs" />
<Compile Include="Folders\UserViewMetadataService.cs" />
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs
index f2f1663e4..0d4fc6720 100644
--- a/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs
+++ b/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs
@@ -61,22 +61,22 @@ namespace MediaBrowser.Providers.MediaInfo
{
cancellationToken.ThrowIfCancellationRequested();
- var idString = item.Id.ToString("N");
- var cachePath = Path.Combine(_appPaths.CachePath,
- "ffprobe-audio",
- idString.Substring(0, 2), idString, "v" + SchemaVersion + _mediaEncoder.Version + item.DateModified.Ticks.ToString(_usCulture) + ".json");
-
- try
- {
- return _json.DeserializeFromFile<Model.MediaInfo.MediaInfo>(cachePath);
- }
- catch (FileNotFoundException)
- {
-
- }
- catch (DirectoryNotFoundException)
- {
- }
+ //var idString = item.Id.ToString("N");
+ //var cachePath = Path.Combine(_appPaths.CachePath,
+ // "ffprobe-audio",
+ // idString.Substring(0, 2), idString, "v" + SchemaVersion + _mediaEncoder.Version + item.DateModified.Ticks.ToString(_usCulture) + ".json");
+
+ //try
+ //{
+ // return _json.DeserializeFromFile<Model.MediaInfo.MediaInfo>(cachePath);
+ //}
+ //catch (FileNotFoundException)
+ //{
+
+ //}
+ //catch (DirectoryNotFoundException)
+ //{
+ //}
var result = await _mediaEncoder.GetMediaInfo(new MediaInfoRequest
{
@@ -86,8 +86,8 @@ namespace MediaBrowser.Providers.MediaInfo
}, cancellationToken).ConfigureAwait(false);
- Directory.CreateDirectory(Path.GetDirectoryName(cachePath));
- _json.SerializeToFile(result, cachePath);
+ //Directory.CreateDirectory(Path.GetDirectoryName(cachePath));
+ //_json.SerializeToFile(result, cachePath);
return result;
}
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
index 395d95cc5..9fc8e1f8a 100644
--- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
+++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
@@ -132,7 +132,7 @@ namespace MediaBrowser.Providers.MediaInfo
return ItemUpdateType.MetadataImport;
}
- private const string SchemaVersion = "5";
+ private const string SchemaVersion = "6";
private async Task<Model.MediaInfo.MediaInfo> GetMediaInfo(Video item,
IIsoMount isoMount,
@@ -140,14 +140,14 @@ namespace MediaBrowser.Providers.MediaInfo
{
cancellationToken.ThrowIfCancellationRequested();
- var idString = item.Id.ToString("N");
- var cachePath = Path.Combine(_appPaths.CachePath,
- "ffprobe-video",
- idString.Substring(0, 2), idString, "v" + SchemaVersion + _mediaEncoder.Version + item.DateModified.Ticks.ToString(_usCulture) + ".json");
+ //var idString = item.Id.ToString("N");
+ //var cachePath = Path.Combine(_appPaths.CachePath,
+ // "ffprobe-video",
+ // idString.Substring(0, 2), idString, "v" + SchemaVersion + _mediaEncoder.Version + item.DateModified.Ticks.ToString(_usCulture) + ".json");
try
{
- return _json.DeserializeFromFile<Model.MediaInfo.MediaInfo>(cachePath);
+ //return _json.DeserializeFromFile<Model.MediaInfo.MediaInfo>(cachePath);
}
catch (FileNotFoundException)
{
@@ -174,8 +174,8 @@ namespace MediaBrowser.Providers.MediaInfo
}, cancellationToken).ConfigureAwait(false);
- Directory.CreateDirectory(Path.GetDirectoryName(cachePath));
- _json.SerializeToFile(result, cachePath);
+ //Directory.CreateDirectory(Path.GetDirectoryName(cachePath));
+ //_json.SerializeToFile(result, cachePath);
return result;
}
diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
index 0f092b554..4953621f5 100644
--- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
+++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
@@ -131,7 +131,7 @@ namespace MediaBrowser.Providers.MediaInfo
{
return new ITaskTrigger[]
{
- new DailyTrigger { TimeOfDay = TimeSpan.FromHours(3) },
+ new IntervalTrigger{ Interval = TimeSpan.FromHours(8)}
};
}
}
diff --git a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
index 6854ff12b..f5ee33d6b 100644
--- a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
+++ b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
@@ -185,18 +185,25 @@ namespace MediaBrowser.Providers.Movies
//release date and certification are retrieved based on configured country and we fall back on US if not there and to minimun release date if still no match
if (movieData.releases != null && movieData.releases.countries != null)
{
- var ourRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals(preferredCountryCode, StringComparison.OrdinalIgnoreCase)) ?? new MovieDbProvider.Country();
- var usRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals("US", StringComparison.OrdinalIgnoreCase)) ?? new MovieDbProvider.Country();
- var minimunRelease = movieData.releases.countries.OrderBy(c => c.release_date).FirstOrDefault() ?? new MovieDbProvider.Country();
-
- var ratingPrefix = string.Equals(preferredCountryCode, "us", StringComparison.OrdinalIgnoreCase) ? "" : preferredCountryCode + "-";
- movie.OfficialRating = !string.IsNullOrEmpty(ourRelease.certification)
- ? ratingPrefix + ourRelease.certification
- : !string.IsNullOrEmpty(usRelease.certification)
- ? usRelease.certification
- : !string.IsNullOrEmpty(minimunRelease.certification)
- ? minimunRelease.iso_3166_1 + "-" + minimunRelease.certification
- : null;
+ var releases = movieData.releases.countries.Where(i => !string.IsNullOrWhiteSpace(i.certification)).ToList();
+
+ var ourRelease = releases.FirstOrDefault(c => c.iso_3166_1.Equals(preferredCountryCode, StringComparison.OrdinalIgnoreCase));
+ var usRelease = releases.FirstOrDefault(c => c.iso_3166_1.Equals("US", StringComparison.OrdinalIgnoreCase));
+ var minimunRelease = releases.OrderBy(c => c.release_date).FirstOrDefault();
+
+ if (ourRelease != null)
+ {
+ var ratingPrefix = string.Equals(preferredCountryCode, "us", StringComparison.OrdinalIgnoreCase) ? "" : preferredCountryCode + "-";
+ movie.OfficialRating = ratingPrefix + ourRelease.certification;
+ }
+ else if (usRelease != null)
+ {
+ movie.OfficialRating = usRelease.certification;
+ }
+ else if (minimunRelease != null)
+ {
+ movie.OfficialRating = minimunRelease.iso_3166_1 + "-" + minimunRelease.certification;
+ }
}
if (!string.IsNullOrWhiteSpace(movieData.release_date))
@@ -231,13 +238,15 @@ namespace MediaBrowser.Providers.Movies
movie.AddGenre(genre);
}
+ resultItem.ResetPeople();
+
//Actors, Directors, Writers - all in People
//actors come from cast
if (movieData.casts != null && movieData.casts.cast != null)
{
foreach (var actor in movieData.casts.cast.OrderBy(a => a.order))
{
- PeopleHelper.AddPerson(resultItem.People, new PersonInfo { Name = actor.name.Trim(), Role = actor.character, Type = PersonType.Actor, SortOrder = actor.order });
+ resultItem.AddPerson(new PersonInfo { Name = actor.name.Trim(), Role = actor.character, Type = PersonType.Actor, SortOrder = actor.order });
}
}
@@ -246,7 +255,7 @@ namespace MediaBrowser.Providers.Movies
{
foreach (var person in movieData.casts.crew)
{
- PeopleHelper.AddPerson(resultItem.People, new PersonInfo { Name = person.name.Trim(), Role = person.job, Type = person.department });
+ resultItem.AddPerson(new PersonInfo { Name = person.name.Trim(), Role = person.job, Type = person.department });
}
}
diff --git a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
index 9bf0b3722..6e0ff14b9 100644
--- a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
@@ -42,11 +42,21 @@ namespace MediaBrowser.Providers.Movies
public bool Supports(IHasImages item)
{
- var channelItem = item as ChannelVideoItem;
+ var channelItem = item as IChannelMediaItem;
- if (channelItem != null && channelItem.ContentType == ChannelMediaContentType.MovieExtra && channelItem.ExtraType == ExtraType.Trailer)
+ if (channelItem != null)
{
- return true;
+ if (channelItem.ContentType == ChannelMediaContentType.Movie)
+ {
+ return true;
+ }
+ if (channelItem.ContentType == ChannelMediaContentType.MovieExtra)
+ {
+ if (channelItem.ExtraType == ExtraType.Trailer)
+ {
+ return true;
+ }
+ }
}
// Supports images for tv movies
@@ -56,7 +66,6 @@ namespace MediaBrowser.Providers.Movies
return true;
}
- // Don't support local trailers
return item is Movie || item is MusicVideo;
}
diff --git a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs
index a6dab60b0..eefa1a2f4 100644
--- a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs
+++ b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs
@@ -113,8 +113,6 @@ namespace MediaBrowser.Providers.Music
var path = GetArtistInfoPath(_config.ApplicationPaths, musicBrainzId);
- Directory.CreateDirectory(Path.GetDirectoryName(path));
-
using (var response = await _httpClient.Get(new HttpRequestOptions
{
Url = url,
@@ -123,6 +121,8 @@ namespace MediaBrowser.Providers.Music
}).ConfigureAwait(false))
{
+ Directory.CreateDirectory(Path.GetDirectoryName(path));
+
using (var xmlFileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
{
await response.CopyToAsync(xmlFileStream).ConfigureAwait(false);
diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
index 664eff004..70946db36 100644
--- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
@@ -154,6 +154,11 @@ namespace MediaBrowser.Providers.Music
result.HasMetadata = true;
}
+ if (!string.IsNullOrEmpty(releaseId) || !string.IsNullOrEmpty(releaseGroupId))
+ {
+ result.HasMetadata = true;
+ }
+
if (result.HasMetadata)
{
if (!string.IsNullOrEmpty(releaseId))
@@ -280,7 +285,7 @@ namespace MediaBrowser.Providers.Music
{
// MusicBrainz is extremely adamant about limiting to one request per second
- await Task.Delay(800, cancellationToken).ConfigureAwait(false);
+ await Task.Delay(1000, cancellationToken).ConfigureAwait(false);
var doc = new XmlDocument();
diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
index dffabd83c..36e7697d7 100644
--- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
+++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
@@ -172,7 +172,7 @@ namespace MediaBrowser.Providers.Omdb
result.Item.SetProviderId(MetadataProviders.Imdb, imdbId);
result.HasMetadata = true;
- await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, info.MetadataLanguage, cancellationToken).ConfigureAwait(false);
+ await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false);
}
return result;
@@ -211,7 +211,7 @@ namespace MediaBrowser.Providers.Omdb
result.Item.SetProviderId(MetadataProviders.Imdb, imdbId);
result.HasMetadata = true;
- await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, info.MetadataLanguage, cancellationToken).ConfigureAwait(false);
+ await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false);
}
return result;
diff --git a/MediaBrowser.Providers/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Omdb/OmdbProvider.cs
index aee1abd72..c7ce57fca 100644
--- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs
+++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs
@@ -28,7 +28,7 @@ namespace MediaBrowser.Providers.Omdb
Current = this;
}
- public async Task Fetch(BaseItem item, string imdbId, string language, CancellationToken cancellationToken)
+ public async Task Fetch(BaseItem item, string imdbId, string language, string country, CancellationToken cancellationToken)
{
if (string.IsNullOrWhiteSpace(imdbId))
{
@@ -51,10 +51,15 @@ namespace MediaBrowser.Providers.Omdb
{
var result = _jsonSerializer.DeserializeFromStream<RootObject>(stream);
- // Only take the name if the user's language is set to english, since Omdb has no localization
+ // 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))
{
item.Name = result.Title;
+
+ if (string.Equals(country, "us", StringComparison.OrdinalIgnoreCase))
+ {
+ item.OfficialRating = result.Rated;
+ }
}
int year;
@@ -66,9 +71,6 @@ namespace MediaBrowser.Providers.Omdb
item.ProductionYear = year;
}
- item.OfficialRating = result.Rated;
-
-
var hasCriticRating = item as IHasCriticRating;
if (hasCriticRating != null)
{
diff --git a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
index f36de88c9..1702a5044 100644
--- a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
@@ -330,6 +330,8 @@ namespace MediaBrowser.Providers.TV
{
reader.MoveToContent();
+ result.ResetPeople();
+
// Loop through each element
while (reader.Read())
{
@@ -603,7 +605,7 @@ namespace MediaBrowser.Providers.TV
.Where(i => !string.IsNullOrWhiteSpace(i))
.Select(str => new PersonInfo { Type = personType, Name = str.Trim() }))
{
- PeopleHelper.AddPerson(result.People, person);
+ result.AddPerson(person);
}
}
@@ -632,7 +634,7 @@ namespace MediaBrowser.Providers.TV
{
if (!string.IsNullOrWhiteSpace(person.Name))
{
- PeopleHelper.AddPerson(result.People, person);
+ result.AddPerson(person);
}
}
}
diff --git a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
index 4c93bd57c..3298fbc76 100644
--- a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
@@ -180,6 +180,8 @@ namespace MediaBrowser.Providers.TV
cancellationToken.ThrowIfCancellationRequested();
+ result.ResetPeople();
+
FetchActors(result, actorsXmlPath);
}
@@ -721,7 +723,7 @@ namespace MediaBrowser.Providers.TV
if (!string.IsNullOrWhiteSpace(personInfo.Name))
{
- PeopleHelper.AddPerson(result.People, personInfo);
+ result.AddPerson(personInfo);
}
}