2020-06-18 16:42:48 +00:00
|
|
|
|
using System;
|
2020-11-12 15:29:42 +00:00
|
|
|
|
using System.Collections.Generic;
|
2022-10-06 11:57:47 +00:00
|
|
|
|
using System.Security.Claims;
|
2021-06-19 16:02:33 +00:00
|
|
|
|
using Jellyfin.Extensions;
|
2020-06-18 16:42:48 +00:00
|
|
|
|
using MediaBrowser.Controller.Dto;
|
|
|
|
|
using MediaBrowser.Model.Entities;
|
|
|
|
|
using MediaBrowser.Model.Querying;
|
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
namespace Jellyfin.Api.Extensions;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Dto Extensions.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static class DtoExtensions
|
2020-06-18 16:42:48 +00:00
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
2023-01-31 11:18:10 +00:00
|
|
|
|
/// Add additional fields depending on client.
|
2020-06-18 16:42:48 +00:00
|
|
|
|
/// </summary>
|
2023-01-31 11:18:10 +00:00
|
|
|
|
/// <remarks>
|
|
|
|
|
/// Use in place of GetDtoOptions.
|
|
|
|
|
/// Legacy order: 2.
|
|
|
|
|
/// </remarks>
|
|
|
|
|
/// <param name="dtoOptions">DtoOptions object.</param>
|
|
|
|
|
/// <param name="user">Current claims principal.</param>
|
|
|
|
|
/// <returns>Modified DtoOptions object.</returns>
|
|
|
|
|
internal static DtoOptions AddClientFields(
|
|
|
|
|
this DtoOptions dtoOptions, ClaimsPrincipal user)
|
2020-06-18 16:42:48 +00:00
|
|
|
|
{
|
2023-01-31 11:18:10 +00:00
|
|
|
|
dtoOptions.Fields ??= Array.Empty<ItemFields>();
|
2020-06-18 16:42:48 +00:00
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
string? client = user.GetClient();
|
2020-06-18 16:42:48 +00:00
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
// No client in claim
|
|
|
|
|
if (string.IsNullOrEmpty(client))
|
|
|
|
|
{
|
|
|
|
|
return dtoOptions;
|
|
|
|
|
}
|
2020-06-18 16:42:48 +00:00
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
if (!dtoOptions.ContainsField(ItemFields.RecursiveItemCount))
|
|
|
|
|
{
|
2023-11-14 19:21:34 +00:00
|
|
|
|
if (client.Contains("kodi", StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
client.Contains("wmc", StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
client.Contains("media center", StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
client.Contains("classic", StringComparison.OrdinalIgnoreCase))
|
2020-06-18 16:42:48 +00:00
|
|
|
|
{
|
2024-04-30 19:32:59 +00:00
|
|
|
|
dtoOptions.Fields = [..dtoOptions.Fields, ItemFields.RecursiveItemCount];
|
2020-06-18 16:42:48 +00:00
|
|
|
|
}
|
2023-01-31 11:18:10 +00:00
|
|
|
|
}
|
2020-06-18 16:42:48 +00:00
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
if (!dtoOptions.ContainsField(ItemFields.ChildCount))
|
|
|
|
|
{
|
2023-11-14 19:21:34 +00:00
|
|
|
|
if (client.Contains("kodi", StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
client.Contains("wmc", StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
client.Contains("media center", StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
client.Contains("classic", StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
client.Contains("roku", StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
client.Contains("samsung", StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
client.Contains("androidtv", StringComparison.OrdinalIgnoreCase))
|
2020-06-18 16:42:48 +00:00
|
|
|
|
{
|
2024-04-30 19:32:59 +00:00
|
|
|
|
dtoOptions.Fields = [..dtoOptions.Fields, ItemFields.ChildCount];
|
2020-06-18 16:42:48 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
return dtoOptions;
|
|
|
|
|
}
|
2020-06-18 16:42:48 +00:00
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Add additional DtoOptions.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// Converted from IHasDtoOptions.
|
|
|
|
|
/// Legacy order: 3.
|
|
|
|
|
/// </remarks>
|
|
|
|
|
/// <param name="dtoOptions">DtoOptions object.</param>
|
|
|
|
|
/// <param name="enableImages">Enable images.</param>
|
|
|
|
|
/// <param name="enableUserData">Enable user data.</param>
|
|
|
|
|
/// <param name="imageTypeLimit">Image type limit.</param>
|
|
|
|
|
/// <param name="enableImageTypes">Enable image types.</param>
|
|
|
|
|
/// <returns>Modified DtoOptions object.</returns>
|
|
|
|
|
internal static DtoOptions AddAdditionalDtoOptions(
|
|
|
|
|
this DtoOptions dtoOptions,
|
|
|
|
|
bool? enableImages,
|
|
|
|
|
bool? enableUserData,
|
|
|
|
|
int? imageTypeLimit,
|
|
|
|
|
IReadOnlyList<ImageType> enableImageTypes)
|
|
|
|
|
{
|
|
|
|
|
dtoOptions.EnableImages = enableImages ?? true;
|
2020-06-18 16:42:48 +00:00
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
if (imageTypeLimit.HasValue)
|
|
|
|
|
{
|
|
|
|
|
dtoOptions.ImageTypeLimit = imageTypeLimit.Value;
|
|
|
|
|
}
|
2020-06-18 16:42:48 +00:00
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
if (enableUserData.HasValue)
|
|
|
|
|
{
|
|
|
|
|
dtoOptions.EnableUserData = enableUserData.Value;
|
|
|
|
|
}
|
2020-06-18 16:42:48 +00:00
|
|
|
|
|
2023-01-31 11:18:10 +00:00
|
|
|
|
if (enableImageTypes.Count != 0)
|
|
|
|
|
{
|
|
|
|
|
dtoOptions.ImageTypes = enableImageTypes;
|
2020-06-18 16:42:48 +00:00
|
|
|
|
}
|
2023-01-31 11:18:10 +00:00
|
|
|
|
|
|
|
|
|
return dtoOptions;
|
2020-06-18 16:42:48 +00:00
|
|
|
|
}
|
|
|
|
|
}
|