diff options
Diffstat (limited to 'MediaBrowser.Model/Dlna/ContainerProfile.cs')
| -rw-r--r-- | MediaBrowser.Model/Dlna/ContainerProfile.cs | 107 |
1 files changed, 41 insertions, 66 deletions
diff --git a/MediaBrowser.Model/Dlna/ContainerProfile.cs b/MediaBrowser.Model/Dlna/ContainerProfile.cs index 978004268..a42179907 100644 --- a/MediaBrowser.Model/Dlna/ContainerProfile.cs +++ b/MediaBrowser.Model/Dlna/ContainerProfile.cs @@ -1,74 +1,49 @@ -#pragma warning disable CS1591 +#pragma warning disable CA1819 // Properties should not return arrays using System; +using System.Collections.Generic; using System.Xml.Serialization; -using Jellyfin.Extensions; +using MediaBrowser.Model.Extensions; -namespace MediaBrowser.Model.Dlna +namespace MediaBrowser.Model.Dlna; + +/// <summary> +/// Defines the <see cref="ContainerProfile"/>. +/// </summary> +public class ContainerProfile { - public class ContainerProfile + /// <summary> + /// Gets or sets the <see cref="DlnaProfileType"/> which this container must meet. + /// </summary> + [XmlAttribute("type")] + public DlnaProfileType Type { get; set; } + + /// <summary> + /// Gets or sets the list of <see cref="ProfileCondition"/> which this container will be applied to. + /// </summary> + public ProfileCondition[] Conditions { get; set; } = []; + + /// <summary> + /// Gets or sets the container(s) which this container must meet. + /// </summary> + [XmlAttribute("container")] + public string? Container { get; set; } + + /// <summary> + /// Gets or sets the sub container(s) which this container must meet. + /// </summary> + [XmlAttribute("subcontainer")] + public string? SubContainer { get; set; } + + /// <summary> + /// Returns true if an item in <paramref name="container"/> appears in the <see cref="Container"/> property. + /// </summary> + /// <param name="container">The item to match.</param> + /// <param name="useSubContainer">Consider subcontainers.</param> + /// <returns>The result of the operation.</returns> + public bool ContainsContainer(ReadOnlySpan<char> container, bool useSubContainer = false) { - [XmlAttribute("type")] - public DlnaProfileType Type { get; set; } - - public ProfileCondition[] Conditions { get; set; } = Array.Empty<ProfileCondition>(); - - [XmlAttribute("container")] - public string Container { get; set; } = string.Empty; - - public static string[] SplitValue(string? value) - { - if (string.IsNullOrEmpty(value)) - { - return Array.Empty<string>(); - } - - return value.Split(',', StringSplitOptions.RemoveEmptyEntries); - } - - public bool ContainsContainer(string? container) - { - var containers = SplitValue(Container); - - return ContainsContainer(containers, container); - } - - public static bool ContainsContainer(string? profileContainers, string? inputContainer) - { - var isNegativeList = false; - if (profileContainers is not null && profileContainers.StartsWith('-')) - { - isNegativeList = true; - profileContainers = profileContainers.Substring(1); - } - - return ContainsContainer(SplitValue(profileContainers), isNegativeList, inputContainer); - } - - public static bool ContainsContainer(string[]? profileContainers, string? inputContainer) - { - return ContainsContainer(profileContainers, false, inputContainer); - } - - public static bool ContainsContainer(string[]? profileContainers, bool isNegativeList, string? inputContainer) - { - if (profileContainers is null || profileContainers.Length == 0) - { - // Empty profiles always support all containers/codecs - return true; - } - - var allInputContainers = SplitValue(inputContainer); - - foreach (var container in allInputContainers) - { - if (profileContainers.Contains(container, StringComparison.OrdinalIgnoreCase)) - { - return !isNegativeList; - } - } - - return isNegativeList; - } + var containerToCheck = useSubContainer && string.Equals(Container, "hls", StringComparison.OrdinalIgnoreCase) ? SubContainer : Container; + return ContainerHelper.ContainsContainer(containerToCheck, container); } } |
