62 lines
1.5 KiB
C#
62 lines
1.5 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
|
|
namespace Moonlight.Shared.Shared;
|
|
|
|
public class FilterOptions : IParsable<FilterOptions>
|
|
{
|
|
public FilterOptions()
|
|
{
|
|
Filters = new Dictionary<string, string>();
|
|
}
|
|
|
|
public FilterOptions(Dictionary<string, string> filters)
|
|
{
|
|
Filters = filters;
|
|
}
|
|
|
|
public Dictionary<string, string> Filters { get; set; }
|
|
|
|
public static FilterOptions Parse(string s, IFormatProvider? provider)
|
|
{
|
|
if (!TryParse(s, provider, out var result))
|
|
throw new AggregateException("Unable to parse filter options");
|
|
|
|
return result;
|
|
}
|
|
|
|
public static bool TryParse(
|
|
[NotNullWhen(true)] string? input,
|
|
IFormatProvider? provider,
|
|
[MaybeNullWhen(false)] out FilterOptions result
|
|
)
|
|
{
|
|
result = new FilterOptions();
|
|
|
|
if (string.IsNullOrEmpty(input))
|
|
return true;
|
|
|
|
var filters = input.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
|
|
|
foreach (var part in filters)
|
|
{
|
|
var filterParts = part.Split('$', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
|
|
|
if (filterParts.Length != 2)
|
|
continue;
|
|
|
|
result.Filters.Add(filterParts[0], filterParts[1]);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
var result = "";
|
|
|
|
foreach (var filter in Filters)
|
|
result += $"{filter.Key}${filter.Value};";
|
|
|
|
return result;
|
|
}
|
|
} |