< Summary - Jellyfin

Information
Class: Jellyfin.Api.Extensions.DtoExtensions
Assembly: Jellyfin.Api
File(s): /srv/git/jellyfin/Jellyfin.Api/Extensions/DtoExtensions.cs
Line coverage
77%
Covered lines: 21
Uncovered lines: 6
Coverable lines: 27
Total lines: 104
Line coverage: 77.7%
Branch coverage
50%
Covered branches: 19
Total branches: 38
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddClientFields(...)50%36.033284.21%
AddAdditionalDtoOptions(...)50%7.9662.5%

File(s)

/srv/git/jellyfin/Jellyfin.Api/Extensions/DtoExtensions.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Security.Claims;
 4using Jellyfin.Extensions;
 5using MediaBrowser.Controller.Dto;
 6using MediaBrowser.Model.Entities;
 7using MediaBrowser.Model.Querying;
 8
 9namespace Jellyfin.Api.Extensions;
 10
 11/// <summary>
 12/// Dto Extensions.
 13/// </summary>
 14public static class DtoExtensions
 15{
 16    /// <summary>
 17    /// Add additional fields depending on client.
 18    /// </summary>
 19    /// <remarks>
 20    /// Use in place of GetDtoOptions.
 21    /// Legacy order: 2.
 22    /// </remarks>
 23    /// <param name="dtoOptions">DtoOptions object.</param>
 24    /// <param name="user">Current claims principal.</param>
 25    /// <returns>Modified DtoOptions object.</returns>
 26    internal static DtoOptions AddClientFields(
 27        this DtoOptions dtoOptions, ClaimsPrincipal user)
 28    {
 2029        string? client = user.GetClient();
 30
 31        // No client in claim
 2032        if (string.IsNullOrEmpty(client))
 33        {
 034            return dtoOptions;
 35        }
 36
 2037        if (!dtoOptions.ContainsField(ItemFields.RecursiveItemCount))
 38        {
 439            if (client.Contains("kodi", StringComparison.OrdinalIgnoreCase) ||
 440                client.Contains("wmc", StringComparison.OrdinalIgnoreCase) ||
 441                client.Contains("media center", StringComparison.OrdinalIgnoreCase) ||
 442                client.Contains("classic", StringComparison.OrdinalIgnoreCase))
 43            {
 044                dtoOptions.Fields = [..dtoOptions.Fields, ItemFields.RecursiveItemCount];
 45            }
 46        }
 47
 2048        if (!dtoOptions.ContainsField(ItemFields.ChildCount))
 49        {
 450            if (client.Contains("kodi", StringComparison.OrdinalIgnoreCase) ||
 451                client.Contains("wmc", StringComparison.OrdinalIgnoreCase) ||
 452                client.Contains("media center", StringComparison.OrdinalIgnoreCase) ||
 453                client.Contains("classic", StringComparison.OrdinalIgnoreCase) ||
 454                client.Contains("roku", StringComparison.OrdinalIgnoreCase) ||
 455                client.Contains("samsung", StringComparison.OrdinalIgnoreCase) ||
 456                client.Contains("androidtv", StringComparison.OrdinalIgnoreCase))
 57            {
 058                dtoOptions.Fields = [..dtoOptions.Fields, ItemFields.ChildCount];
 59            }
 60        }
 61
 2062        return dtoOptions;
 63    }
 64
 65    /// <summary>
 66    /// Add additional DtoOptions.
 67    /// </summary>
 68    /// <remarks>
 69    /// Converted from IHasDtoOptions.
 70    /// Legacy order: 3.
 71    /// </remarks>
 72    /// <param name="dtoOptions">DtoOptions object.</param>
 73    /// <param name="enableImages">Enable images.</param>
 74    /// <param name="enableUserData">Enable user data.</param>
 75    /// <param name="imageTypeLimit">Image type limit.</param>
 76    /// <param name="enableImageTypes">Enable image types.</param>
 77    /// <returns>Modified DtoOptions object.</returns>
 78    internal static DtoOptions AddAdditionalDtoOptions(
 79        this DtoOptions dtoOptions,
 80        bool? enableImages,
 81        bool? enableUserData,
 82        int? imageTypeLimit,
 83        IReadOnlyList<ImageType> enableImageTypes)
 84    {
 485        dtoOptions.EnableImages = enableImages ?? true;
 86
 487        if (imageTypeLimit.HasValue)
 88        {
 089            dtoOptions.ImageTypeLimit = imageTypeLimit.Value;
 90        }
 91
 492        if (enableUserData.HasValue)
 93        {
 094            dtoOptions.EnableUserData = enableUserData.Value;
 95        }
 96
 497        if (enableImageTypes.Count != 0)
 98        {
 099            dtoOptions.ImageTypes = enableImageTypes;
 100        }
 101
 4102        return dtoOptions;
 103    }
 104}