瀏覽代碼

add custom collection sort orders to edit page

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

+ 6 - 0
MediaBrowser.Api/ItemUpdateService.cs

@@ -318,6 +318,12 @@ namespace MediaBrowser.Api
                 hasLang.PreferredMetadataCountryCode = request.PreferredMetadataCountryCode;
                 hasLang.PreferredMetadataLanguage = request.PreferredMetadataLanguage;
             }
+
+            var hasDisplayOrder = item as IHasDisplayOrder;
+            if (hasDisplayOrder != null)
+            {
+                hasDisplayOrder.DisplayOrder = request.DisplayOrder;
+            }
             
             var hasAspectRatio = item as IHasAspectRatio;
             if (hasAspectRatio != null)

+ 15 - 0
MediaBrowser.Controller/Entities/IHasDisplayOrder.cs

@@ -0,0 +1,15 @@
+
+namespace MediaBrowser.Controller.Entities
+{
+    /// <summary>
+    /// Interface IHasDisplayOrder
+    /// </summary>
+    public interface IHasDisplayOrder
+    {
+        /// <summary>
+        /// Gets or sets the display order.
+        /// </summary>
+        /// <value>The display order.</value>
+        string DisplayOrder { get; set; }
+    }
+}

+ 20 - 1
MediaBrowser.Controller/Entities/Movies/BoxSet.cs

@@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.Entities.Movies
     /// <summary>
     /// Class BoxSet
     /// </summary>
