Browse Source

reduced some virtualization

Luke Pulverenti 12 years ago
parent
commit
0e4972f7e6

+ 8 - 5
MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs

@@ -1,7 +1,8 @@
-using System.Collections.Generic;
+using MediaBrowser.Model.Entities;
+using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Runtime.Serialization;
-using MediaBrowser.Model.Entities;
 
 namespace MediaBrowser.Controller.Entities.Audio
 {
@@ -79,9 +80,11 @@ namespace MediaBrowser.Controller.Entities.Audio
         {
             get
             {
-                var child = Children.FirstOrDefault();
-
-                return child == null ? base.Genres : child.Genres;
+                return Children
+                    .OfType<Audio>()
+                    .SelectMany(i => i.Genres)
+                    .Distinct(StringComparer.OrdinalIgnoreCase)
+                    .ToList();
             }
             set
             {

+ 4 - 3
MediaBrowser.Controller/Entities/Audio/MusicArtist.cs

@@ -14,9 +14,10 @@ namespace MediaBrowser.Controller.Entities.Audio
             get
             {
                 return Children
-                .SelectMany(i => i.Genres)
-                .Distinct(StringComparer.OrdinalIgnoreCase)
-                .ToList();
+                    .OfType<MusicAlbum>()
+                    .SelectMany(i => i.Genres)
+                    .Distinct(StringComparer.OrdinalIgnoreCase)
+                    .ToList();
             }
             set
             {

+ 28 - 4
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -469,7 +469,7 @@ namespace MediaBrowser.Controller.Entities
         /// Gets or sets the official rating.
         /// </summary>
         /// <value>The official rating.</value>
-        public virtual string OfficialRating { get; set; }
+        public string OfficialRating { get; set; }
 
         /// <summary>
         /// Gets or sets the official rating description.
@@ -481,7 +481,7 @@ namespace MediaBrowser.Controller.Entities
         /// Gets or sets the custom rating.
         /// </summary>
         /// <value>The custom rating.</value>
-        public virtual string CustomRating { get; set; }
+        public string CustomRating { get; set; }
 
         /// <summary>
         /// Gets or sets the language.
@@ -521,6 +521,18 @@ namespace MediaBrowser.Controller.Entities
             get { return People; }
         }
 
+        [IgnoreDataMember]
+        public virtual IEnumerable<string> AllStudios
+        {
+            get { return Studios; }
+        }
+
+        [IgnoreDataMember]
+        public virtual IEnumerable<string> AllGenres
+        {
+            get { return Genres; }
+        }
+        
         /// <summary>
         /// Gets or sets the studios.
         /// </summary>
@@ -620,6 +632,18 @@ namespace MediaBrowser.Controller.Entities
         public List<Guid> ThemeVideoIds { get; set; }
         public List<Guid> LocalTrailerIds { get; set; }
 
+        [IgnoreDataMember]
+        public virtual string OfficialRatingForComparison
+        {
+            get { return OfficialRating; }
+        }
+
+        [IgnoreDataMember]
+        public virtual string CustomRatingForComparison
+        {
+            get { return CustomRating; }
+        }
+
         /// <summary>
         /// Loads local trailers from the file system
         /// </summary>
@@ -992,11 +1016,11 @@ namespace MediaBrowser.Controller.Entities
                 return true;
             }
 
-            var rating = CustomRating;
+            var rating = CustomRatingForComparison;
 
             if (string.IsNullOrEmpty(rating))
             {
-                rating = OfficialRating;
+                rating = OfficialRatingForComparison;
             }
             
             if (string.IsNullOrEmpty(rating))

+ 10 - 13
MediaBrowser.Controller/Entities/Folder.cs

@@ -126,20 +126,17 @@ namespace MediaBrowser.Controller.Entities
         /// <summary>
         /// Never want folders to be blocked by "BlockNotRated"
         /// </summary>
-        public override string OfficialRating
+        [IgnoreDataMember]
+        public override string OfficialRatingForComparison
         {
             get
             {
                 if (this is Series)
                 {
-                    return base.OfficialRating;
+                    return base.OfficialRatingForComparison;
                 }
 
-                return !string.IsNullOrEmpty(base.OfficialRating) ? base.OfficialRating : "None";
-            }
-            set
-            {
-                base.OfficialRating = value;
+                return !string.IsNullOrEmpty(base.OfficialRatingForComparison) ? base.OfficialRatingForComparison : "None";
             }
         }
 
@@ -316,9 +313,9 @@ namespace MediaBrowser.Controller.Entities
             {
                 var indexName = LocalizedStrings.Instance.GetString("StudioDispPref");
 
-                var candidates = GetRecursiveChildren(user).Where(i => i.IncludeInIndex && i.Studios != null).ToList();
+                var candidates = GetRecursiveChildren(user).Where(i => i.IncludeInIndex).ToList();
 
-                return candidates.AsParallel().SelectMany(i => i.Studios)
+                return candidates.AsParallel().SelectMany(i => i.AllStudios)
                     .Distinct()
                     .Select(i =>
                     {
@@ -338,7 +335,7 @@ namespace MediaBrowser.Controller.Entities
                         }
                     })
                     .Where(i => i != null)
-                    .Select(ndx => new IndexFolder(this, ndx, candidates.Where(i => i.Studios.Any(s => s.Equals(ndx.Name, StringComparison.OrdinalIgnoreCase))), indexName));
+                    .Select(ndx => new IndexFolder(this, ndx, candidates.Where(i => i.AllStudios.Any(s => s.Equals(ndx.Name, StringComparison.OrdinalIgnoreCase))), indexName));
             }
         }
 
