diff options
4 files changed, 46 insertions, 111 deletions
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index c7298b462..b5b41c6d3 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -89,7 +89,6 @@ <Compile Include="Music\LastfmArtistProvider.cs" /> <Compile Include="Music\LastfmBaseProvider.cs" /> <Compile Include="Music\LastfmHelper.cs" /> - <Compile Include="Music\AlbumDynamicInfoProvider.cs" /> <Compile Include="Music\ManualFanartAlbumProvider.cs" /> <Compile Include="Music\ManualFanartArtistProvider.cs" /> <Compile Include="Music\ManualLastFmImageProvider.cs" /> diff --git a/MediaBrowser.Providers/Movies/ManualMovieDbPersonImageProvider.cs b/MediaBrowser.Providers/Movies/ManualMovieDbPersonImageProvider.cs index ecfae9d5c..b381de332 100644 --- a/MediaBrowser.Providers/Movies/ManualMovieDbPersonImageProvider.cs +++ b/MediaBrowser.Providers/Movies/ManualMovieDbPersonImageProvider.cs @@ -46,7 +46,12 @@ namespace MediaBrowser.Providers.Movies return images.Where(i => i.Type == imageType); } - public async Task<IEnumerable<RemoteImageInfo>> GetAllImages(BaseItem item, CancellationToken cancellationToken) + public Task<IEnumerable<RemoteImageInfo>> GetAllImages(BaseItem item, CancellationToken cancellationToken) + { + return GetAllImagesInternal(item, true, cancellationToken); + } + + public async Task<IEnumerable<RemoteImageInfo>> GetAllImagesInternal(BaseItem item, bool retryOnMissingData, CancellationToken cancellationToken) { var id = item.GetProviderId(MetadataProviders.Tmdb); @@ -70,11 +75,18 @@ namespace MediaBrowser.Providers.Movies { } + + if (retryOnMissingData) + { + await MovieDbPersonProvider.Current.DownloadPersonInfo(id, cancellationToken).ConfigureAwait(false); + + return await GetAllImagesInternal(item, false, cancellationToken).ConfigureAwait(false); + } } return new List<RemoteImageInfo>(); } - + private IEnumerable<RemoteImageInfo> GetImages(MovieDbPersonProvider.Images images, string baseImageUrl) { var list = new List<RemoteImageInfo>(); diff --git a/MediaBrowser.Providers/Music/AlbumDynamicInfoProvider.cs b/MediaBrowser.Providers/Music/AlbumDynamicInfoProvider.cs deleted file mode 100644 index 5c14a2f56..000000000 --- a/MediaBrowser.Providers/Music/AlbumDynamicInfoProvider.cs +++ /dev/null @@ -1,103 +0,0 @@ -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Logging; -using System; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Providers.Music -{ - /// <summary> - /// Class MusicAlbumDynamicInfoProvider - /// </summary> - public class AlbumDynamicInfoProvider : BaseMetadataProvider, IDynamicInfoProvider - { - /// <summary> - /// Initializes a new instance of the <see cref="BaseMetadataProvider" /> class. - /// </summary> - /// <param name="logManager">The log manager.</param> - /// <param name="configurationManager">The configuration manager.</param> - public AlbumDynamicInfoProvider(ILogManager logManager, IServerConfigurationManager configurationManager) - : base(logManager, configurationManager) - { - } - - /// <summary> - /// Supportses the specified item. - /// </summary> - /// <param name="item">The item.</param> - /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> - public override bool Supports(BaseItem item) - { - return item is MusicAlbum; - } - - /// <summary> - /// Needses the refresh internal. - /// </summary> - /// <param name="item">The item.</param> - /// <param name="providerInfo">The provider info.</param> - /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> - protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) - { - return true; - } - - /// <summary> - /// Fetches metadata and returns true or false indicating if any work that requires persistence was done - /// </summary> - /// <param name="item">The item.</param> - /// <param name="force">if set to <c>true</c> [force].</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>Task{System.Boolean}.</returns> - public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken) - { - var album = (MusicAlbum)item; - - var songs = album.RecursiveChildren - .OfType<Audio>() - .ToList(); - - album.AlbumArtist = songs - .Select(i => i.AlbumArtist) - .FirstOrDefault(i => !string.IsNullOrEmpty(i)); - - album.Artists = songs.SelectMany(i => i.Artists) - .Distinct(StringComparer.OrdinalIgnoreCase) - .ToList(); - - var date = songs.Select(i => i.PremiereDate) - .FirstOrDefault(i => i.HasValue); - - if (date.HasValue) - { - album.PremiereDate = date.Value; - album.ProductionYear = date.Value.Year; - } - else - { - var year = songs.Select(i => i.ProductionYear ?? 1800).FirstOrDefault(i => i != 1800); - - if (year != 1800) - { - album.ProductionYear = year; - } - } - - // Don't save to the db - return FalseTaskResult; - } - - /// <summary> - /// Gets the priority. - /// </summary> - /// <value>The priority.</value> - public override MetadataProviderPriority Priority - { - get { return MetadataProviderPriority.Last; } - } - } -} diff --git a/MediaBrowser.Providers/Music/AlbumInfoFromSongProvider.cs b/MediaBrowser.Providers/Music/AlbumInfoFromSongProvider.cs index 9606279f7..da49d36ed 100644 --- a/MediaBrowser.Providers/Music/AlbumInfoFromSongProvider.cs +++ b/MediaBrowser.Providers/Music/AlbumInfoFromSongProvider.cs @@ -37,7 +37,7 @@ namespace MediaBrowser.Providers.Music { get { - return "1"; + return "2"; } } @@ -65,7 +65,7 @@ namespace MediaBrowser.Providers.Music private Guid GetComparisonData(List<Audio> songs) { - var albumNames = songs.Select(i => i.AlbumArtist) + var albumArtistNames = songs.Select(i => i.AlbumArtist) .Where(i => !string.IsNullOrEmpty(i)) .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); @@ -78,10 +78,10 @@ namespace MediaBrowser.Providers.Music .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); - albumNames.AddRange(studios); - albumNames.AddRange(genres); + albumArtistNames.AddRange(studios); + albumArtistNames.AddRange(genres); - return string.Join(string.Empty, albumNames.OrderBy(i => i).ToArray()).GetMD5(); + return string.Join(string.Empty, albumArtistNames.OrderBy(i => i).ToArray()).GetMD5(); } public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken) @@ -119,7 +119,34 @@ namespace MediaBrowser.Providers.Music album.Genres = songs.SelectMany(i => i.Genres) .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); + } + + album.AlbumArtist = songs + .Select(i => i.AlbumArtist) + .FirstOrDefault(i => !string.IsNullOrEmpty(i)); + + album.Artists = songs.SelectMany(i => i.Artists) + .Distinct(StringComparer.OrdinalIgnoreCase) + .ToList(); + + var date = songs.Select(i => i.PremiereDate) + .FirstOrDefault(i => i.HasValue); + + if (date.HasValue) + { + album.PremiereDate = date.Value; + album.ProductionYear = date.Value.Year; } + else + { + var year = songs.Select(i => i.ProductionYear ?? 1800).FirstOrDefault(i => i != 1800); + + if (year != 1800) + { + album.ProductionYear = year; + } + } + data.FileStamp = GetComparisonData(songs); |
