Browse Source

Backport pull request #15187 from jellyfin/release-10.11.z

Fix pagination and sorting for folders

Original-merge: 7d1824ea27093322d5e8316ee38f375129f40386

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
Shadowghost 1 week ago
parent
commit
08fd175f5a
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);