@@ -356,9 +353,9 @@ namespace MediaBrowser.Controller.Entities
                 var indexName = LocalizedStrings.Instance.GetString("GenreDispPref");
 
                 //we need a copy of this so we don't double-recurse
-                var candidates = GetRecursiveChildren(user).Where(i => i.IncludeInIndex && i.Genres != null).ToList();
+                var candidates = GetRecursiveChildren(user).Where(i => i.IncludeInIndex).ToList();
 
-                return candidates.AsParallel().SelectMany(i => i.Genres)
+                return candidates.AsParallel().SelectMany(i => i.AllGenres)
                     .Distinct()
                     .Select(i =>
                         {
@@ -378,7 +375,7 @@ namespace MediaBrowser.Controller.Entities
                             }
                         })
                     .Where(i => i != null)
-                    .Select(genre => new IndexFolder(this, genre, candidates.Where(i => i.Genres.Any(g => g.Equals(genre.Name, StringComparison.OrdinalIgnoreCase))), indexName)
+                    .Select(genre => new IndexFolder(this, genre, candidates.Where(i => i.AllGenres.Any(g => g.Equals(genre.Name, StringComparison.OrdinalIgnoreCase))), indexName)
                 );
             }
         }

+ 1 - 1
MediaBrowser.Controller/Entities/IndexFolder.cs

@@ -181,7 +181,7 @@ namespace MediaBrowser.Controller.Entities
                 ForcedSortName = ShadowItem.SortName;
                 Genres = ShadowItem.Genres;
                 Studios = ShadowItem.Studios;
-                OfficialRating = ShadowItem.OfficialRating;
+                OfficialRating = ShadowItem.OfficialRatingForComparison;
                 BackdropImagePaths = ShadowItem.BackdropImagePaths;
                 Images = ShadowItem.Images;
                 Overview = ShadowItem.Overview;

+ 13 - 30
MediaBrowser.Controller/Entities/TV/Episode.cs

@@ -73,59 +73,42 @@ namespace MediaBrowser.Controller.Entities.TV
             }
         }
 
-        /// <summary>
-        /// Gets or sets the studios.
-        /// </summary>
-        /// <value>The studios.</value>
         [IgnoreDataMember]
-        public override List<string> Studios
+        public override IEnumerable<string> AllGenres
         {
             get
             {
-                return Series != null ? Series.Studios : null;
-            }
-            set
-            {
-                base.Studios = value;
+                if (Genres == null) return Series != null ? Series.Genres : Genres;
+                return Series != null && Series.Genres != null ? Genres.Concat(Series.Genres) : base.AllGenres;
             }
         }
 
-        /// <summary>
-        /// Gets or sets the genres.
-        /// </summary>
-        /// <value>The genres.</value>
         [IgnoreDataMember]
-        public override List<string> Genres
+        public override IEnumerable<string> AllStudios
         {
-            get { return Series != null ? Series.Genres : null; }
-            set
+            get
             {
-                base.Genres = value;
+                if (Studios == null) return Series != null ? Series.Studios : Studios;
+                return Series != null && Series.Studios != null ? Studios.Concat(Series.Studios) : base.AllStudios;
             }
         }
 
         /// <summary>
         /// Our rating comes from our series
         /// </summary>
-        public override string OfficialRating
+        [IgnoreDataMember]
+        public override string OfficialRatingForComparison
         {
-            get { return Series != null ? Series.OfficialRating : base.OfficialRating; }
-            set
-            {
-                base.OfficialRating = value;
-            }
+            get { return Series != null ? Series.OfficialRatingForComparison : base.OfficialRatingForComparison; }
         }
 
         /// <summary>
         /// Our rating comes from our series
         /// </summary>
-        public override string CustomRating
+        [IgnoreDataMember]
+        public override string CustomRatingForComparison
         {
-            get { return Series != null ? Series.CustomRating : base.CustomRating; }
-            set
-            {
-                base.CustomRating = value;
-            }
+            get { return Series != null ? Series.CustomRatingForComparison : base.CustomRatingForComparison; }
         }
 
         /// <summary>

+ 6 - 12
MediaBrowser.Controller/Entities/TV/Season.cs

@@ -96,25 +96,19 @@ namespace MediaBrowser.Controller.Entities.TV
         /// <summary>
         /// Our rating comes from our series
         /// </summary>
-        public override string OfficialRating
+        [IgnoreDataMember]
+        public override string OfficialRatingForComparison
         {
-            get { return Series != null ? Series.OfficialRating : base.OfficialRating; }
-            set
-            {
-                base.OfficialRating = value;
-            }
+            get { return Series != null ? Series.OfficialRatingForComparison : base.OfficialRatingForComparison; }
         }
 
         /// <summary>
         /// Our rating comes from our series
         /// </summary>
-        public override string CustomRating
+        [IgnoreDataMember]
+        public override string CustomRatingForComparison
         {
-            get { return Series != null ? Series.CustomRating : base.CustomRating; }
-            set
-            {
-                base.CustomRating = value;
-            }
+            get { return Series != null ? Series.CustomRatingForComparison : base.CustomRatingForComparison; }
         }
 
         /// <summary>