浏览代码

update timeline view

Luke Pulverenti 9 年之前
父节点
当前提交
e32dcb38e4

+ 5 - 0
MediaBrowser.Controller/Entities/ICollectionFolder.cs

@@ -16,6 +16,11 @@ namespace MediaBrowser.Controller.Entities
         IEnumerable<string> PhysicalLocations { get; }
         IEnumerable<string> PhysicalLocations { get; }
     }
     }
 
 
+    public interface ISupportsUserSpecificView
+    {
+        bool EnableUserSpecificView { get; }
+    }
+
     public static class CollectionFolderExtensions
     public static class CollectionFolderExtensions
     {
     {
         public static string GetViewType(this ICollectionFolder folder, User user)
         public static string GetViewType(this ICollectionFolder folder, User user)

+ 11 - 1
MediaBrowser.Controller/Entities/UserView.cs

@@ -144,12 +144,22 @@ namespace MediaBrowser.Controller.Entities
                 return false;
                 return false;
             }
             }
 
 
+            var supportsUserSpecific = folder as ISupportsUserSpecificView;
+            if (supportsUserSpecific != null && supportsUserSpecific.EnableUserSpecificView)
+            {
+                return true;
+            }
+
             return standaloneTypes.Contains(collectionFolder.CollectionType ?? string.Empty);
             return standaloneTypes.Contains(collectionFolder.CollectionType ?? string.Empty);
         }
         }
 
 
         public static bool IsEligibleForEnhancedView(string viewType)
         public static bool IsEligibleForEnhancedView(string viewType)
         {
         {
-            var types = new[] { CollectionType.Movies, CollectionType.TvShows };
+            var types = new[] 
+            { 
+                CollectionType.Movies, 
+                CollectionType.TvShows 
+            };
 
 
             return types.Contains(viewType ?? string.Empty, StringComparer.OrdinalIgnoreCase);
             return types.Contains(viewType ?? string.Empty, StringComparer.OrdinalIgnoreCase);
         }
         }

+ 2 - 17
MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs

@@ -78,24 +78,9 @@ namespace MediaBrowser.Server.Implementations.Collections
             return Task.FromResult(GetFinalItems(items, 2));
             return Task.FromResult(GetFinalItems(items, 2));
         }
         }
 
 
-        protected override async Task<string> CreateImage(IHasImages item, List<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
+        protected override Task<string> CreateImage(IHasImages item, List<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
         {
         {
-            var image = itemsWithImages
-                .Where(i => i.HasImage(ImageType.Primary) && i.GetImageInfo(ImageType.Primary, 0).IsLocalFile && Path.HasExtension(i.GetImagePath(ImageType.Primary)))
-                .Select(i => i.GetImagePath(ImageType.Primary))
-                .FirstOrDefault();
-
-            if (string.IsNullOrWhiteSpace(image))
-            {
-                return null;
-            }
-
-            var ext = Path.GetExtension(image);
-
-            var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ext);
-            File.Copy(image, outputPath);
-
-            return outputPath;
+            return CreateSingleImage(itemsWithImages, outputPathWithoutExtension, ImageType.Primary);
         }
         }
     }
     }
 }
 }

+ 8 - 2
MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs

@@ -3,15 +3,15 @@ using MediaBrowser.Controller.Entities;
 using System;
 using System;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
+using System.Runtime.Serialization;
 using System.Threading;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
 using CommonIO;
 using CommonIO;
-using MediaBrowser.Common.IO;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Controller.Providers;
 
 
 namespace MediaBrowser.Server.Implementations.Devices
 namespace MediaBrowser.Server.Implementations.Devices
 {
 {
-    public class CameraUploadsFolder : BasePluginFolder
+    public class CameraUploadsFolder : BasePluginFolder, ISupportsUserSpecificView
     {
     {
         public CameraUploadsFolder()
         public CameraUploadsFolder()
         {
         {
@@ -54,6 +54,12 @@ namespace MediaBrowser.Server.Implementations.Devices
             _hasChildren = null;
             _hasChildren = null;
             return base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService);
             return base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService);
         }
         }
+
+        [IgnoreDataMember]
+        public bool EnableUserSpecificView
+        {
+            get { return true; }
+        }
     }
     }
 
 
     public class CameraUploadsDynamicFolder : IVirtualFolderCreator
     public class CameraUploadsDynamicFolder : IVirtualFolderCreator

