浏览代码

update dynamic image provider

Luke Pulverenti 10 年之前
父节点
当前提交
63fb306916

+ 8 - 2
MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs

@@ -107,7 +107,7 @@ namespace MediaBrowser.Server.Implementations.Photos
             get { return "Dynamic Image Provider"; }
             get { return "Dynamic Image Provider"; }
         }
         }
 
 
-        public async Task<Stream> CreateImageAsync(IHasImages item,
+        protected virtual async Task<Stream> CreateImageAsync(IHasImages item,
             List<BaseItem> itemsWithImages,
             List<BaseItem> itemsWithImages,
             ImageType imageType,
             ImageType imageType,
             int imageIndex)
             int imageIndex)
@@ -158,13 +158,19 @@ namespace MediaBrowser.Server.Implementations.Photos
         }
         }
 
 
         protected List<BaseItem> GetFinalItems(List<BaseItem> items)
         protected List<BaseItem> GetFinalItems(List<BaseItem> items)
+        {
+            // Rotate the images no more than once per week
+            return GetFinalItems(items, 4);
+        }
+
+        protected List<BaseItem> GetFinalItems(List<BaseItem> items, int limit)
         {
         {
             // Rotate the images no more than once per week
             // Rotate the images no more than once per week
             var random = new Random(GetWeekOfYear()).Next();
             var random = new Random(GetWeekOfYear()).Next();
 
 
             return items
             return items
                 .OrderBy(i => random - items.IndexOf(i))
                 .OrderBy(i => random - items.IndexOf(i))
-                .Take(4)
+                .Take(limit)
                 .OrderBy(i => i.Name)
                 .OrderBy(i => i.Name)
                 .ToList();
                 .ToList();
         }
         }

+ 30 - 2
MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.IO;
 using MediaBrowser.Common.IO;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Controller.Providers;
@@ -18,10 +19,12 @@ namespace MediaBrowser.Server.Implementations.Photos
         private readonly IUserManager _userManager;
         private readonly IUserManager _userManager;
         private readonly ILibraryManager _libraryManager;
         private readonly ILibraryManager _libraryManager;
 
 
-        public DynamicImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IUserManager userManager, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths)
+        public DynamicImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IUserManager userManager, ILibraryManager libraryManager, string[] collectionStripViewTypes)
+            : base(fileSystem, providerManager, applicationPaths)
         {
         {
             _userManager = userManager;
             _userManager = userManager;
             _libraryManager = libraryManager;
             _libraryManager = libraryManager;
+            _collectionStripViewTypes = collectionStripViewTypes;
         }
         }
 
 
         protected override async Task<List<BaseItem>> GetItemsWithImages(IHasImages item)
         protected override async Task<List<BaseItem>> GetItemsWithImages(IHasImages item)
@@ -108,13 +111,33 @@ namespace MediaBrowser.Server.Implementations.Photos
                     return season;
                     return season;
                 }
                 }
 
 
+                var audio = i as Audio;
+                if (audio != null)
+                {
+                    if (!audio.HasImage(ImageType.Primary))
+                    {
+                        var album = audio.FindParent<MusicAlbum>();
+                        if (album != null)
+                        {
+                            return album;
+                        }
+                    }
+                }
+
                 return i;
                 return i;
 
 
             }).DistinctBy(i => i.Id);
             }).DistinctBy(i => i.Id);
 
 
+            if (IsUsingCollectionStrip(view))
+            {
+                return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary) || i.HasImage(ImageType.Thumb)).ToList(), 8);
+            }
+
             return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary)).ToList());
             return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary)).ToList());
         }
         }
 
 
+        private readonly string[] _collectionStripViewTypes = { CollectionType.Movies };
+
         public override bool Supports(IHasImages item)
         public override bool Supports(IHasImages item)
         {
         {
             var view = item as UserView;
             var view = item as UserView;
@@ -160,11 +183,16 @@ namespace MediaBrowser.Server.Implementations.Photos
                     SpecialFolder.MusicFavoriteSongs
                     SpecialFolder.MusicFavoriteSongs
                 };
                 };
 
 
-                return supported.Contains(view.ViewType, StringComparer.OrdinalIgnoreCase) &&
+                return (IsUsingCollectionStrip(view) || supported.Contains(view.ViewType, StringComparer.OrdinalIgnoreCase)) &&
                     _userManager.GetUserById(view.UserId.Value) != null;
                     _userManager.GetUserById(view.UserId.Value) != null;
             }
             }
 
 
             return false;
             return false;
         }
         }
+
+        private bool IsUsingCollectionStrip(UserView view)
+        {
+            return _collectionStripViewTypes.Contains(view.ViewType ?? string.Empty);
+        }
     }
     }
 }
 }