mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			118 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using Jellyfin.Api.Helpers;
 | 
						|
using MediaBrowser.Common.Extensions;
 | 
						|
using MediaBrowser.Controller.Dto;
 | 
						|
using MediaBrowser.Model.Entities;
 | 
						|
using MediaBrowser.Model.Querying;
 | 
						|
using Microsoft.AspNetCore.Http;
 | 
						|
 | 
						|
namespace Jellyfin.Api.Extensions
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Dto Extensions.
 | 
						|
    /// </summary>
 | 
						|
    public static class DtoExtensions
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Add additional fields depending on client.
 | 
						|
        /// </summary>
 | 
						|
        /// <remarks>
 | 
						|
        /// Use in place of GetDtoOptions.
 | 
						|
        /// Legacy order: 2.
 | 
						|
        /// </remarks>
 | 
						|
        /// <param name="dtoOptions">DtoOptions object.</param>
 | 
						|
        /// <param name="request">Current request.</param>
 | 
						|
        /// <returns>Modified DtoOptions object.</returns>
 | 
						|
        internal static DtoOptions AddClientFields(
 | 
						|
            this DtoOptions dtoOptions, HttpRequest request)
 | 
						|
        {
 | 
						|
            dtoOptions.Fields ??= Array.Empty<ItemFields>();
 | 
						|
 | 
						|
            string? client = ClaimHelpers.GetClient(request.HttpContext.User);
 | 
						|
 | 
						|
            // No client in claim
 | 
						|
            if (string.IsNullOrEmpty(client))
 | 
						|
            {
 | 
						|
                return dtoOptions;
 | 
						|
            }
 | 
						|
 | 
						|
            if (!dtoOptions.ContainsField(ItemFields.RecursiveItemCount))
 | 
						|
            {
 | 
						|
                if (client.IndexOf("kodi", StringComparison.OrdinalIgnoreCase) != -1 ||
 | 
						|
                    client.IndexOf("wmc", StringComparison.OrdinalIgnoreCase) != -1 ||
 | 
						|
                    client.IndexOf("media center", StringComparison.OrdinalIgnoreCase) != -1 ||
 | 
						|
                    client.IndexOf("classic", StringComparison.OrdinalIgnoreCase) != -1)
 | 
						|
                {
 | 
						|
                    int oldLen = dtoOptions.Fields.Count;
 | 
						|
                    var arr = new ItemFields[oldLen + 1];
 | 
						|
                    dtoOptions.Fields.CopyTo(arr, 0);
 | 
						|
                    arr[oldLen] = ItemFields.RecursiveItemCount;
 | 
						|
                    dtoOptions.Fields = arr;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (!dtoOptions.ContainsField(ItemFields.ChildCount))
 | 
						|
            {
 | 
						|
                if (client.IndexOf("kodi", StringComparison.OrdinalIgnoreCase) != -1 ||
 | 
						|
                    client.IndexOf("wmc", StringComparison.OrdinalIgnoreCase) != -1 ||
 | 
						|
                    client.IndexOf("media center", StringComparison.OrdinalIgnoreCase) != -1 ||
 | 
						|
                    client.IndexOf("classic", StringComparison.OrdinalIgnoreCase) != -1 ||
 | 
						|
                    client.IndexOf("roku", StringComparison.OrdinalIgnoreCase) != -1 ||
 | 
						|
                    client.IndexOf("samsung", StringComparison.OrdinalIgnoreCase) != -1 ||
 | 
						|
                    client.IndexOf("androidtv", StringComparison.OrdinalIgnoreCase) != -1)
 | 
						|
                {
 | 
						|
                    int oldLen = dtoOptions.Fields.Count;
 | 
						|
                    var arr = new ItemFields[oldLen + 1];
 | 
						|
                    dtoOptions.Fields.CopyTo(arr, 0);
 | 
						|
                    arr[oldLen] = ItemFields.ChildCount;
 | 
						|
                    dtoOptions.Fields = arr;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return dtoOptions;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <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;
 | 
						|
 | 
						|
            if (imageTypeLimit.HasValue)
 | 
						|
            {
 | 
						|
                dtoOptions.ImageTypeLimit = imageTypeLimit.Value;
 | 
						|
            }
 | 
						|
 | 
						|
            if (enableUserData.HasValue)
 | 
						|
            {
 | 
						|
                dtoOptions.EnableUserData = enableUserData.Value;
 | 
						|
            }
 | 
						|
 | 
						|
            if (enableImageTypes.Count != 0)
 | 
						|
            {
 | 
						|
                dtoOptions.ImageTypes = enableImageTypes;
 | 
						|
            }
 | 
						|
 | 
						|
            return dtoOptions;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |