diff options
| author | theguymadmax <171496228+theguymadmax@users.noreply.github.com> | 2026-01-28 12:11:29 -0500 |
|---|---|---|
| committer | Bond_009 <bond.009@outlook.com> | 2026-01-28 12:11:29 -0500 |
| commit | 815a153b940aa5507923f1b22b73cd146367e1ea (patch) | |
| tree | d399cc5e4181a79201ff0fe91cd7e4327aa76948 | |
| parent | 0c274af72c1d223c0fea7f4f4ac99e04f1e1e904 (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.cs | 19 |
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()!; |