+ 24 - 23
MediaBrowser.Server.Implementations/Library/UserViewManager.cs

@@ -73,20 +73,26 @@ namespace MediaBrowser.Server.Implementations.Library
 
 
             var enableUserViews = _config.Configuration.EnableUserViews || user.EnableUserViews;
             var enableUserViews = _config.Configuration.EnableUserViews || user.EnableUserViews;
 
 
-            if (enableUserViews)
+            foreach (var folder in standaloneFolders)
             {
             {
-                foreach (var folder in standaloneFolders)
-                {
-                    var collectionFolder = folder as ICollectionFolder;
-                    var folderViewType = collectionFolder == null ? null : collectionFolder.CollectionType;
+                var collectionFolder = folder as ICollectionFolder;
+                var folderViewType = collectionFolder == null ? null : collectionFolder.CollectionType;
 
 
-                    if (UserView.IsUserSpecific(folder))
+                if (UserView.IsUserSpecific(folder))
+                {
+                    list.Add(await GetUserView(folder.Id, folder.Name, folderViewType, true, string.Empty, user, cancellationToken).ConfigureAwait(false));
+                    continue;
+                } 
+                
+                if (enableUserViews)
+                {
+                    if (plainFolderIds.Contains(folder.Id) && UserView.IsEligibleForEnhancedView(folderViewType))
                     {
                     {
-                        list.Add(await GetUserView(folder.Id, folder.Name, folderViewType, true, string.Empty, user, cancellationToken).ConfigureAwait(false));
+                        list.Add(await GetUserView(folder, folderViewType, false, string.Empty, cancellationToken).ConfigureAwait(false));
                     }
                     }
-                    else if (plainFolderIds.Contains(folder.Id) && UserView.IsEligibleForEnhancedView(folderViewType))
+                    else if (_config.Configuration.EnableSharedCollectionViewImage)
                     {
                     {
-                        list.Add(await GetUserView(folder, folderViewType, false, string.Empty, cancellationToken).ConfigureAwait(false));
+                        list.Add(folder);
                     }
                     }
                     else if (!string.IsNullOrWhiteSpace(folderViewType))
                     else if (!string.IsNullOrWhiteSpace(folderViewType))
                     {
                     {
@@ -97,20 +103,10 @@ namespace MediaBrowser.Server.Implementations.Library
                         list.Add(folder);
                         list.Add(folder);
                     }
                     }
                 }
                 }
-            }
-            else
-            {
-                // TODO: Deprecate this whole block
-                foreach (var folder in standaloneFolders)
+                else
                 {
                 {
-                    var collectionFolder = folder as ICollectionFolder;
-                    var folderViewType = collectionFolder == null ? null : collectionFolder.CollectionType;
-
-                    if (UserView.IsUserSpecific(folder))
-                    {
-                        list.Add(await GetUserView(folder.Id, folder.Name, folderViewType, true, string.Empty, user, cancellationToken).ConfigureAwait(false));
-                    }
-                    else if (plainFolderIds.Contains(folder.Id) && UserView.IsEligibleForEnhancedView(folderViewType))
+                    // TODO: Deprecate this whole block
+                    if (plainFolderIds.Contains(folder.Id) && UserView.IsEligibleForEnhancedView(folderViewType))
                     {
                     {
                         list.Add(await GetUserView(folder.Id, folder.Name, folderViewType, false, string.Empty, user, cancellationToken).ConfigureAwait(false));
                         list.Add(await GetUserView(folder.Id, folder.Name, folderViewType, false, string.Empty, user, cancellationToken).ConfigureAwait(false));
                     }
                     }
@@ -203,10 +199,15 @@ namespace MediaBrowser.Server.Implementations.Library
             return GetUserSubView(name, parentId, type, sortName, cancellationToken);
             return GetUserSubView(name, parentId, type, sortName, cancellationToken);
         }
         }
 
 
-        private async Task<UserView> GetUserView(List<ICollectionFolder> parents, string viewType, string sortName, User user, bool enableUserViews, CancellationToken cancellationToken)
+        private async Task<Folder> GetUserView(List<ICollectionFolder> parents, string viewType, string sortName, User user, bool enableUserViews, CancellationToken cancellationToken)
         {
         {
             if (parents.Count == 1 && parents.All(i => string.Equals((enableUserViews ? i.GetViewType(user) : i.CollectionType), viewType, StringComparison.OrdinalIgnoreCase)))
             if (parents.Count == 1 && parents.All(i => string.Equals((enableUserViews ? i.GetViewType(user) : i.CollectionType), viewType, StringComparison.OrdinalIgnoreCase)))
             {
             {
+                if (enableUserViews || _config.Configuration.EnableSharedCollectionViewImage)
+                {
+                    return (Folder)parents[0];
+                }
+
                 var parentId = parents[0].Id;
                 var parentId = parents[0].Id;
 
 
                 var enableRichView = !user.Configuration.PlainFolderViews.Contains(parentId.ToString("N"), StringComparer.OrdinalIgnoreCase);
                 var enableRichView = !user.Configuration.PlainFolderViews.Contains(parentId.ToString("N"), StringComparer.OrdinalIgnoreCase);

+ 1 - 0
MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj

@@ -70,6 +70,7 @@
     <Reference Include="Microsoft.CSharp" />
     <Reference Include="Microsoft.CSharp" />
     <Reference Include="System.Data" />
     <Reference Include="System.Data" />
     <Reference Include="System.Net" />
     <Reference Include="System.Net" />
+    <Reference Include="System.Runtime.Serialization" />
     <Reference Include="System.Security" />
     <Reference Include="System.Security" />
     <Reference Include="System.Web" />
     <Reference Include="System.Web" />
     <Reference Include="System.Xml" />
     <Reference Include="System.Xml" />

+ 20 - 0
MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs

@@ -285,5 +285,25 @@ namespace MediaBrowser.Server.Implementations.Photos
                 return 0;
                 return 0;
             }
             }
         }
         }
+
+        protected async Task<string> CreateSingleImage(List<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType)
+        {
+            var image = itemsWithImages
+                .Where(i => i.HasImage(imageType) && i.GetImageInfo(imageType, 0).IsLocalFile && Path.HasExtension(i.GetImagePath(imageType)))
+                .Select(i => i.GetImagePath(imageType))
+                .FirstOrDefault();
+
+            if (string.IsNullOrWhiteSpace(image))
+            {
+                return null;
+            }
+
+            var ext = Path.GetExtension(image);
+
+            var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ext);
+            File.Copy(image, outputPath);
+
+            return outputPath;
+        }
     }
     }
 }
 }

+ 2 - 17
MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs

@@ -26,24 +26,9 @@ namespace MediaBrowser.Server.Implementations.Photos
             return Task.FromResult(items);
             return Task.FromResult(items);
         }
         }
 
 
-        protected override async Task<string> CreateImage(IHasImages item, List<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
+        protected override Task<string> CreateImage(IHasImages item, List<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
         {
         {
-            var image = itemsWithImages
-                .Where(i => i.HasImage(ImageType.Primary) && i.GetImageInfo(ImageType.Primary, 0).IsLocalFile && Path.HasExtension(i.GetImagePath(ImageType.Primary)))
-                .Select(i => i.GetImagePath(ImageType.Primary))
-                .FirstOrDefault();
-
-            if (string.IsNullOrWhiteSpace(image))
-            {
-                return null;
-            }
-
-            var ext = Path.GetExtension(image);
-
-            var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ext);
-            File.Copy(image, outputPath);
-
-            return outputPath;
+            return CreateSingleImage(itemsWithImages, outputPathWithoutExtension, ImageType.Primary);
         }
         }
     }
     }
 }
 }