-    public class BoxSet : Folder, IHasTrailers, IHasTags, IHasPreferredMetadataLanguage
+    public class BoxSet : Folder, IHasTrailers, IHasTags, IHasPreferredMetadataLanguage, IHasDisplayOrder
     {
         public BoxSet()
         {
@@ -40,6 +40,12 @@ namespace MediaBrowser.Controller.Entities.Movies
         /// <value>The preferred metadata country code.</value>
         public string PreferredMetadataCountryCode { get; set; }
 
+        /// <summary>
+        /// Gets or sets the display order.
+        /// </summary>
+        /// <value>The display order.</value>
+        public string DisplayOrder { get; set; }
+
         protected override bool GetBlockUnratedValue(UserConfiguration config)
         {
             return config.BlockUnratedMovies;
@@ -49,6 +55,19 @@ namespace MediaBrowser.Controller.Entities.Movies
         {
             var children = base.GetChildren(user, includeLinkedChildren);
 
+            if (string.Equals(DisplayOrder, "SortName", StringComparison.OrdinalIgnoreCase))
+            {
+                // Sort by name
+                return LibraryManager.Sort(children, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
+            }
+
+            if (string.Equals(DisplayOrder, "PremiereDate", StringComparison.OrdinalIgnoreCase))
+            {
+                // Sort by release date
+                return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
+            }
+            
+            // Default sorting
             return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
         }
     }

+ 3 - 1
MediaBrowser.Controller/Entities/TV/Series.cs

@@ -14,7 +14,7 @@ namespace MediaBrowser.Controller.Entities.TV
     /// <summary>
     /// Class Series
     /// </summary>
-    public class Series : Folder, IHasSoundtracks, IHasTrailers, IHasTags, IHasPreferredMetadataLanguage
+    public class Series : Folder, IHasSoundtracks, IHasTrailers, IHasTags, IHasPreferredMetadataLanguage, IHasDisplayOrder
     {
         public List<Guid> SpecialFeatureIds { get; set; }
         public List<Guid> SoundtrackIds { get; set; }
@@ -45,6 +45,8 @@ namespace MediaBrowser.Controller.Entities.TV
         
         public List<MediaUrl> RemoteTrailers { get; set; }
 
+        public string DisplayOrder { get; set; }
+        
         /// <summary>
         /// Gets or sets the tags.
         /// </summary>

+ 9 - 2
MediaBrowser.Controller/Entities/Video.cs

@@ -238,7 +238,7 @@ namespace MediaBrowser.Controller.Entities
 
                 if (string.IsNullOrEmpty(parentPath))
                 {
-                    throw new ApplicationException("Unable to get parent path info from " + path);
+                    throw new IOException("Unable to get parent path info from " + path);
                 }
 
                 files = new DirectoryInfo(parentPath)
@@ -247,7 +247,14 @@ namespace MediaBrowser.Controller.Entities
             }
             else
             {
-                files = ResolveArgs.FileSystemChildren.Where(i =>
+                var resolveArgs = ResolveArgs;
+
+                if (resolveArgs == null)
+                {
+                    throw new IOException("ResolveArgs are null for " + path);
+                }
+
+                files = resolveArgs.FileSystemChildren.Where(i =>
                 {
                     if ((i.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
                     {

+ 1 - 0
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -85,6 +85,7 @@
     <Compile Include="Entities\IHasAspectRatio.cs" />
     <Compile Include="Entities\IHasBudget.cs" />
     <Compile Include="Entities\IHasCriticRating.cs" />
+    <Compile Include="Entities\IHasDisplayOrder.cs" />
     <Compile Include="Entities\IHasImages.cs" />
     <Compile Include="Entities\IHasMediaStreams.cs" />
     <Compile Include="Entities\IHasPreferredMetadataLanguage.cs" />

+ 15 - 0
MediaBrowser.Controller/Providers/BaseItemXmlParser.cs

@@ -532,6 +532,21 @@ namespace MediaBrowser.Controller.Providers
                         break;
                     }
 
+                case "DisplayOrder":
+                    {
+                        var val = reader.ReadElementContentAsString();
+
+                        var hasDisplayOrder = item as IHasDisplayOrder;
+                        if (hasDisplayOrder != null)
+                        {
+                            if (!string.IsNullOrWhiteSpace(val))
+                            {
+                                hasDisplayOrder.DisplayOrder = val;
+                            }
+                        }
+                        break;
+                    }
+
                 case "Trailers":
                     {
                         using (var subtree = reader.ReadSubtree())

+ 6 - 0
MediaBrowser.Model/Dto/BaseItemDto.cs

@@ -392,6 +392,12 @@ namespace MediaBrowser.Model.Dto
         /// <value>The album.</value>
         public string Album { get; set; }
 
+        /// <summary>
+        /// Gets or sets the display order.
+        /// </summary>
+        /// <value>The display order.</value>
+        public string DisplayOrder { get; set; }
+        
         /// <summary>
         /// Gets or sets the album id.
         /// </summary>

+ 5 - 1
MediaBrowser.Providers/ImagesByName/ImageUtils.cs

@@ -60,7 +60,11 @@ namespace MediaBrowser.Providers.ImagesByName
 
         private static string GetComparableName(string name)
         {
-            return name.Replace(" ", string.Empty).Replace(".", string.Empty).Replace("&", string.Empty).Replace("!", string.Empty);
+            return name.Replace(" ", string.Empty)
+                .Replace(".", string.Empty)
+                .Replace("&", string.Empty)
+                .Replace("!", string.Empty)
+                .Replace(",", string.Empty);
         }
 
         public static IEnumerable<string> GetAvailableImages(string file)

+ 0 - 2
MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs

@@ -2,8 +2,6 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Library;
-using MediaBrowser.Providers.Movies;
-using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Text;

+ 7 - 0
MediaBrowser.Providers/Savers/XmlSaverHelpers.cs

@@ -31,6 +31,7 @@ namespace MediaBrowser.Providers.Savers
                     "CriticRating",
                     "CriticRatingSummary",
                     "DeathDate",
+                    "DisplayOrder",
                     "EndDate",
                     "Genres",
                     "Genre",
@@ -284,6 +285,12 @@ namespace MediaBrowser.Providers.Savers
                 }
             }
 
+            var hasDisplayOrder = item as IHasDisplayOrder;
+            if (hasDisplayOrder != null && !string.IsNullOrEmpty(hasDisplayOrder.DisplayOrder))
+            {
+                builder.Append("<DisplayOrder>" + SecurityElement.Escape(hasDisplayOrder.DisplayOrder) + "</DisplayOrder>");
+            }
+            
             var hasBudget = item as IHasBudget;
             if (hasBudget != null)
             {

+ 6 - 0
MediaBrowser.Server.Implementations/Dto/DtoService.cs

@@ -764,6 +764,12 @@ namespace MediaBrowser.Server.Implementations.Dto
                 dto.LocalTrailerCount = hasTrailers.LocalTrailerIds.Count;
             }
 
+            var hasDisplayOrder = item as IHasDisplayOrder;
+            if (hasDisplayOrder != null)
+            {
+                dto.DisplayOrder = hasDisplayOrder.DisplayOrder;
+            }
+            
             if (fields.Contains(ItemFields.RemoteTrailers))
             {
                 dto.RemoteTrailers = hasTrailers != null ?