From 5a496a1fc8d9ee2e728d6f712ae6bdf4862183f1 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 6 May 2016 00:50:39 -0400 Subject: reduce recursive querying --- MediaBrowser.Controller/Entities/BaseItem.cs | 20 +++ MediaBrowser.Controller/Entities/Folder.cs | 4 +- .../Entities/InternalItemsQuery.cs | 7 +- MediaBrowser.Controller/Entities/Movies/BoxSet.cs | 3 +- MediaBrowser.Controller/Entities/Video.cs | 147 +++++++++++---------- 5 files changed, 104 insertions(+), 77 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 6bf55e108c..2e968c8803 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -44,6 +44,9 @@ namespace MediaBrowser.Controller.Entities ImageInfos = new List(); } + public static readonly char[] SlugReplaceChars = { '?', '/', '&' }; + public static char SlugChar = '-'; + /// /// The supported image extensions /// @@ -125,6 +128,21 @@ namespace MediaBrowser.Controller.Entities } } + [IgnoreDataMember] + public string SlugName + { + get + { + var name = Name; + if (string.IsNullOrWhiteSpace(name)) + { + return string.Empty; + } + + return SlugReplaceChars.Aggregate(name, (current, c) => current.Replace(c, SlugChar)); + } + } + public string OriginalTitle { get; set; } /// @@ -728,12 +746,14 @@ namespace MediaBrowser.Controller.Entities /// Gets or sets the critic rating. /// /// The critic rating. + [IgnoreDataMember] public float? CriticRating { get; set; } /// /// Gets or sets the critic rating summary. /// /// The critic rating summary. + [IgnoreDataMember] public string CriticRatingSummary { get; set; } /// diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index f57e2fa17a..d9c0b7bfe3 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -707,8 +707,8 @@ namespace MediaBrowser.Controller.Entities { return ItemRepository.GetItemIdsList(new InternalItemsQuery { - ParentId = Id - + ParentId = Id, + GroupByPresentationUniqueKey = false }); } diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs index 6838fde714..2615f351ad 100644 --- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs +++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs @@ -49,6 +49,7 @@ namespace MediaBrowser.Controller.Entities public string PresentationUniqueKey { get; set; } public string Path { get; set; } public string Name { get; set; } + public string SlugName { get; set; } public string Person { get; set; } public string[] PersonIds { get; set; } @@ -133,9 +134,13 @@ namespace MediaBrowser.Controller.Entities public string[] AlbumNames { get; set; } public string[] ArtistNames { get; set; } - + + public bool GroupByPresentationUniqueKey { get; set; } + public InternalItemsQuery() { + GroupByPresentationUniqueKey = true; + AlbumNames = new string[] { }; ArtistNames = new string[] { }; diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs index cd3e07ea38..09a9d97bcf 100644 --- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs +++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs @@ -8,6 +8,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; +using MediaBrowser.Controller.Entities.Audio; namespace MediaBrowser.Controller.Entities.Movies { @@ -118,7 +119,7 @@ namespace MediaBrowser.Controller.Entities.Movies // Gather all possible ratings var ratings = GetRecursiveChildren() .Concat(GetLinkedChildren()) - .Where(i => i is Movie || i is Series) + .Where(i => i is Movie || i is Series || i is MusicAlbum || i is Game) .Select(i => i.OfficialRating) .Where(i => !string.IsNullOrEmpty(i)) .Distinct(StringComparer.OrdinalIgnoreCase) diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 67b710534c..6a9d7cb511 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -28,7 +28,8 @@ namespace MediaBrowser.Controller.Entities IThemeMedia, IArchivable { - public Guid? PrimaryVersionId { get; set; } + [IgnoreDataMember] + public string PrimaryVersionId { get; set; } public List AdditionalParts { get; set; } public List LocalAlternateVersions { get; set; } @@ -49,9 +50,9 @@ namespace MediaBrowser.Controller.Entities { get { - if (PrimaryVersionId.HasValue) + if (!string.IsNullOrWhiteSpace(PrimaryVersionId)) { - return PrimaryVersionId.Value.ToString("N"); + return PrimaryVersionId; } return base.PresentationUniqueKey; @@ -70,6 +71,72 @@ namespace MediaBrowser.Controller.Entities /// The timestamp. public TransportStreamTimestamp? Timestamp { get; set; } + /// + /// Gets or sets the subtitle paths. + /// + /// The subtitle paths. + public List SubtitleFiles { get; set; } + + /// + /// Gets or sets a value indicating whether this instance has subtitles. + /// + /// true if this instance has subtitles; otherwise, false. + public bool HasSubtitles { get; set; } + + public bool IsPlaceHolder { get; set; } + public bool IsShortcut { get; set; } + public string ShortcutPath { get; set; } + + /// + /// Gets or sets the video bit rate. + /// + /// The video bit rate. + public int? VideoBitRate { get; set; } + + /// + /// Gets or sets the default index of the video stream. + /// + /// The default index of the video stream. + public int? DefaultVideoStreamIndex { get; set; } + + /// + /// Gets or sets the type of the video. + /// + /// The type of the video. + public VideoType VideoType { get; set; } + + /// + /// Gets or sets the type of the iso. + /// + /// The type of the iso. + public IsoType? IsoType { get; set; } + + /// + /// Gets or sets the video3 D format. + /// + /// The video3 D format. + public Video3DFormat? Video3DFormat { get; set; } + + /// + /// If the video is a folder-rip, this will hold the file list for the largest playlist + /// + public List PlayableStreamFileNames { get; set; } + + /// + /// Gets the playable stream files. + /// + /// List{System.String}. + public List GetPlayableStreamFiles() + { + return GetPlayableStreamFiles(Path); + } + + /// + /// Gets or sets the aspect ratio. + /// + /// The aspect ratio. + public string AspectRatio { get; set; } + public Video() { PlayableStreamFileNames = new List(); @@ -104,9 +171,9 @@ namespace MediaBrowser.Controller.Entities { get { - if (PrimaryVersionId.HasValue) + if (!string.IsNullOrWhiteSpace(PrimaryVersionId)) { - var item = LibraryManager.GetItemById(PrimaryVersionId.Value) as Video; + var item = LibraryManager.GetItemById(PrimaryVersionId) as Video; if (item != null) { return item.MediaSourceCount; @@ -238,72 +305,6 @@ namespace MediaBrowser.Controller.Entities .OrderBy(i => i.SortName); } - /// - /// Gets or sets the subtitle paths. - /// - /// The subtitle paths. - public List SubtitleFiles { get; set; } - - /// - /// Gets or sets a value indicating whether this instance has subtitles. - /// - /// true if this instance has subtitles; otherwise, false. - public bool HasSubtitles { get; set; } - - public bool IsPlaceHolder { get; set; } - public bool IsShortcut { get; set; } - public string ShortcutPath { get; set; } - - /// - /// Gets or sets the video bit rate. - /// - /// The video bit rate. - public int? VideoBitRate { get; set; } - - /// - /// Gets or sets the default index of the video stream. - /// - /// The default index of the video stream. - public int? DefaultVideoStreamIndex { get; set; } - - /// - /// Gets or sets the type of the video. - /// - /// The type of the video. - public VideoType VideoType { get; set; } - - /// - /// Gets or sets the type of the iso. - /// - /// The type of the iso. - public IsoType? IsoType { get; set; } - - /// - /// Gets or sets the video3 D format. - /// - /// The video3 D format. - public Video3DFormat? Video3DFormat { get; set; } - - /// - /// If the video is a folder-rip, this will hold the file list for the largest playlist - /// - public List PlayableStreamFileNames { get; set; } - - /// - /// Gets the playable stream files. - /// - /// List{System.String}. - public List GetPlayableStreamFiles() - { - return GetPlayableStreamFiles(Path); - } - - /// - /// Gets or sets the aspect ratio. - /// - /// The aspect ratio. - public string AspectRatio { get; set; } - [IgnoreDataMember] public override string ContainingFolderPath { @@ -520,9 +521,9 @@ namespace MediaBrowser.Controller.Entities list.Add(new Tuple(this, MediaSourceType.Default)); list.AddRange(GetLinkedAlternateVersions().Select(i => new Tuple(i, MediaSourceType.Grouping))); - if (PrimaryVersionId.HasValue) + if (!string.IsNullOrWhiteSpace(PrimaryVersionId)) { - var primary = LibraryManager.GetItemById(PrimaryVersionId.Value) as Video; + var primary = LibraryManager.GetItemById(PrimaryVersionId) as Video; if (primary != null) { var existingIds = list.Select(i => i.Item1.Id).ToList(); -- cgit v1.2.3