aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortheguymadmax <171496228+theguymadmax@users.noreply.github.com>2026-01-28 12:11:29 -0500
committerBond_009 <bond.009@outlook.com>2026-01-28 12:11:29 -0500
commit815a153b940aa5507923f1b22b73cd146367e1ea (patch)
treed399cc5e4181a79201ff0fe91cd7e4327aa76948
parent0c274af72c1d223c0fea7f4f4ac99e04f1e1e904 (diff)
Backport pull request #16098 from jellyfin/release-10.11.z
Fix random sort returning duplicate items Original-merge: a37ead86df161d6a50d280dcac6f11294301c7e8 Merged-by: nielsvanvelzen <nielsvanvelzen@users.noreply.github.com> Backported-by: Bond_009 <bond.009@outlook.com>
-rw-r--r--Jellyfin.Server.Implementations/Item/BaseItemRepository.cs19
1 files changed, 19 insertions, 0 deletions
diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
index 338544ab9..5bb4494dd 100644
--- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
+++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
@@ -295,6 +295,25 @@ public sealed class BaseItemRepository
dbQuery = ApplyGroupingFilter(context, dbQuery, filter);
dbQuery = ApplyQueryPaging(dbQuery, filter);
+
+ var hasRandomSort = filter.OrderBy.Any(e => e.OrderBy == ItemSortBy.Random);
+ if (hasRandomSort)
+ {
+ var orderedIds = dbQuery.Select(e => e.Id).ToList();
+ if (orderedIds.Count == 0)
+ {
+ return Array.Empty<BaseItemDto>();
+ }
+
+ var itemsById = ApplyNavigations(context.BaseItems.Where(e => orderedIds.Contains(e.Id)), filter)
+ .AsEnumerable()
+ .Select(w => DeserializeBaseItem(w, filter.SkipDeserialization))
+ .Where(dto => dto is not null)
+ .ToDictionary(i => i!.Id);
+
+ return orderedIds.Where(itemsById.ContainsKey).Select(id => itemsById[id]).ToArray()!;
+ }
+
dbQuery = ApplyNavigations(dbQuery, filter);
return dbQuery.AsEnumerable().Where(e => e is not null).Select(w => DeserializeBaseItem(w, filter.SkipDeserialization)).Where(dto => dto is not null).ToArray()!;