From ecc6fcfbab7006c7c9bfcf76d329c663a2fa5a2c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 3 Jan 2014 15:32:27 -0500 Subject: add custom collection sort orders to edit page --- .../Entities/IHasDisplayOrder.cs | 15 +++++++++++++++ MediaBrowser.Controller/Entities/Movies/BoxSet.cs | 21 ++++++++++++++++++++- MediaBrowser.Controller/Entities/TV/Series.cs | 4 +++- MediaBrowser.Controller/Entities/Video.cs | 11 +++++++++-- .../MediaBrowser.Controller.csproj | 1 + .../Providers/BaseItemXmlParser.cs | 15 +++++++++++++++ 6 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 MediaBrowser.Controller/Entities/IHasDisplayOrder.cs (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/IHasDisplayOrder.cs b/MediaBrowser.Controller/Entities/IHasDisplayOrder.cs new file mode 100644 index 000000000..5e1ae2179 --- /dev/null +++ b/MediaBrowser.Controller/Entities/IHasDisplayOrder.cs @@ -0,0 +1,15 @@ + +namespace MediaBrowser.Controller.Entities +{ + /// + /// Interface IHasDisplayOrder + /// + public interface IHasDisplayOrder + { + /// + /// Gets or sets the display order. + /// + /// The display order. + string DisplayOrder { get; set; } + } +} diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs index 8623e2ff6..c0f7570e8 100644 --- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs +++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs @@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.Entities.Movies /// /// Class BoxSet /// - 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 /// The preferred metadata country code. public string PreferredMetadataCountryCode { get; set; } + /// + /// Gets or sets the display order. + /// + /// The display order. + 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); } } diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index f7e78ccd4..135547a37 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -14,7 +14,7 @@ namespace MediaBrowser.Controller.Entities.TV /// /// Class Series /// - public class Series : Folder, IHasSoundtracks, IHasTrailers, IHasTags, IHasPreferredMetadataLanguage + public class Series : Folder, IHasSoundtracks, IHasTrailers, IHasTags, IHasPreferredMetadataLanguage, IHasDisplayOrder { public List SpecialFeatureIds { get; set; } public List SoundtrackIds { get; set; } @@ -45,6 +45,8 @@ namespace MediaBrowser.Controller.Entities.TV public List RemoteTrailers { get; set; } + public string DisplayOrder { get; set; } + /// /// Gets or sets the tags. /// diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 19cad7948..8ca475650 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/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) { diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index e08361812..707997141 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -85,6 +85,7 @@ + diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs index 799f339f1..ea21e18b0 100644 --- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs +++ b/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()) -- cgit v1.2.3