diff options
Diffstat (limited to 'MediaBrowser.Controller/Entities')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Audio/Audio.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs | 9 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 51 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/IndexFolder.cs | 4 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Episode.cs | 9 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Season.cs | 9 |
6 files changed, 88 insertions, 4 deletions
diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs index 511b589e5..d629ec4d7 100644 --- a/MediaBrowser.Controller/Entities/Audio/Audio.cs +++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs @@ -74,5 +74,15 @@ namespace MediaBrowser.Controller.Entities.Audio return Model.Entities.MediaType.Audio; } } + + /// <summary> + /// Creates the name of the sort. + /// </summary> + /// <returns>System.String.</returns> + protected override string CreateSortName() + { + return (ProductionYear != null ? ProductionYear.Value.ToString("000-") : "") + + (IndexNumber != null ? IndexNumber.Value.ToString("0000 - ") : "") + Name; + } } } diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs index 9e4e3c542..e9f222016 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs @@ -129,5 +129,14 @@ namespace MediaBrowser.Controller.Entities.Audio base.Studios = value; } } + + /// <summary> + /// Creates the name of the sort. + /// </summary> + /// <returns>System.String.</returns> + protected override string CreateSortName() + { + return ProductionYear != null ? ProductionYear.Value.ToString("0000") : Name; + } } } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index a69b423ac..4f34f2b67 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -371,10 +371,57 @@ namespace MediaBrowser.Controller.Entities } /// <summary> + /// Gets or sets the name of the forced sort. + /// </summary> + /// <value>The name of the forced sort.</value> + public string ForcedSortName { get; set; } + + private string _sortName; + /// <summary> /// Gets or sets the name of the sort. /// </summary> /// <value>The name of the sort.</value> - public string SortName { get; set; } + [IgnoreDataMember] + public string SortName + { + get + { + return ForcedSortName ?? _sortName ?? (_sortName = CreateSortName()); + } + } + + /// <summary> + /// Creates the name of the sort. + /// </summary> + /// <returns>System.String.</returns> + protected virtual string CreateSortName() + { + if (Name == null) return null; //some items may not have name filled in properly + + var sortable = Name.Trim().ToLower(); + sortable = ConfigurationManager.Configuration.SortRemoveCharacters.Aggregate(sortable, (current, search) => current.Replace(search.ToLower(), string.Empty)); + + sortable = ConfigurationManager.Configuration.SortReplaceCharacters.Aggregate(sortable, (current, search) => current.Replace(search.ToLower(), " ")); + + foreach (var search in ConfigurationManager.Configuration.SortRemoveWords) + { + var searchLower = search.ToLower(); + // Remove from beginning if a space follows + if (sortable.StartsWith(searchLower + " ")) + { + sortable = sortable.Remove(0, searchLower.Length + 1); + } + // Remove from middle if surrounded by spaces + sortable = sortable.Replace(" " + searchLower + " ", " "); + + // Remove from end if followed by a space + if (sortable.EndsWith(" " + searchLower)) + { + sortable = sortable.Remove(sortable.Length - (searchLower.Length + 1)); + } + } + return sortable; + } /// <summary> /// Gets or sets the parent. @@ -686,7 +733,7 @@ namespace MediaBrowser.Controller.Entities public virtual void ClearMetaValues() { Images = null; - SortName = null; + ForcedSortName = null; PremiereDate = null; BackdropImagePaths = null; OfficialRating = null; diff --git a/MediaBrowser.Controller/Entities/IndexFolder.cs b/MediaBrowser.Controller/Entities/IndexFolder.cs index 013db4853..637c4195a 100644 --- a/MediaBrowser.Controller/Entities/IndexFolder.cs +++ b/MediaBrowser.Controller/Entities/IndexFolder.cs @@ -28,7 +28,7 @@ namespace MediaBrowser.Controller.Entities GroupContents = groupContents; if (shadow == null) { - Name = SortName = "<Unknown>"; + Name = ForcedSortName = "<Unknown>"; } else { @@ -167,7 +167,7 @@ namespace MediaBrowser.Controller.Entities if (ShadowItem != null) { Name = ShadowItem.Name; - SortName = ShadowItem.SortName; + ForcedSortName = ShadowItem.SortName; Genres = ShadowItem.Genres; Studios = ShadowItem.Studios; OfficialRating = ShadowItem.OfficialRating; diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs index 854b9d018..1ec3e97a9 100644 --- a/MediaBrowser.Controller/Entities/TV/Episode.cs +++ b/MediaBrowser.Controller/Entities/TV/Episode.cs @@ -159,5 +159,14 @@ namespace MediaBrowser.Controller.Entities.TV get { return _season ?? (_season = FindParent<Season>()); } } + /// <summary> + /// Creates the name of the sort. + /// </summary> + /// <returns>System.String.</returns> + protected override string CreateSortName() + { + return (ParentIndexNumber != null ? ParentIndexNumber.Value.ToString("000-") : "") + + (IndexNumber != null ? IndexNumber.Value.ToString("0000 - ") : "") + Name; + } } } diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index f0a696df1..20c2ee1fe 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -138,5 +138,14 @@ namespace MediaBrowser.Controller.Entities.TV return args; } + + /// <summary> + /// Creates the name of the sort. + /// </summary> + /// <returns>System.String.</returns> + protected override string CreateSortName() + { + return IndexNumber != null ? IndexNumber.Value.ToString("0000") : Name; + } } } |
