瀏覽代碼

have manual person image provider download data if not already present

Luke Pulverenti 11 年之前
父節點
當前提交
81c23ed183

+ 0 - 1
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" />

+ 14 - 2
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>();

+ 0 - 103
MediaBrowser.Providers/Music/AlbumDynamicInfoProvider.cs

@@ -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; }
-        }
-    }
-}

+ 32 - 5
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);