|
@@ -7,11 +7,8 @@
|
|
|
using System;
|
|
|
using System.Collections.Concurrent;
|
|
|
using System.Collections.Generic;
|
|
|
-using System.Collections.Immutable;
|
|
|
using System.Globalization;
|
|
|
-using System.IO;
|
|
|
using System.Linq;
|
|
|
-using System.Linq.Expressions;
|
|
|
using System.Reflection;
|
|
|
using System.Text;
|
|
|
using System.Text.Json;
|
|
@@ -1209,45 +1206,6 @@ public sealed class BaseItemRepository
|
|
|
return query.IncludeItemTypes.Length == 0 || query.IncludeItemTypes.Contains(type);
|
|
|
}
|
|
|
|
|
|
- private Expression<Func<BaseItemEntity, object>> MapOrderByField(ItemSortBy sortBy, InternalItemsQuery query)
|
|
|
- {
|
|
|
-#pragma warning disable CS8603 // Possible null reference return.
|
|
|
- return sortBy switch
|
|
|
- {
|
|
|
- ItemSortBy.AirTime => e => e.SortName, // TODO
|
|
|
- ItemSortBy.Runtime => e => e.RunTimeTicks,
|
|
|
- ItemSortBy.Random => e => EF.Functions.Random(),
|
|
|
- ItemSortBy.DatePlayed => e => e.UserData!.FirstOrDefault(f => f.UserId == query.User!.Id)!.LastPlayedDate,
|
|
|
- ItemSortBy.PlayCount => e => e.UserData!.FirstOrDefault(f => f.UserId == query.User!.Id)!.PlayCount,
|
|
|
- ItemSortBy.IsFavoriteOrLiked => e => e.UserData!.FirstOrDefault(f => f.UserId == query.User!.Id)!.IsFavorite,
|
|
|
- ItemSortBy.IsFolder => e => e.IsFolder,
|
|
|
- ItemSortBy.IsPlayed => e => e.UserData!.FirstOrDefault(f => f.UserId == query.User!.Id)!.Played,
|
|
|
- ItemSortBy.IsUnplayed => e => !e.UserData!.FirstOrDefault(f => f.UserId == query.User!.Id)!.Played,
|
|
|
- ItemSortBy.DateLastContentAdded => e => e.DateLastMediaAdded,
|
|
|
- ItemSortBy.Artist => e => e.ItemValues!.Where(f => f.ItemValue.Type == ItemValueType.Artist).Select(f => f.ItemValue.CleanValue).FirstOrDefault(),
|
|
|
- ItemSortBy.AlbumArtist => e => e.ItemValues!.Where(f => f.ItemValue.Type == ItemValueType.AlbumArtist).Select(f => f.ItemValue.CleanValue).FirstOrDefault(),
|
|
|
- ItemSortBy.Studio => e => e.ItemValues!.Where(f => f.ItemValue.Type == ItemValueType.Studios).Select(f => f.ItemValue.CleanValue).FirstOrDefault(),
|
|
|
- ItemSortBy.OfficialRating => e => e.InheritedParentalRatingValue,
|
|
|
- // ItemSortBy.SeriesDatePlayed => "(Select MAX(LastPlayedDate) from TypedBaseItems B" + GetJoinUserDataText(query) + " where Played=1 and B.SeriesPresentationUniqueKey=A.PresentationUniqueKey)",
|
|
|
- ItemSortBy.SeriesSortName => e => e.SeriesName,
|
|
|
- // ItemSortBy.AiredEpisodeOrder => "AiredEpisodeOrder",
|
|
|
- ItemSortBy.Album => e => e.Album,
|
|
|
- ItemSortBy.DateCreated => e => e.DateCreated,
|
|
|
- ItemSortBy.PremiereDate => e => e.PremiereDate,
|
|
|
- ItemSortBy.StartDate => e => e.StartDate,
|
|
|
- ItemSortBy.Name => e => e.Name,
|
|
|
- ItemSortBy.CommunityRating => e => e.CommunityRating,
|
|
|
- ItemSortBy.ProductionYear => e => e.ProductionYear,
|
|
|
- ItemSortBy.CriticRating => e => e.CriticRating,
|
|
|
- ItemSortBy.VideoBitRate => e => e.TotalBitrate,
|
|
|
- ItemSortBy.ParentIndexNumber => e => e.ParentIndexNumber,
|
|
|
- ItemSortBy.IndexNumber => e => e.IndexNumber,
|
|
|
- _ => e => e.SortName
|
|
|
- };
|
|
|
-#pragma warning restore CS8603 // Possible null reference return.
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
private bool EnableGroupByPresentationUniqueKey(InternalItemsQuery query)
|
|
|
{
|
|
|
if (!query.GroupByPresentationUniqueKey)
|
|
@@ -1302,7 +1260,7 @@ public sealed class BaseItemRepository
|
|
|
var firstOrdering = orderBy.FirstOrDefault();
|
|
|
if (firstOrdering != default)
|
|
|
{
|
|
|
- var expression = MapOrderByField(firstOrdering.OrderBy, filter);
|
|
|
+ var expression = OrderMapper.MapOrderByField(firstOrdering.OrderBy, filter);
|
|
|
if (firstOrdering.SortOrder == SortOrder.Ascending)
|
|
|
{
|
|
|
orderedQuery = query.OrderBy(expression);
|
|
@@ -1327,7 +1285,7 @@ public sealed class BaseItemRepository
|
|
|
|
|
|
foreach (var item in orderBy.Skip(1))
|
|
|
{
|
|
|
- var expression = MapOrderByField(item.OrderBy, filter);
|
|
|
+ var expression = OrderMapper.MapOrderByField(item.OrderBy, filter);
|
|
|
if (item.SortOrder == SortOrder.Ascending)
|
|
|
{
|
|
|
orderedQuery = orderedQuery!.ThenBy(expression);
|