Browse Source

Fix pagination and sorting for folders (#15187)

Tim Eisele 2 days ago
parent
commit
7d1824ea27
1 changed files with 12 additions and 7 deletions
  1. 12 7
      MediaBrowser.Controller/Entities/Folder.cs

+ 12 - 7
MediaBrowser.Controller/Entities/Folder.cs

@@ -715,9 +715,18 @@ namespace MediaBrowser.Controller.Entities
                 }
                 else
                 {
-                    items = GetRecursiveChildren(user, query, out totalCount);
+                    // Save pagination params before clearing them to prevent pagination from happening
+                    // before sorting. PostFilterAndSort will apply pagination after sorting.
+                    var limit = query.Limit;
+                    var startIndex = query.StartIndex;
                     query.Limit = null;
-                    query.StartIndex = null; // override these here as they have already been applied
+                    query.StartIndex = null;
+
+                    items = GetRecursiveChildren(user, query, out totalCount);
+
+                    // Restore pagination params so PostFilterAndSort can apply them after sorting
+                    query.Limit = limit;
+                    query.StartIndex = startIndex;
                 }
 
                 var result = PostFilterAndSort(items, query);
@@ -980,20 +989,16 @@ namespace MediaBrowser.Controller.Entities
             else
             {
                 // need to pass this param to the children.
+                // Note: Don't pass Limit/StartIndex here as pagination should happen after sorting in PostFilterAndSort
                 var childQuery = new InternalItemsQuery
                 {
                     DisplayAlbumFolders = query.DisplayAlbumFolders,
-                    Limit = query.Limit,
-                    StartIndex = query.StartIndex,
                     NameStartsWith = query.NameStartsWith,
                     NameStartsWithOrGreater = query.NameStartsWithOrGreater,
                     NameLessThan = query.NameLessThan
                 };
 
                 items = GetChildren(user, true, out totalItemCount, childQuery).Where(filter);
-
-                query.Limit = null;
-                query.StartIndex = null;
             }
 
             var result = PostFilterAndSort(items, query);