فهرست منبع

optimize dlna views

Luke Pulverenti 9 سال پیش
والد
کامیت
e1718a5fa6
1فایلهای تغییر یافته به همراه23 افزوده شده و 26 حذف شده
  1. 23 26
      MediaBrowser.Controller/Entities/UserViewBuilder.cs

+ 23 - 26
MediaBrowser.Controller/Entities/UserViewBuilder.cs

@@ -250,9 +250,16 @@ namespace MediaBrowser.Controller.Entities
         {
             if (query.Recursive)
             {
-                var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }, i => FilterItem(i, query));
+                query.Recursive = true;
+                query.ParentId = parent.Id;
+                query.SetUser(user);
+
+                if (query.IncludeItemTypes.Length == 0)
+                {
+                    query.IncludeItemTypes = new[] { typeof(MusicArtist).Name, typeof(MusicAlbum).Name, typeof(Audio.Audio).Name, typeof(MusicVideo).Name };
+                }
 
-                return PostFilterAndSort(items, parent, null, query);
+                return _libraryManager.GetItemsResult(query);
             }
 
             var list = new List<BaseItem>();
@@ -543,8 +550,13 @@ namespace MediaBrowser.Controller.Entities
 
         private async Task<QueryResult<BaseItem>> GetMovieGenres(Folder parent, User user, InternalItemsQuery query)
         {
-            var tasks = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty })
-                .Where(i => i is Movie)
+            var tasks = parent.QueryRecursive(new InternalItemsQuery(user)
+            {
+                IncludeItemTypes = new[] { typeof(Movie).Name },
+                Recursive = true,
+                EnableTotalRecordCount = false
+
+            }).Items
                 .SelectMany(i => i.Genres)
                 .DistinctNames()
                 .Select(i =>
@@ -681,8 +693,13 @@ namespace MediaBrowser.Controller.Entities
 
         private async Task<QueryResult<BaseItem>> GetTvGenres(Folder parent, User user, InternalItemsQuery query)
         {
-            var tasks = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty })
-                .OfType<Series>()
+            var tasks = parent.QueryRecursive(new InternalItemsQuery(user)
+            {
+                IncludeItemTypes = new[] { typeof(Series).Name },
+                Recursive = true,
+                EnableTotalRecordCount = false
+
+            }).Items
                 .SelectMany(i => i.Genres)
                 .DistinctNames()
                 .Select(i =>
@@ -1935,26 +1952,6 @@ namespace MediaBrowser.Controller.Entities
             return parent.GetRecursiveChildren(user);
         }
 
-        private IEnumerable<BaseItem> GetRecursiveChildren(Folder parent, User user, IEnumerable<string> viewTypes, Func<BaseItem, bool> filter)
-        {
-            if (parent == null || parent is UserView)
-            {
-                if (user == null)
-                {
-                    return GetMediaFolders(null, viewTypes).SelectMany(i => i.GetRecursiveChildren(filter));
-                }
-
-                return GetMediaFolders(user, viewTypes).SelectMany(i => i.GetRecursiveChildren(user, filter));
-            }
-
-            if (user == null)
-            {
-                return parent.GetRecursiveChildren(filter);
-            }
-
-            return parent.GetRecursiveChildren(user, filter);
-        }
-
         private async Task<QueryResult<BaseItem>> GetLiveTvView(Folder queryParent, User user, InternalItemsQuery query)
         {
             if (query.Recursive)