aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model/Dlna/ContainerProfile.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model/Dlna/ContainerProfile.cs')
-rw-r--r--MediaBrowser.Model/Dlna/ContainerProfile.cs107
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);
}
}