| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | 
							- using System;
 
- using System.Collections.Generic;
 
- using Jellyfin.Extensions;
 
- namespace MediaBrowser.Model.Extensions;
 
- /// <summary>
 
- /// Defines the <see cref="ContainerHelper"/> class.
 
- /// </summary>
 
- public static class ContainerHelper
 
- {
 
-     /// <summary>
 
-     /// Compares two containers, returning true if an item in <paramref name="inputContainer"/> exists
 
-     /// in <paramref name="profileContainers"/>.
 
-     /// </summary>
 
-     /// <param name="profileContainers">The comma-delimited string being searched.
 
-     /// If the parameter begins with the <c>-</c> character, the operation is reversed.</param>
 
-     /// <param name="inputContainer">The comma-delimited string being matched.</param>
 
-     /// <returns>The result of the operation.</returns>
 
-     public static bool ContainsContainer(string? profileContainers, string? inputContainer)
 
-     {
 
-         var isNegativeList = false;
 
-         if (profileContainers != null && profileContainers.StartsWith('-'))
 
-         {
 
-             isNegativeList = true;
 
-             profileContainers = profileContainers[1..];
 
-         }
 
-         return ContainsContainer(profileContainers, isNegativeList, inputContainer);
 
-     }
 
-     /// <summary>
 
-     /// Compares two containers, returning true if an item in <paramref name="inputContainer"/> exists
 
-     /// in <paramref name="profileContainers"/>.
 
-     /// </summary>
 
-     /// <param name="profileContainers">The comma-delimited string being searched.
 
-     /// If the parameter begins with the <c>-</c> character, the operation is reversed.</param>
 
-     /// <param name="inputContainer">The comma-delimited string being matched.</param>
 
-     /// <returns>The result of the operation.</returns>
 
-     public static bool ContainsContainer(string? profileContainers, ReadOnlySpan<char> inputContainer)
 
-     {
 
-         var isNegativeList = false;
 
-         if (profileContainers != null && profileContainers.StartsWith('-'))
 
-         {
 
-             isNegativeList = true;
 
-             profileContainers = profileContainers[1..];
 
-         }
 
-         return ContainsContainer(profileContainers, isNegativeList, inputContainer);
 
-     }
 
-     /// <summary>
 
-     /// Compares two containers, returning <paramref name="isNegativeList"/> if an item in <paramref name="inputContainer"/>
 
-     /// does not exist in <paramref name="profileContainers"/>.
 
-     /// </summary>
 
-     /// <param name="profileContainers">The comma-delimited string being searched.</param>
 
-     /// <param name="isNegativeList">The boolean result to return if a match is not found.</param>
 
-     /// <param name="inputContainer">The comma-delimited string being matched.</param>
 
-     /// <returns>The result of the operation.</returns>
 
-     public static bool ContainsContainer(string? profileContainers, bool isNegativeList, string? inputContainer)
 
-     {
 
-         if (string.IsNullOrEmpty(inputContainer))
 
-         {
 
-             return isNegativeList;
 
-         }
 
-         return ContainsContainer(profileContainers, isNegativeList, inputContainer.AsSpan());
 
-     }
 
-     /// <summary>
 
-     /// Compares two containers, returning <paramref name="isNegativeList"/> if an item in <paramref name="inputContainer"/>
 
-     /// does not exist in <paramref name="profileContainers"/>.
 
-     /// </summary>
 
-     /// <param name="profileContainers">The comma-delimited string being searched.</param>
 
-     /// <param name="isNegativeList">The boolean result to return if a match is not found.</param>
 
-     /// <param name="inputContainer">The comma-delimited string being matched.</param>
 
-     /// <returns>The result of the operation.</returns>
 
-     public static bool ContainsContainer(string? profileContainers, bool isNegativeList, ReadOnlySpan<char> inputContainer)
 
-     {
 
-         if (string.IsNullOrEmpty(profileContainers))
 
-         {
 
-             // Empty profiles always support all containers/codecs.
 
-             return true;
 
-         }
 
-         var allInputContainers = inputContainer.Split(',');
 
-         var allProfileContainers = profileContainers.SpanSplit(',');
 
-         foreach (var container in allInputContainers)
 
-         {
 
-             if (!container.IsEmpty)
 
-             {
 
-                 foreach (var profile in allProfileContainers)
 
-                 {
 
-                     if (!profile.IsEmpty && container.Equals(profile, StringComparison.OrdinalIgnoreCase))
 
-                     {
 
-                         return !isNegativeList;
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         return isNegativeList;
 
-     }
 
-     /// <summary>
 
-     /// Compares two containers, returning <paramref name="isNegativeList"/> if an item in <paramref name="inputContainer"/>
 
-     /// does not exist in <paramref name="profileContainers"/>.
 
-     /// </summary>
 
-     /// <param name="profileContainers">The profile containers being matched searched.</param>
 
-     /// <param name="isNegativeList">The boolean result to return if a match is not found.</param>
 
-     /// <param name="inputContainer">The comma-delimited string being matched.</param>
 
-     /// <returns>The result of the operation.</returns>
 
-     public static bool ContainsContainer(IReadOnlyList<string>? profileContainers, bool isNegativeList, string inputContainer)
 
-     {
 
-         if (profileContainers is null)
 
-         {
 
-             // Empty profiles always support all containers/codecs.
 
-             return true;
 
-         }
 
-         var allInputContainers = Split(inputContainer);
 
-         foreach (var container in allInputContainers)
 
-         {
 
-             foreach (var profile in profileContainers)
 
-             {
 
-                 if (string.Equals(profile, container, StringComparison.OrdinalIgnoreCase))
 
-                 {
 
-                     return !isNegativeList;
 
-                 }
 
-             }
 
-         }
 
-         return isNegativeList;
 
-     }
 
-     /// <summary>
 
-     /// Splits and input string.
 
-     /// </summary>
 
-     /// <param name="input">The input string.</param>
 
-     /// <returns>The result of the operation.</returns>
 
-     public static string[] Split(string? input)
 
-     {
 
-         return input?.Split(',', StringSplitOptions.RemoveEmptyEntries) ?? [];
 
-     }
 
- }
 
 
  |