repo creation with initial code after cloning public repo
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Jellyfin.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides <c>CopyTo</c> extensions methods for <see cref="IReadOnlyList{T}" />.
|
||||
/// </summary>
|
||||
public static class CopyToExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Copies all the elements of the current collection to the specified list
|
||||
/// starting at the specified destination array index. The index is specified as a 32-bit integer.
|
||||
/// </summary>
|
||||
/// <param name="source">The current collection that is the source of the elements.</param>
|
||||
/// <param name="destination">The list that is the destination of the elements copied from the current collection.</param>
|
||||
/// <param name="index">A 32-bit integer that represents the index in <c>destination</c> at which copying begins.</param>
|
||||
/// <typeparam name="T">The type of the array.</typeparam>
|
||||
public static void CopyTo<T>(this IReadOnlyList<T> source, IList<T> destination, int index = 0)
|
||||
{
|
||||
for (int i = 0; i < source.Count; i++)
|
||||
{
|
||||
destination[index + i] = source[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Jellyfin.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Static extensions for the <see cref="IReadOnlyDictionary{TKey,TValue}"/> interface.
|
||||
/// </summary>
|
||||
public static class DictionaryExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets a string from a string dictionary, checking all keys sequentially,
|
||||
/// stopping at the first key that returns a result that's neither null nor blank.
|
||||
/// </summary>
|
||||
/// <param name="dictionary">The dictionary.</param>
|
||||
/// <param name="key1">The first checked key.</param>
|
||||
/// <param name="key2">The second checked key.</param>
|
||||
/// <param name="key3">The third checked key.</param>
|
||||
/// <param name="key4">The fourth checked key.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
public static string? GetFirstNotNullNorWhiteSpaceValue(this IReadOnlyDictionary<string, string> dictionary, string key1, string? key2 = null, string? key3 = null, string? key4 = null)
|
||||
{
|
||||
if (dictionary.TryGetValue(key1, out var val) && !string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
return val;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(key2) && dictionary.TryGetValue(key2, out val) && !string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
return val;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(key3) && dictionary.TryGetValue(key3, out val) && !string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
return val;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(key4) && dictionary.TryGetValue(key4, out val) && !string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
return val;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Jellyfin.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// Static extensions for the <see cref="IEnumerable{T}"/> interface.
|
||||
/// </summary>
|
||||
public static class EnumerableExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Determines whether the value is contained in the source collection.
|
||||
/// </summary>
|
||||
/// <param name="source">An instance of the <see cref="IEnumerable{String}"/> interface.</param>
|
||||
/// <param name="value">The value to look for in the collection.</param>
|
||||
/// <param name="stringComparison">The string comparison.</param>
|
||||
/// <returns>A value indicating whether the value is contained in the collection.</returns>
|
||||
/// <exception cref="ArgumentNullException">The source is null.</exception>
|
||||
public static bool Contains(this IEnumerable<string> source, ReadOnlySpan<char> value, StringComparison stringComparison)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(source);
|
||||
|
||||
if (source is IList<string> list)
|
||||
{
|
||||
int len = list.Count;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
if (value.Equals(list[i], stringComparison))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach (string element in source)
|
||||
{
|
||||
if (value.Equals(element, stringComparison))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets an IEnumerable from a single item.
|
||||
/// </summary>
|
||||
/// <param name="item">The item to return.</param>
|
||||
/// <typeparam name="T">The type of item.</typeparam>
|
||||
/// <returns>The IEnumerable{T}.</returns>
|
||||
public static IEnumerable<T> SingleItemAsEnumerable<T>(this T item)
|
||||
{
|
||||
yield return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets an IEnumerable consisting of all flags of an enum.
|
||||
/// </summary>
|
||||
/// <param name="flags">The flags enum.</param>
|
||||
/// <typeparam name="T">The type of item.</typeparam>
|
||||
/// <returns>The IEnumerable{Enum}.</returns>
|
||||
public static IEnumerable<T> GetUniqueFlags<T>(this T flags)
|
||||
where T : struct, Enum
|
||||
{
|
||||
foreach (T value in Enum.GetValues<T>())
|
||||
{
|
||||
if (flags.HasFlag(value))
|
||||
{
|
||||
yield return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using System.IO;
|
||||
|
||||
namespace Jellyfin.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// Provides helper functions for <see cref="File" />.
|
||||
/// </summary>
|
||||
public static class FileHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates, or truncates a file in the specified path.
|
||||
/// </summary>
|
||||
/// <param name="path">The path and name of the file to create.</param>
|
||||
public static void CreateEmpty(string path)
|
||||
{
|
||||
using (File.OpenHandle(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace Jellyfin.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// A custom StreamWriter which supports setting a IFormatProvider.
|
||||
/// </summary>
|
||||
public class FormattingStreamWriter : StreamWriter
|
||||
{
|
||||
private readonly IFormatProvider _formatProvider;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="FormattingStreamWriter"/> class.
|
||||
/// </summary>
|
||||
/// <param name="stream">The stream to write to.</param>
|
||||
/// <param name="formatProvider">The format provider to use.</param>
|
||||
public FormattingStreamWriter(Stream stream, IFormatProvider formatProvider)
|
||||
: base(stream)
|
||||
{
|
||||
_formatProvider = formatProvider;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="FormattingStreamWriter"/> class.
|
||||
/// </summary>
|
||||
/// <param name="path">The complete file path to write to.</param>
|
||||
/// <param name="formatProvider">The format provider to use.</param>
|
||||
public FormattingStreamWriter(string path, IFormatProvider formatProvider)
|
||||
: base(path)
|
||||
{
|
||||
_formatProvider = formatProvider;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override IFormatProvider FormatProvider
|
||||
=> _formatProvider;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Jellyfin.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// Guid specific extensions.
|
||||
/// </summary>
|
||||
public static class GuidExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Determine whether the guid is default.
|
||||
/// </summary>
|
||||
/// <param name="guid">The guid.</param>
|
||||
/// <returns>Whether the guid is the default value.</returns>
|
||||
public static bool IsEmpty(this Guid guid)
|
||||
=> guid.Equals(default);
|
||||
|
||||
/// <summary>
|
||||
/// Determine whether the guid is null or default.
|
||||
/// </summary>
|
||||
/// <param name="guid">The guid.</param>
|
||||
/// <returns>Whether the guid is null or the default valueF.</returns>
|
||||
public static bool IsNullOrEmpty([NotNullWhen(false)] this Guid? guid)
|
||||
=> guid is null || guid.Value.IsEmpty();
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||
<EmbedUntrackedSources>true</EmbedUntrackedSources>
|
||||
<IncludeSymbols>true</IncludeSymbols>
|
||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||
<!-- ICU4N.Transliterator only has prerelease versions -->
|
||||
<NoWarn>NU5104</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<Authors>Jellyfin Contributors</Authors>
|
||||
<PackageId>Jellyfin.Extensions</PackageId>
|
||||
<VersionPrefix>10.12.0</VersionPrefix>
|
||||
<RepositoryUrl>https://github.com/jellyfin/jellyfin</RepositoryUrl>
|
||||
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Stability)'=='Unstable'">
|
||||
<!-- Include all symbols in the main nupkg until Azure Artifact Feed starts supporting ingesting NuGet symbol packages. -->
|
||||
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="../../SharedVersion.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Diacritics" />
|
||||
<PackageReference Include="ICU4N.Transliterator" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts a number to a boolean.
|
||||
/// This is needed for HDHomerun.
|
||||
/// </summary>
|
||||
public class JsonBoolNumberConverter : JsonConverter<bool>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.Number)
|
||||
{
|
||||
return Convert.ToBoolean(reader.GetInt32());
|
||||
}
|
||||
|
||||
return reader.GetBoolean();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
|
||||
{
|
||||
writer.WriteBooleanValue(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.Buffers.Text;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Converts a string to a boolean.
|
||||
/// This is needed for FFprobe.
|
||||
/// </summary>
|
||||
public class JsonBoolStringConverter : JsonConverter<bool>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
ReadOnlySpan<byte> utf8Span = reader.HasValueSequence ? reader.ValueSequence.ToArray() : reader.ValueSpan;
|
||||
if (Utf8Parser.TryParse(utf8Span, out bool val, out _, 'l'))
|
||||
{
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
||||
return reader.GetBoolean();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
|
||||
=> writer.WriteBooleanValue(value);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Convert comma delimited string to collection of type.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Type to convert to.</typeparam>
|
||||
public sealed class JsonCommaDelimitedCollectionConverter<T> : JsonDelimitedCollectionConverter<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="JsonCommaDelimitedCollectionConverter{T}"/> class.
|
||||
/// </summary>
|
||||
public JsonCommaDelimitedCollectionConverter() : base()
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override char Delimiter => ',';
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Json comma delimited collection converter factory.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This must be applied as an attribute, adding to the JsonConverter list causes stack overflow.
|
||||
/// </remarks>
|
||||
public class JsonCommaDelimitedCollectionConverterFactory : JsonConverterFactory
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override bool CanConvert(Type typeToConvert)
|
||||
{
|
||||
return typeToConvert.IsArray
|
||||
|| (typeToConvert.IsGenericType
|
||||
&& (typeToConvert.GetGenericTypeDefinition().IsAssignableFrom(typeof(IReadOnlyCollection<>)) || typeToConvert.GetGenericTypeDefinition().IsAssignableFrom(typeof(IReadOnlyList<>))));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
var structType = typeToConvert.GetElementType() ?? typeToConvert.GenericTypeArguments[0];
|
||||
return (JsonConverter?)Activator.CreateInstance(typeof(JsonCommaDelimitedCollectionConverter<>).MakeGenericType(structType));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Legacy DateTime converter.
|
||||
/// Milliseconds aren't output if zero by default.
|
||||
/// </summary>
|
||||
public class JsonDateTimeConverter : JsonConverter<DateTime>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
return reader.GetDateTime();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
|
||||
{
|
||||
if (value.Millisecond == 0)
|
||||
{
|
||||
// Remaining ticks value will be 0, manually format.
|
||||
writer.WriteStringValue(value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffZ", CultureInfo.InvariantCulture));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteStringValue(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Json unknown enum converter.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of enum.</typeparam>
|
||||
public class JsonDefaultStringEnumConverter<T> : JsonConverter<T>
|
||||
where T : struct, Enum
|
||||
{
|
||||
private readonly JsonConverter<T> _baseConverter;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="JsonDefaultStringEnumConverter{T}"/> class.
|
||||
/// </summary>
|
||||
/// <param name="baseConverter">The base json converter.</param>
|
||||
public JsonDefaultStringEnumConverter(JsonConverter<T> baseConverter)
|
||||
{
|
||||
_baseConverter = baseConverter;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.IsNull() || reader.IsEmptyString())
|
||||
{
|
||||
var customValueAttribute = typeToConvert.GetCustomAttribute<DefaultValueAttribute>();
|
||||
if (customValueAttribute?.Value is null)
|
||||
{
|
||||
throw new InvalidOperationException($"Default value not set for '{typeToConvert.Name}'");
|
||||
}
|
||||
|
||||
return (T)customValueAttribute.Value;
|
||||
}
|
||||
|
||||
return _baseConverter.Read(ref reader, typeToConvert, options);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
|
||||
{
|
||||
_baseConverter.Write(writer, value, options);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Utilizes the JsonStringEnumConverter and sets a default value if not provided.
|
||||
/// </summary>
|
||||
public class JsonDefaultStringEnumConverterFactory : JsonConverterFactory
|
||||
{
|
||||
private static readonly JsonStringEnumConverter _baseConverterFactory = new();
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool CanConvert(Type typeToConvert)
|
||||
{
|
||||
return _baseConverterFactory.CanConvert(typeToConvert)
|
||||
&& typeToConvert.IsDefined(typeof(DefaultValueAttribute));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
var baseConverter = _baseConverterFactory.CreateConverter(typeToConvert, options);
|
||||
var converterType = typeof(JsonDefaultStringEnumConverter<>).MakeGenericType(typeToConvert);
|
||||
|
||||
return (JsonConverter?)Activator.CreateInstance(converterType, baseConverter);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Convert delimited string to array of type.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Type to convert to.</typeparam>
|
||||
public abstract class JsonDelimitedCollectionConverter<T> : JsonConverter<IReadOnlyCollection<T>>
|
||||
{
|
||||
private readonly TypeConverter _typeConverter;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="JsonDelimitedCollectionConverter{T}"/> class.
|
||||
/// </summary>
|
||||
protected JsonDelimitedCollectionConverter()
|
||||
{
|
||||
_typeConverter = TypeDescriptor.GetConverter(typeof(T));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the array delimiter.
|
||||
/// </summary>
|
||||
protected virtual char Delimiter { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override IReadOnlyCollection<T>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
// null got handled higher up the call stack
|
||||
var stringEntries = reader.GetString()!.Split(Delimiter, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (stringEntries.Length == 0)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
var typedValues = new List<T>();
|
||||
for (var i = 0; i < stringEntries.Length; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
var parsedValue = _typeConverter.ConvertFromInvariantString(stringEntries[i].Trim());
|
||||
if (parsedValue is not null)
|
||||
{
|
||||
typedValues.Add((T)parsedValue);
|
||||
}
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
// Ignore unconvertible inputs
|
||||
}
|
||||
}
|
||||
|
||||
if (typeToConvert.IsArray)
|
||||
{
|
||||
return typedValues.ToArray();
|
||||
}
|
||||
|
||||
return typedValues;
|
||||
}
|
||||
|
||||
return JsonSerializer.Deserialize<T[]>(ref reader, options);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, IReadOnlyCollection<T>? value, JsonSerializerOptions options)
|
||||
{
|
||||
JsonSerializer.Serialize(writer, value, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Enum flag to json array converter.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of enum.</typeparam>
|
||||
public class JsonFlagEnumConverter<T> : JsonConverter<T>
|
||||
where T : struct, Enum
|
||||
{
|
||||
private static readonly T[] _enumValues = Enum.GetValues<T>();
|
||||
|
||||
/// <inheritdoc />
|
||||
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
|
||||
{
|
||||
writer.WriteStartArray();
|
||||
foreach (var enumValue in _enumValues)
|
||||
{
|
||||
if (value.HasFlag(enumValue))
|
||||
{
|
||||
writer.WriteStringValue(enumValue.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
writer.WriteEndArray();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Json flag enum converter factory.
|
||||
/// </summary>
|
||||
public class JsonFlagEnumConverterFactory : JsonConverterFactory
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override bool CanConvert(Type typeToConvert)
|
||||
{
|
||||
return typeToConvert.IsEnum && typeToConvert.IsDefined(typeof(FlagsAttribute));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
return (JsonConverter?)Activator.CreateInstance(typeof(JsonFlagEnumConverter<>).MakeGenericType(typeToConvert));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts a GUID object or value to/from JSON.
|
||||
/// </summary>
|
||||
public class JsonGuidConverter : JsonConverter<Guid>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override Guid Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
=> reader.IsNull()
|
||||
? Guid.Empty
|
||||
: ReadInternal(ref reader);
|
||||
|
||||
// TODO: optimize by parsing the UTF8 bytes instead of converting to string first
|
||||
internal static Guid ReadInternal(ref Utf8JsonReader reader)
|
||||
=> Guid.Parse(reader.GetString()!); // null got handled higher up the call stack
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, Guid value, JsonSerializerOptions options)
|
||||
=> WriteInternal(writer, value);
|
||||
|
||||
internal static void WriteInternal(Utf8JsonWriter writer, Guid value)
|
||||
=> writer.WriteStringValue(value.ToString("N", CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts a GUID object or value to/from JSON.
|
||||
/// </summary>
|
||||
public class JsonNullableGuidConverter : JsonConverter<Guid?>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override Guid? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
=> JsonGuidConverter.ReadInternal(ref reader);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, Guid? value, JsonSerializerOptions options)
|
||||
{
|
||||
// null got handled higher up the call stack
|
||||
var val = value!.Value;
|
||||
if (val.IsEmpty())
|
||||
{
|
||||
writer.WriteNullValue();
|
||||
}
|
||||
else
|
||||
{
|
||||
JsonGuidConverter.WriteInternal(writer, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts a nullable struct or value to/from JSON.
|
||||
/// Required - some clients send an empty string.
|
||||
/// </summary>
|
||||
/// <typeparam name="TStruct">The struct type.</typeparam>
|
||||
public class JsonNullableStructConverter<TStruct> : JsonConverter<TStruct?>
|
||||
where TStruct : struct
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override TStruct? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.IsEmptyString())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return JsonSerializer.Deserialize<TStruct>(ref reader, options);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, TStruct? value, JsonSerializerOptions options)
|
||||
=> JsonSerializer.Serialize(writer, value!.Value, options); // null got handled higher up the call stack
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Json nullable struct converter factory.
|
||||
/// </summary>
|
||||
public class JsonNullableStructConverterFactory : JsonConverterFactory
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override bool CanConvert(Type typeToConvert)
|
||||
{
|
||||
return typeToConvert.IsGenericType
|
||||
&& typeToConvert.GetGenericTypeDefinition() == typeof(Nullable<>)
|
||||
&& typeToConvert.GenericTypeArguments[0].IsValueType;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
var structType = typeToConvert.GenericTypeArguments[0];
|
||||
return (JsonConverter?)Activator.CreateInstance(typeof(JsonNullableStructConverter<>).MakeGenericType(structType));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Convert Pipe delimited string to array of type.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Type to convert to.</typeparam>
|
||||
public sealed class JsonPipeDelimitedCollectionConverter<T> : JsonDelimitedCollectionConverter<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="JsonPipeDelimitedCollectionConverter{T}"/> class.
|
||||
/// </summary>
|
||||
public JsonPipeDelimitedCollectionConverter() : base()
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override char Delimiter => '|';
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Json Pipe delimited collection converter factory.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This must be applied as an attribute, adding to the JsonConverter list causes stack overflow.
|
||||
/// </remarks>
|
||||
public class JsonPipeDelimitedCollectionConverterFactory : JsonConverterFactory
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override bool CanConvert(Type typeToConvert)
|
||||
{
|
||||
return typeToConvert.IsArray
|
||||
|| (typeToConvert.IsGenericType
|
||||
&& (typeToConvert.GetGenericTypeDefinition().IsAssignableFrom(typeof(IReadOnlyCollection<>)) || typeToConvert.GetGenericTypeDefinition().IsAssignableFrom(typeof(IReadOnlyList<>))));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
var structType = typeToConvert.GetElementType() ?? typeToConvert.GenericTypeArguments[0];
|
||||
return (JsonConverter?)Activator.CreateInstance(typeof(JsonPipeDelimitedCollectionConverter<>).MakeGenericType(structType));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Converter to allow the serializer to read strings.
|
||||
/// </summary>
|
||||
public class JsonStringConverter : JsonConverter<string?>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override string? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
=> reader.TokenType == JsonTokenType.String ? reader.GetString() : GetRawValue(reader);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, string? value, JsonSerializerOptions options)
|
||||
=> writer.WriteStringValue(value);
|
||||
|
||||
private static string GetRawValue(Utf8JsonReader reader)
|
||||
{
|
||||
var utf8Bytes = reader.HasValueSequence
|
||||
? reader.ValueSequence.ToArray()
|
||||
: reader.ValueSpan;
|
||||
return Encoding.UTF8.GetString(utf8Bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Jellyfin.Extensions.Json.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts a Version object or value to/from JSON.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Required to send <see cref="Version"/> as a string instead of an object.
|
||||
/// </remarks>
|
||||
public class JsonVersionConverter : JsonConverter<Version>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override Version Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
=> new Version(reader.GetString()!); // Will throw ArgumentNullException on null
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, Version value, JsonSerializerOptions options)
|
||||
=> writer.WriteStringValue(value.ToString());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Text.Json.Serialization.Metadata;
|
||||
using Jellyfin.Extensions.Json.Converters;
|
||||
|
||||
namespace Jellyfin.Extensions.Json
|
||||
{
|
||||
/// <summary>
|
||||
/// Helper class for having compatible JSON throughout the codebase.
|
||||
/// </summary>
|
||||
public static class JsonDefaults
|
||||
{
|
||||
/// <summary>
|
||||
/// Pascal case json profile media type.
|
||||
/// </summary>
|
||||
public const string PascalCaseMediaType = "application/json; profile=\"PascalCase\"";
|
||||
|
||||
/// <summary>
|
||||
/// Camel case json profile media type.
|
||||
/// </summary>
|
||||
public const string CamelCaseMediaType = "application/json; profile=\"CamelCase\"";
|
||||
|
||||
/// <summary>
|
||||
/// When changing these options, update
|
||||
/// Jellyfin.Server/Extensions/ApiServiceCollectionExtensions.cs
|
||||
/// -> AddJellyfinApi
|
||||
/// -> AddJsonOptions.
|
||||
/// </summary>
|
||||
private static readonly JsonSerializerOptions _jsonSerializerOptions = new()
|
||||
{
|
||||
ReadCommentHandling = JsonCommentHandling.Disallow,
|
||||
WriteIndented = false,
|
||||
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
|
||||
NumberHandling = JsonNumberHandling.AllowReadingFromString,
|
||||
Converters =
|
||||
{
|
||||
new JsonGuidConverter(),
|
||||
new JsonNullableGuidConverter(),
|
||||
new JsonVersionConverter(),
|
||||
new JsonFlagEnumConverterFactory(),
|
||||
new JsonDefaultStringEnumConverterFactory(),
|
||||
new JsonStringEnumConverter(),
|
||||
new JsonNullableStructConverterFactory(),
|
||||
new JsonDateTimeConverter(),
|
||||
new JsonStringConverter()
|
||||
},
|
||||
TypeInfoResolver = new DefaultJsonTypeInfoResolver()
|
||||
};
|
||||
|
||||
private static readonly JsonSerializerOptions _pascalCaseJsonSerializerOptions = new(_jsonSerializerOptions)
|
||||
{
|
||||
PropertyNamingPolicy = null
|
||||
};
|
||||
|
||||
private static readonly JsonSerializerOptions _camelCaseJsonSerializerOptions = new(_jsonSerializerOptions)
|
||||
{
|
||||
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default <see cref="JsonSerializerOptions" /> options.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The return value must not be modified.
|
||||
/// If the defaults must be modified the author must use the copy constructor.
|
||||
/// </remarks>
|
||||
/// <returns>The default <see cref="JsonSerializerOptions" /> options.</returns>
|
||||
public static JsonSerializerOptions Options
|
||||
=> _jsonSerializerOptions;
|
||||
|
||||
/// <summary>
|
||||
/// Gets camelCase json options.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The return value must not be modified.
|
||||
/// If the defaults must be modified the author must use the copy constructor.
|
||||
/// </remarks>
|
||||
/// <returns>The camelCase <see cref="JsonSerializerOptions" /> options.</returns>
|
||||
public static JsonSerializerOptions CamelCaseOptions
|
||||
=> _camelCaseJsonSerializerOptions;
|
||||
|
||||
/// <summary>
|
||||
/// Gets PascalCase json options.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The return value must not be modified.
|
||||
/// If the defaults must be modified the author must use the copy constructor.
|
||||
/// </remarks>
|
||||
/// <returns>The PascalCase <see cref="JsonSerializerOptions" /> options.</returns>
|
||||
public static JsonSerializerOptions PascalCaseOptions
|
||||
=> _pascalCaseJsonSerializerOptions;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Jellyfin.Extensions.Json;
|
||||
|
||||
/// <summary>
|
||||
/// Extensions for Utf8JsonReader and Utf8JsonWriter.
|
||||
/// </summary>
|
||||
public static class Utf8JsonExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Determines if the reader contains an empty string.
|
||||
/// </summary>
|
||||
/// <param name="reader">The reader.</param>
|
||||
/// <returns>Whether the reader contains an empty string.</returns>
|
||||
public static bool IsEmptyString(this Utf8JsonReader reader)
|
||||
=> reader.TokenType == JsonTokenType.String
|
||||
&& ((reader.HasValueSequence && reader.ValueSequence.IsEmpty)
|
||||
|| (!reader.HasValueSequence && reader.ValueSpan.IsEmpty));
|
||||
|
||||
/// <summary>
|
||||
/// Determines if the reader contains a null value.
|
||||
/// </summary>
|
||||
/// <param name="reader">The reader.</param>
|
||||
/// <returns>Whether the reader contains null.</returns>
|
||||
public static bool IsNull(this Utf8JsonReader reader)
|
||||
=> reader.TokenType == JsonTokenType.Null;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Jellyfin.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Static extensions for the <see cref="IReadOnlyList{T}"/> interface.
|
||||
/// </summary>
|
||||
public static class ReadOnlyListExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// Finds the index of the desired item.
|
||||
/// </summary>
|
||||
/// <param name="source">The source list.</param>
|
||||
/// <param name="value">The value to fine.</param>
|
||||
/// <typeparam name="T">The type of item to find.</typeparam>
|
||||
/// <returns>Index if found, else -1.</returns>
|
||||
public static int IndexOf<T>(this IReadOnlyList<T> source, T value)
|
||||
{
|
||||
if (source is IList<T> list)
|
||||
{
|
||||
return list.IndexOf(value);
|
||||
}
|
||||
|
||||
for (int i = 0; i < source.Count; i++)
|
||||
{
|
||||
if (Equals(value, source[i]))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Finds the index of the predicate.
|
||||
/// </summary>
|
||||
/// <param name="source">The source list.</param>
|
||||
/// <param name="match">The value to find.</param>
|
||||
/// <typeparam name="T">The type of item to find.</typeparam>
|
||||
/// <returns>Index if found, else -1.</returns>
|
||||
public static int FindIndex<T>(this IReadOnlyList<T> source, Predicate<T> match)
|
||||
{
|
||||
if (source is List<T> list)
|
||||
{
|
||||
return list.FindIndex(match);
|
||||
}
|
||||
|
||||
for (int i = 0; i < source.Count; i++)
|
||||
{
|
||||
if (match(source[i]))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the first or default item from a list.
|
||||
/// </summary>
|
||||
/// <param name="source">The source list.</param>
|
||||
/// <typeparam name="T">The type of item.</typeparam>
|
||||
/// <returns>The first item or default if list is empty.</returns>
|
||||
public static T? FirstOrDefault<T>(this IReadOnlyList<T>? source)
|
||||
{
|
||||
if (source is null || source.Count == 0)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
|
||||
return source[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Jellyfin.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides <c>Shuffle</c> extensions methods for <see cref="IList{T}" />.
|
||||
/// </summary>
|
||||
public static class ShuffleExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Shuffles the items in a list.
|
||||
/// </summary>
|
||||
/// <param name="list">The list that should get shuffled.</param>
|
||||
/// <typeparam name="T">The type.</typeparam>
|
||||
public static void Shuffle<T>(this IList<T> list)
|
||||
{
|
||||
list.Shuffle(Random.Shared);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shuffles the items in a list.
|
||||
/// </summary>
|
||||
/// <param name="list">The list that should get shuffled.</param>
|
||||
/// <param name="rng">The random number generator to use.</param>
|
||||
/// <typeparam name="T">The type.</typeparam>
|
||||
public static void Shuffle<T>(this IList<T> list, Random rng)
|
||||
{
|
||||
int n = list.Count;
|
||||
while (n > 1)
|
||||
{
|
||||
int k = rng.Next(n--);
|
||||
T value = list[k];
|
||||
list[k] = list[n];
|
||||
list[n] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 Gérald Barré
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
// TODO: remove when analyzer is fixed: https://github.com/dotnet/roslyn-analyzers/issues/5158
|
||||
#pragma warning disable CA1034 // Nested types should not be visible
|
||||
|
||||
using System;
|
||||
using System.Diagnostics.Contracts;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Jellyfin.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Extension class for splitting lines without unnecessary allocations.
|
||||
/// </summary>
|
||||
public static class SplitStringExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new string split enumerator.
|
||||
/// </summary>
|
||||
/// <param name="str">The string to split.</param>
|
||||
/// <param name="separator">The separator to split on.</param>
|
||||
/// <returns>The enumerator struct.</returns>
|
||||
[Pure]
|
||||
public static Enumerator SpanSplit(this string str, char separator) => new(str.AsSpan(), separator);
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new span split enumerator.
|
||||
/// </summary>
|
||||
/// <param name="str">The span to split.</param>
|
||||
/// <param name="separator">The separator to split on.</param>
|
||||
/// <returns>The enumerator struct.</returns>
|
||||
[Pure]
|
||||
public static Enumerator Split(this ReadOnlySpan<char> str, char separator) => new(str, separator);
|
||||
|
||||
/// <summary>
|
||||
/// Provides an enumerator for the substrings separated by the separator.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Auto)]
|
||||
public ref struct Enumerator
|
||||
{
|
||||
private readonly char _separator;
|
||||
private ReadOnlySpan<char> _str;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Enumerator"/> struct.
|
||||
/// </summary>
|
||||
/// <param name="str">The span to split.</param>
|
||||
/// <param name="separator">The separator to split on.</param>
|
||||
public Enumerator(ReadOnlySpan<char> str, char separator)
|
||||
{
|
||||
_str = str;
|
||||
_separator = separator;
|
||||
Current = default;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a reference to the item at the current position of the enumerator.
|
||||
/// </summary>
|
||||
public ReadOnlySpan<char> Current { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns <c>this</c>.
|
||||
/// </summary>
|
||||
/// <returns><c>this</c>.</returns>
|
||||
public readonly Enumerator GetEnumerator() => this;
|
||||
|
||||
/// <summary>
|
||||
/// Advances the enumerator to the next item.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> if there is a next element; otherwise <c>false</c>.</returns>
|
||||
public bool MoveNext()
|
||||
{
|
||||
if (_str.Length == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var span = _str;
|
||||
var index = span.IndexOf(_separator);
|
||||
if (index == -1)
|
||||
{
|
||||
_str = ReadOnlySpan<char>.Empty;
|
||||
Current = span;
|
||||
return true;
|
||||
}
|
||||
|
||||
Current = span.Slice(0, index);
|
||||
_str = span[(index + 1)..];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace Jellyfin.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Class BaseExtensions.
|
||||
/// </summary>
|
||||
public static class StreamExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Reads all lines in the <see cref="Stream" />.
|
||||
/// </summary>
|
||||
/// <param name="stream">The <see cref="Stream" /> to read from.</param>
|
||||
/// <returns>All lines in the stream.</returns>
|
||||
public static string[] ReadAllLines(this Stream stream)
|
||||
=> ReadAllLines(stream, Encoding.UTF8);
|
||||
|
||||
/// <summary>
|
||||
/// Reads all lines in the <see cref="Stream" />.
|
||||
/// </summary>
|
||||
/// <param name="stream">The <see cref="Stream" /> to read from.</param>
|
||||
/// <param name="encoding">The character encoding to use.</param>
|
||||
/// <returns>All lines in the stream.</returns>
|
||||
public static string[] ReadAllLines(this Stream stream, Encoding encoding)
|
||||
{
|
||||
using StreamReader reader = new StreamReader(stream, encoding);
|
||||
return ReadAllLines(reader).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads all lines in the <see cref="TextReader" />.
|
||||
/// </summary>
|
||||
/// <param name="reader">The <see cref="TextReader" /> to read from.</param>
|
||||
/// <returns>All lines in the stream.</returns>
|
||||
public static IEnumerable<string> ReadAllLines(this TextReader reader)
|
||||
{
|
||||
string? line;
|
||||
while ((line = reader.ReadLine()) is not null)
|
||||
{
|
||||
yield return line;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads all lines in the <see cref="TextReader" />.
|
||||
/// </summary>
|
||||
/// <param name="reader">The <see cref="TextReader" /> to read from.</param>
|
||||
/// <param name="cancellationToken">The token to monitor for cancellation requests.</param>
|
||||
/// <returns>All lines in the stream.</returns>
|
||||
public static async IAsyncEnumerable<string> ReadAllLinesAsync(this TextReader reader, [EnumeratorCancellation] CancellationToken cancellationToken = default)
|
||||
{
|
||||
string? line;
|
||||
while ((line = await reader.ReadLineAsync(cancellationToken).ConfigureAwait(false)) is not null)
|
||||
{
|
||||
yield return line;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Jellyfin.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Extension methods for the <see cref="StringBuilder"/> class.
|
||||
/// </summary>
|
||||
public static class StringBuilderExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Concatenates and appends the members of a collection in single quotes using the specified delimiter.
|
||||
/// </summary>
|
||||
/// <param name="builder">The string builder.</param>
|
||||
/// <param name="delimiter">The character delimiter.</param>
|
||||
/// <param name="values">The collection of strings to concatenate.</param>
|
||||
/// <returns>The updated string builder.</returns>
|
||||
public static StringBuilder AppendJoinInSingleQuotes(this StringBuilder builder, char delimiter, IReadOnlyList<string> values)
|
||||
{
|
||||
var len = values.Count;
|
||||
for (var i = 0; i < len; i++)
|
||||
{
|
||||
builder.Append('\'')
|
||||
.Append(values[i])
|
||||
.Append('\'')
|
||||
.Append(delimiter);
|
||||
}
|
||||
|
||||
// remove last ,
|
||||
builder.Length--;
|
||||
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using ICU4N.Text;
|
||||
|
||||
namespace Jellyfin.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides extensions methods for <see cref="string" />.
|
||||
/// </summary>
|
||||
public static partial class StringExtensions
|
||||
{
|
||||
private static readonly Lazy<string> _transliteratorId = new(() =>
|
||||
Environment.GetEnvironmentVariable("JELLYFIN_TRANSLITERATOR_ID")
|
||||
?? "Any-Latin; Latin-Ascii; Lower; NFD; [:Nonspacing Mark:] Remove; [:Punctuation:] Remove;");
|
||||
|
||||
private static readonly Lazy<Transliterator?> _transliterator = new(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
return Transliterator.GetInstance(_transliteratorId.Value);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
// Matches non-conforming unicode chars
|
||||
// https://mnaoumov.wordpress.com/2014/06/14/stripping-invalid-characters-from-utf-16-strings/
|
||||
|
||||
[GeneratedRegex("([\ud800-\udbff](?![\udc00-\udfff]))|((?<![\ud800-\udbff])[\udc00-\udfff])|(�)")]
|
||||
private static partial Regex NonConformingUnicodeRegex();
|
||||
|
||||
/// <summary>
|
||||
/// Removes the diacritics character from the strings.
|
||||
/// </summary>
|
||||
/// <param name="text">The string to act on.</param>
|
||||
/// <returns>The string without diacritics character.</returns>
|
||||
public static string RemoveDiacritics(this string text)
|
||||
=> Diacritics.Extensions.StringExtensions.RemoveDiacritics(
|
||||
NonConformingUnicodeRegex().Replace(text, string.Empty));
|
||||
|
||||
/// <summary>
|
||||
/// Checks whether or not the specified string has diacritics in it.
|
||||
/// </summary>
|
||||
/// <param name="text">The string to check.</param>
|
||||
/// <returns>True if the string has diacritics, false otherwise.</returns>
|
||||
public static bool HasDiacritics(this string text)
|
||||
=> Diacritics.Extensions.StringExtensions.HasDiacritics(text)
|
||||
|| NonConformingUnicodeRegex().IsMatch(text);
|
||||
|
||||
/// <summary>
|
||||
/// Counts the number of occurrences of [needle] in the string.
|
||||
/// </summary>
|
||||
/// <param name="value">The haystack to search in.</param>
|
||||
/// <param name="needle">The character to search for.</param>
|
||||
/// <returns>The number of occurrences of the [needle] character.</returns>
|
||||
public static int Count(this ReadOnlySpan<char> value, char needle)
|
||||
{
|
||||
var count = 0;
|
||||
var length = value.Length;
|
||||
for (var i = 0; i < length; i++)
|
||||
{
|
||||
if (value[i] == needle)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the part on the left of the <c>needle</c>.
|
||||
/// </summary>
|
||||
/// <param name="haystack">The string to seek.</param>
|
||||
/// <param name="needle">The needle to find.</param>
|
||||
/// <returns>The part left of the <paramref name="needle" />.</returns>
|
||||
public static ReadOnlySpan<char> LeftPart(this ReadOnlySpan<char> haystack, char needle)
|
||||
{
|
||||
if (haystack.IsEmpty)
|
||||
{
|
||||
return ReadOnlySpan<char>.Empty;
|
||||
}
|
||||
|
||||
var pos = haystack.IndexOf(needle);
|
||||
return pos == -1 ? haystack : haystack[..pos];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the part on the right of the <c>needle</c>.
|
||||
/// </summary>
|
||||
/// <param name="haystack">The string to seek.</param>
|
||||
/// <param name="needle">The needle to find.</param>
|
||||
/// <returns>The part right of the <paramref name="needle" />.</returns>
|
||||
public static ReadOnlySpan<char> RightPart(this ReadOnlySpan<char> haystack, char needle)
|
||||
{
|
||||
if (haystack.IsEmpty)
|
||||
{
|
||||
return ReadOnlySpan<char>.Empty;
|
||||
}
|
||||
|
||||
var pos = haystack.LastIndexOf(needle);
|
||||
if (pos == -1)
|
||||
{
|
||||
return haystack;
|
||||
}
|
||||
|
||||
if (pos == haystack.Length - 1)
|
||||
{
|
||||
return ReadOnlySpan<char>.Empty;
|
||||
}
|
||||
|
||||
return haystack[(pos + 1)..];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a transliterated string which only contain ascii characters.
|
||||
/// </summary>
|
||||
/// <param name="text">The string to act on.</param>
|
||||
/// <returns>The transliterated string.</returns>
|
||||
public static string Transliterated(this string text)
|
||||
{
|
||||
return (_transliterator.Value is null) ? text : _transliterator.Value.Transliterate(text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensures all strings are non-null and trimmed of leading an trailing blanks.
|
||||
/// </summary>
|
||||
/// <param name="values">The enumerable of strings to trim.</param>
|
||||
/// <returns>The enumeration of trimmed strings.</returns>
|
||||
public static IEnumerable<string> Trimmed(this IEnumerable<string> values)
|
||||
{
|
||||
return values.Select(i => (i ?? string.Empty).Trim());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Truncates a string at the first null character ('\0').
|
||||
/// </summary>
|
||||
/// <param name="text">The input string.</param>
|
||||
/// <returns>
|
||||
/// The substring up to (but not including) the first null character,
|
||||
/// or the original string if no null character is present.
|
||||
/// </returns>
|
||||
public static string TruncateAtNull(this string text)
|
||||
{
|
||||
return string.IsNullOrEmpty(text) ? text : text.AsSpan().LeftPart('\0').ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net10.0
|
||||
build_property.TargetFramework = net10.0
|
||||
build_property.TargetFrameworkIdentifier = .NETCoreApp
|
||||
build_property.TargetFrameworkIdentifier = .NETCoreApp
|
||||
build_property.TargetFrameworkVersion = v10.0
|
||||
build_property.TargetFrameworkVersion = v10.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Jellyfin.Extensions
|
||||
build_property.ProjectDir = /srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.EffectiveAnalysisLevelStyle = 10.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,680 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj",
|
||||
"projectName": "Jellyfin.CodeAnalysis",
|
||||
"projectPath": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj",
|
||||
"packagesPath": "/home/wjones/.nuget/packages/",
|
||||
"outputPath": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.CodeAnalysis/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"centralPackageVersionsManagementEnabled": true,
|
||||
"configFilePaths": [
|
||||
"/srv/common_drive/Projects/pgsql-jellyfin/nuget.config",
|
||||
"/home/wjones/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"netstandard2.0"
|
||||
],
|
||||
"sources": {
|
||||
"/usr/lib/dotnet/library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"netstandard2.0": {
|
||||
"targetAlias": "netstandard2.0",
|
||||
"projectReferences": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"allWarningsAsErrors": true,
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
],
|
||||
"warnNotAsError": [
|
||||
"NU1902",
|
||||
"NU1903"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "10.0.100"
|
||||
},
|
||||
"frameworks": {
|
||||
"netstandard2.0": {
|
||||
"targetAlias": "netstandard2.0",
|
||||
"dependencies": {
|
||||
"IDisposableAnalyzers": {
|
||||
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[4.0.8, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"Microsoft.CodeAnalysis.Analyzers": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[3.11.0, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"Microsoft.CodeAnalysis.BannedApiAnalyzers": {
|
||||
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[4.14.0, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"Microsoft.CodeAnalysis.CSharp": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[5.0.0, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"NETStandard.Library": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[2.0.3, )",
|
||||
"autoReferenced": true
|
||||
},
|
||||
"SerilogAnalyzer": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[0.15.0, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"SmartAnalyzers.MultithreadingAnalyzer": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[1.1.31, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"StyleCop.Analyzers": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[1.2.0-beta.556, )",
|
||||
"versionCentrallyManaged": true
|
||||
}
|
||||
},
|
||||
"centralPackageVersions": {
|
||||
"AsyncKeyedLock": "8.0.2",
|
||||
"AutoFixture": "4.18.1",
|
||||
"AutoFixture.AutoMoq": "4.18.1",
|
||||
"AutoFixture.Xunit2": "4.18.1",
|
||||
"BDInfo": "0.8.0",
|
||||
"BitFaster.Caching": "2.5.4",
|
||||
"BlurHashSharp": "1.4.0-pre.1",
|
||||
"BlurHashSharp.SkiaSharp": "1.4.0-pre.1",
|
||||
"CommandLineParser": "2.9.1",
|
||||
"coverlet.collector": "8.0.0",
|
||||
"Diacritics": "4.1.4",
|
||||
"DiscUtils.Udf": "0.16.13",
|
||||
"DotNet.Glob": "3.1.3",
|
||||
"FsCheck.Xunit": "3.3.2",
|
||||
"HarfBuzzSharp.NativeAssets.Linux": "8.3.1.1",
|
||||
"ICU4N.Transliterator": "60.1.0-alpha.356",
|
||||
"IDisposableAnalyzers": "4.0.8",
|
||||
"Ignore": "0.2.1",
|
||||
"Jellyfin.XmlTv": "10.8.0",
|
||||
"libse": "4.0.12",
|
||||
"LrcParser": "2025.623.0",
|
||||
"MetaBrainz.MusicBrainz": "8.0.1",
|
||||
"Microsoft.AspNetCore.Authorization": "10.0.3",
|
||||
"Microsoft.AspNetCore.Mvc.Testing": "10.0.3",
|
||||
"Microsoft.CodeAnalysis.Analyzers": "3.11.0",
|
||||
"Microsoft.CodeAnalysis.BannedApiAnalyzers": "4.14.0",
|
||||
"Microsoft.CodeAnalysis.Common": "5.0.0",
|
||||
"Microsoft.CodeAnalysis.CSharp": "5.0.0",
|
||||
"Microsoft.Data.Sqlite": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Design": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Sqlite": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Tools": "10.0.3",
|
||||
"Microsoft.Extensions.Caching.Abstractions": "10.0.3",
|
||||
"Microsoft.Extensions.Caching.Memory": "10.0.3",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "10.0.3",
|
||||
"Microsoft.Extensions.Configuration.Binder": "10.0.3",
|
||||
"Microsoft.Extensions.DependencyInjection": "10.0.3",
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore": "10.0.3",
|
||||
"Microsoft.Extensions.Hosting.Abstractions": "10.0.3",
|
||||
"Microsoft.Extensions.Http": "10.0.3",
|
||||
"Microsoft.Extensions.Logging": "10.0.3",
|
||||
"Microsoft.Extensions.Options": "10.0.3",
|
||||
"Microsoft.NET.Test.Sdk": "18.0.1",
|
||||
"MimeTypes": "2.5.2",
|
||||
"Moq": "4.18.4",
|
||||
"Morestachio": "5.0.1.631",
|
||||
"NEbml": "1.1.0.5",
|
||||
"Newtonsoft.Json": "13.0.4",
|
||||
"PlaylistsNET": "1.4.1",
|
||||
"Polly": "8.6.5",
|
||||
"prometheus-net": "8.2.1",
|
||||
"prometheus-net.AspNetCore": "8.2.1",
|
||||
"prometheus-net.DotNetRuntime": "4.4.1",
|
||||
"Serilog.AspNetCore": "10.0.0",
|
||||
"Serilog.Enrichers.Thread": "4.0.0",
|
||||
"Serilog.Expressions": "5.0.0",
|
||||
"Serilog.Settings.Configuration": "10.0.0",
|
||||
"Serilog.Sinks.Async": "2.1.0",
|
||||
"Serilog.Sinks.Console": "6.1.1",
|
||||
"Serilog.Sinks.File": "7.0.0",
|
||||
"Serilog.Sinks.Graylog": "3.1.1",
|
||||
"SerilogAnalyzer": "0.15.0",
|
||||
"SharpFuzz": "2.2.0",
|
||||
"SkiaSharp": "[3.116.1]",
|
||||
"SkiaSharp.HarfBuzz": "[3.116.1]",
|
||||
"SkiaSharp.NativeAssets.Linux": "[3.116.1]",
|
||||
"SmartAnalyzers.MultithreadingAnalyzer": "1.1.31",
|
||||
"StyleCop.Analyzers": "1.2.0-beta.556",
|
||||
"Svg.Skia": "3.4.1",
|
||||
"Swashbuckle.AspNetCore": "7.3.2",
|
||||
"Swashbuckle.AspNetCore.ReDoc": "6.9.0",
|
||||
"System.Text.Json": "10.0.3",
|
||||
"TagLibSharp": "2.3.0",
|
||||
"TMDbLib": "2.3.0",
|
||||
"UTF.Unknown": "2.6.0",
|
||||
"xunit": "2.9.3",
|
||||
"Xunit.Priority": "1.1.6",
|
||||
"xunit.runner.visualstudio": "2.8.2",
|
||||
"Xunit.SkippableFact": "1.5.61",
|
||||
"z440.atl.core": "7.11.0"
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/10.0.103/RuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj": {
|
||||
"version": "10.12.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj",
|
||||
"projectName": "Jellyfin.Extensions",
|
||||
"projectPath": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj",
|
||||
"packagesPath": "/home/wjones/.nuget/packages/",
|
||||
"outputPath": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"centralPackageVersionsManagementEnabled": true,
|
||||
"configFilePaths": [
|
||||
"/srv/common_drive/Projects/pgsql-jellyfin/nuget.config",
|
||||
"/home/wjones/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net10.0"
|
||||
],
|
||||
"sources": {
|
||||
"/usr/lib/dotnet/library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net10.0": {
|
||||
"targetAlias": "net10.0",
|
||||
"projectReferences": {
|
||||
"/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj": {
|
||||
"projectPath": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"allWarningsAsErrors": true,
|
||||
"noWarn": [
|
||||
"NU5104"
|
||||
],
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
],
|
||||
"warnNotAsError": [
|
||||
"NU1902",
|
||||
"NU1903"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "all"
|
||||
},
|
||||
"SdkAnalysisLevel": "10.0.100"
|
||||
},
|
||||
"frameworks": {
|
||||
"net10.0": {
|
||||
"targetAlias": "net10.0",
|
||||
"dependencies": {
|
||||
"Diacritics": {
|
||||
"target": "Package",
|
||||
"version": "[4.1.4, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"ICU4N.Transliterator": {
|
||||
"target": "Package",
|
||||
"version": "[60.1.0-alpha.356, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"IDisposableAnalyzers": {
|
||||
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[4.0.8, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"Microsoft.CodeAnalysis.BannedApiAnalyzers": {
|
||||
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[4.14.0, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"SerilogAnalyzer": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[0.15.0, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"SmartAnalyzers.MultithreadingAnalyzer": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[1.1.31, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"StyleCop.Analyzers": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[1.2.0-beta.556, )",
|
||||
"versionCentrallyManaged": true
|
||||
}
|
||||
},
|
||||
"centralPackageVersions": {
|
||||
"AsyncKeyedLock": "8.0.2",
|
||||
"AutoFixture": "4.18.1",
|
||||
"AutoFixture.AutoMoq": "4.18.1",
|
||||
"AutoFixture.Xunit2": "4.18.1",
|
||||
"BDInfo": "0.8.0",
|
||||
"BitFaster.Caching": "2.5.4",
|
||||
"BlurHashSharp": "1.4.0-pre.1",
|
||||
"BlurHashSharp.SkiaSharp": "1.4.0-pre.1",
|
||||
"CommandLineParser": "2.9.1",
|
||||
"coverlet.collector": "8.0.0",
|
||||
"Diacritics": "4.1.4",
|
||||
"DiscUtils.Udf": "0.16.13",
|
||||
"DotNet.Glob": "3.1.3",
|
||||
"FsCheck.Xunit": "3.3.2",
|
||||
"HarfBuzzSharp.NativeAssets.Linux": "8.3.1.1",
|
||||
"ICU4N.Transliterator": "60.1.0-alpha.356",
|
||||
"IDisposableAnalyzers": "4.0.8",
|
||||
"Ignore": "0.2.1",
|
||||
"Jellyfin.XmlTv": "10.8.0",
|
||||
"libse": "4.0.12",
|
||||
"LrcParser": "2025.623.0",
|
||||
"MetaBrainz.MusicBrainz": "8.0.1",
|
||||
"Microsoft.AspNetCore.Authorization": "10.0.3",
|
||||
"Microsoft.AspNetCore.Mvc.Testing": "10.0.3",
|
||||
"Microsoft.CodeAnalysis.Analyzers": "3.11.0",
|
||||
"Microsoft.CodeAnalysis.BannedApiAnalyzers": "4.14.0",
|
||||
"Microsoft.CodeAnalysis.Common": "5.0.0",
|
||||
"Microsoft.CodeAnalysis.CSharp": "5.0.0",
|
||||
"Microsoft.Data.Sqlite": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Design": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Sqlite": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Tools": "10.0.3",
|
||||
"Microsoft.Extensions.Caching.Abstractions": "10.0.3",
|
||||
"Microsoft.Extensions.Caching.Memory": "10.0.3",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "10.0.3",
|
||||
"Microsoft.Extensions.Configuration.Binder": "10.0.3",
|
||||
"Microsoft.Extensions.DependencyInjection": "10.0.3",
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore": "10.0.3",
|
||||
"Microsoft.Extensions.Hosting.Abstractions": "10.0.3",
|
||||
"Microsoft.Extensions.Http": "10.0.3",
|
||||
"Microsoft.Extensions.Logging": "10.0.3",
|
||||
"Microsoft.Extensions.Options": "10.0.3",
|
||||
"Microsoft.NET.Test.Sdk": "18.0.1",
|
||||
"MimeTypes": "2.5.2",
|
||||
"Moq": "4.18.4",
|
||||
"Morestachio": "5.0.1.631",
|
||||
"NEbml": "1.1.0.5",
|
||||
"Newtonsoft.Json": "13.0.4",
|
||||
"PlaylistsNET": "1.4.1",
|
||||
"Polly": "8.6.5",
|
||||
"prometheus-net": "8.2.1",
|
||||
"prometheus-net.AspNetCore": "8.2.1",
|
||||
"prometheus-net.DotNetRuntime": "4.4.1",
|
||||
"Serilog.AspNetCore": "10.0.0",
|
||||
"Serilog.Enrichers.Thread": "4.0.0",
|
||||
"Serilog.Expressions": "5.0.0",
|
||||
"Serilog.Settings.Configuration": "10.0.0",
|
||||
"Serilog.Sinks.Async": "2.1.0",
|
||||
"Serilog.Sinks.Console": "6.1.1",
|
||||
"Serilog.Sinks.File": "7.0.0",
|
||||
"Serilog.Sinks.Graylog": "3.1.1",
|
||||
"SerilogAnalyzer": "0.15.0",
|
||||
"SharpFuzz": "2.2.0",
|
||||
"SkiaSharp": "[3.116.1]",
|
||||
"SkiaSharp.HarfBuzz": "[3.116.1]",
|
||||
"SkiaSharp.NativeAssets.Linux": "[3.116.1]",
|
||||
"SmartAnalyzers.MultithreadingAnalyzer": "1.1.31",
|
||||
"StyleCop.Analyzers": "1.2.0-beta.556",
|
||||
"Svg.Skia": "3.4.1",
|
||||
"Swashbuckle.AspNetCore": "7.3.2",
|
||||
"Swashbuckle.AspNetCore.ReDoc": "6.9.0",
|
||||
"System.Text.Json": "10.0.3",
|
||||
"TagLibSharp": "2.3.0",
|
||||
"TMDbLib": "2.3.0",
|
||||
"UTF.Unknown": "2.6.0",
|
||||
"xunit": "2.9.3",
|
||||
"Xunit.Priority": "1.1.6",
|
||||
"xunit.runner.visualstudio": "2.8.2",
|
||||
"Xunit.SkippableFact": "1.5.61",
|
||||
"z440.atl.core": "7.11.0"
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"frameworkReferences": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/10.0.103/PortableRuntimeIdentifierGraph.json",
|
||||
"packagesToPrune": {
|
||||
"Microsoft.CSharp": "(,4.7.32767]",
|
||||
"Microsoft.VisualBasic": "(,10.4.32767]",
|
||||
"Microsoft.Win32.Primitives": "(,4.3.32767]",
|
||||
"Microsoft.Win32.Registry": "(,5.0.32767]",
|
||||
"runtime.any.System.Collections": "(,4.3.32767]",
|
||||
"runtime.any.System.Diagnostics.Tools": "(,4.3.32767]",
|
||||
"runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]",
|
||||
"runtime.any.System.Globalization": "(,4.3.32767]",
|
||||
"runtime.any.System.Globalization.Calendars": "(,4.3.32767]",
|
||||
"runtime.any.System.IO": "(,4.3.32767]",
|
||||
"runtime.any.System.Reflection": "(,4.3.32767]",
|
||||
"runtime.any.System.Reflection.Extensions": "(,4.3.32767]",
|
||||
"runtime.any.System.Reflection.Primitives": "(,4.3.32767]",
|
||||
"runtime.any.System.Resources.ResourceManager": "(,4.3.32767]",
|
||||
"runtime.any.System.Runtime": "(,4.3.32767]",
|
||||
"runtime.any.System.Runtime.Handles": "(,4.3.32767]",
|
||||
"runtime.any.System.Runtime.InteropServices": "(,4.3.32767]",
|
||||
"runtime.any.System.Text.Encoding": "(,4.3.32767]",
|
||||
"runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]",
|
||||
"runtime.any.System.Threading.Tasks": "(,4.3.32767]",
|
||||
"runtime.any.System.Threading.Timer": "(,4.3.32767]",
|
||||
"runtime.aot.System.Collections": "(,4.3.32767]",
|
||||
"runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]",
|
||||
"runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]",
|
||||
"runtime.aot.System.Globalization": "(,4.3.32767]",
|
||||
"runtime.aot.System.Globalization.Calendars": "(,4.3.32767]",
|
||||
"runtime.aot.System.IO": "(,4.3.32767]",
|
||||
"runtime.aot.System.Reflection": "(,4.3.32767]",
|
||||
"runtime.aot.System.Reflection.Extensions": "(,4.3.32767]",
|
||||
"runtime.aot.System.Reflection.Primitives": "(,4.3.32767]",
|
||||
"runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]",
|
||||
"runtime.aot.System.Runtime": "(,4.3.32767]",
|
||||
"runtime.aot.System.Runtime.Handles": "(,4.3.32767]",
|
||||
"runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]",
|
||||
"runtime.aot.System.Text.Encoding": "(,4.3.32767]",
|
||||
"runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]",
|
||||
"runtime.aot.System.Threading.Tasks": "(,4.3.32767]",
|
||||
"runtime.aot.System.Threading.Timer": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]",
|
||||
"runtime.unix.System.Console": "(,4.3.32767]",
|
||||
"runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]",
|
||||
"runtime.unix.System.IO.FileSystem": "(,4.3.32767]",
|
||||
"runtime.unix.System.Net.Primitives": "(,4.3.32767]",
|
||||
"runtime.unix.System.Net.Sockets": "(,4.3.32767]",
|
||||
"runtime.unix.System.Private.Uri": "(,4.3.32767]",
|
||||
"runtime.unix.System.Runtime.Extensions": "(,4.3.32767]",
|
||||
"runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]",
|
||||
"runtime.win.System.Console": "(,4.3.32767]",
|
||||
"runtime.win.System.Diagnostics.Debug": "(,4.3.32767]",
|
||||
"runtime.win.System.IO.FileSystem": "(,4.3.32767]",
|
||||
"runtime.win.System.Net.Primitives": "(,4.3.32767]",
|
||||
"runtime.win.System.Net.Sockets": "(,4.3.32767]",
|
||||
"runtime.win.System.Runtime.Extensions": "(,4.3.32767]",
|
||||
"runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
|
||||
"runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
|
||||
"runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
|
||||
"runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.win7.System.Private.Uri": "(,4.3.32767]",
|
||||
"runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"System.AppContext": "(,4.3.32767]",
|
||||
"System.Buffers": "(,5.0.32767]",
|
||||
"System.Collections": "(,4.3.32767]",
|
||||
"System.Collections.Concurrent": "(,4.3.32767]",
|
||||
"System.Collections.Immutable": "(,10.0.32767]",
|
||||
"System.Collections.NonGeneric": "(,4.3.32767]",
|
||||
"System.Collections.Specialized": "(,4.3.32767]",
|
||||
"System.ComponentModel": "(,4.3.32767]",
|
||||
"System.ComponentModel.Annotations": "(,4.3.32767]",
|
||||
"System.ComponentModel.EventBasedAsync": "(,4.3.32767]",
|
||||
"System.ComponentModel.Primitives": "(,4.3.32767]",
|
||||
"System.ComponentModel.TypeConverter": "(,4.3.32767]",
|
||||
"System.Console": "(,4.3.32767]",
|
||||
"System.Data.Common": "(,4.3.32767]",
|
||||
"System.Data.DataSetExtensions": "(,4.4.32767]",
|
||||
"System.Diagnostics.Contracts": "(,4.3.32767]",
|
||||
"System.Diagnostics.Debug": "(,4.3.32767]",
|
||||
"System.Diagnostics.DiagnosticSource": "(,10.0.32767]",
|
||||
"System.Diagnostics.FileVersionInfo": "(,4.3.32767]",
|
||||
"System.Diagnostics.Process": "(,4.3.32767]",
|
||||
"System.Diagnostics.StackTrace": "(,4.3.32767]",
|
||||
"System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]",
|
||||
"System.Diagnostics.Tools": "(,4.3.32767]",
|
||||
"System.Diagnostics.TraceSource": "(,4.3.32767]",
|
||||
"System.Diagnostics.Tracing": "(,4.3.32767]",
|
||||
"System.Drawing.Primitives": "(,4.3.32767]",
|
||||
"System.Dynamic.Runtime": "(,4.3.32767]",
|
||||
"System.Formats.Asn1": "(,10.0.32767]",
|
||||
"System.Formats.Tar": "(,10.0.32767]",
|
||||
"System.Globalization": "(,4.3.32767]",
|
||||
"System.Globalization.Calendars": "(,4.3.32767]",
|
||||
"System.Globalization.Extensions": "(,4.3.32767]",
|
||||
"System.IO": "(,4.3.32767]",
|
||||
"System.IO.Compression": "(,4.3.32767]",
|
||||
"System.IO.Compression.ZipFile": "(,4.3.32767]",
|
||||
"System.IO.FileSystem": "(,4.3.32767]",
|
||||
"System.IO.FileSystem.AccessControl": "(,4.4.32767]",
|
||||
"System.IO.FileSystem.DriveInfo": "(,4.3.32767]",
|
||||
"System.IO.FileSystem.Primitives": "(,4.3.32767]",
|
||||
"System.IO.FileSystem.Watcher": "(,4.3.32767]",
|
||||
"System.IO.IsolatedStorage": "(,4.3.32767]",
|
||||
"System.IO.MemoryMappedFiles": "(,4.3.32767]",
|
||||
"System.IO.Pipelines": "(,10.0.32767]",
|
||||
"System.IO.Pipes": "(,4.3.32767]",
|
||||
"System.IO.Pipes.AccessControl": "(,5.0.32767]",
|
||||
"System.IO.UnmanagedMemoryStream": "(,4.3.32767]",
|
||||
"System.Linq": "(,4.3.32767]",
|
||||
"System.Linq.AsyncEnumerable": "(,10.0.32767]",
|
||||
"System.Linq.Expressions": "(,4.3.32767]",
|
||||
"System.Linq.Parallel": "(,4.3.32767]",
|
||||
"System.Linq.Queryable": "(,4.3.32767]",
|
||||
"System.Memory": "(,5.0.32767]",
|
||||
"System.Net.Http": "(,4.3.32767]",
|
||||
"System.Net.Http.Json": "(,10.0.32767]",
|
||||
"System.Net.NameResolution": "(,4.3.32767]",
|
||||
"System.Net.NetworkInformation": "(,4.3.32767]",
|
||||
"System.Net.Ping": "(,4.3.32767]",
|
||||
"System.Net.Primitives": "(,4.3.32767]",
|
||||
"System.Net.Requests": "(,4.3.32767]",
|
||||
"System.Net.Security": "(,4.3.32767]",
|
||||
"System.Net.ServerSentEvents": "(,10.0.32767]",
|
||||
"System.Net.Sockets": "(,4.3.32767]",
|
||||
"System.Net.WebHeaderCollection": "(,4.3.32767]",
|
||||
"System.Net.WebSockets": "(,4.3.32767]",
|
||||
"System.Net.WebSockets.Client": "(,4.3.32767]",
|
||||
"System.Numerics.Vectors": "(,5.0.32767]",
|
||||
"System.ObjectModel": "(,4.3.32767]",
|
||||
"System.Private.DataContractSerialization": "(,4.3.32767]",
|
||||
"System.Private.Uri": "(,4.3.32767]",
|
||||
"System.Reflection": "(,4.3.32767]",
|
||||
"System.Reflection.DispatchProxy": "(,6.0.32767]",
|
||||
"System.Reflection.Emit": "(,4.7.32767]",
|
||||
"System.Reflection.Emit.ILGeneration": "(,4.7.32767]",
|
||||
"System.Reflection.Emit.Lightweight": "(,4.7.32767]",
|
||||
"System.Reflection.Extensions": "(,4.3.32767]",
|
||||
"System.Reflection.Metadata": "(,10.0.32767]",
|
||||
"System.Reflection.Primitives": "(,4.3.32767]",
|
||||
"System.Reflection.TypeExtensions": "(,4.3.32767]",
|
||||
"System.Resources.Reader": "(,4.3.32767]",
|
||||
"System.Resources.ResourceManager": "(,4.3.32767]",
|
||||
"System.Resources.Writer": "(,4.3.32767]",
|
||||
"System.Runtime": "(,4.3.32767]",
|
||||
"System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]",
|
||||
"System.Runtime.CompilerServices.VisualC": "(,4.3.32767]",
|
||||
"System.Runtime.Extensions": "(,4.3.32767]",
|
||||
"System.Runtime.Handles": "(,4.3.32767]",
|
||||
"System.Runtime.InteropServices": "(,4.3.32767]",
|
||||
"System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]",
|
||||
"System.Runtime.Loader": "(,4.3.32767]",
|
||||
"System.Runtime.Numerics": "(,4.3.32767]",
|
||||
"System.Runtime.Serialization.Formatters": "(,4.3.32767]",
|
||||
"System.Runtime.Serialization.Json": "(,4.3.32767]",
|
||||
"System.Runtime.Serialization.Primitives": "(,4.3.32767]",
|
||||
"System.Runtime.Serialization.Xml": "(,4.3.32767]",
|
||||
"System.Security.AccessControl": "(,6.0.32767]",
|
||||
"System.Security.Claims": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.Algorithms": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.Cng": "(,5.0.32767]",
|
||||
"System.Security.Cryptography.Csp": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.Encoding": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.OpenSsl": "(,5.0.32767]",
|
||||
"System.Security.Cryptography.Primitives": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.X509Certificates": "(,4.3.32767]",
|
||||
"System.Security.Principal": "(,4.3.32767]",
|
||||
"System.Security.Principal.Windows": "(,5.0.32767]",
|
||||
"System.Security.SecureString": "(,4.3.32767]",
|
||||
"System.Text.Encoding": "(,4.3.32767]",
|
||||
"System.Text.Encoding.CodePages": "(,10.0.32767]",
|
||||
"System.Text.Encoding.Extensions": "(,4.3.32767]",
|
||||
"System.Text.Encodings.Web": "(,10.0.32767]",
|
||||
"System.Text.Json": "(,10.0.32767]",
|
||||
"System.Text.RegularExpressions": "(,4.3.32767]",
|
||||
"System.Threading": "(,4.3.32767]",
|
||||
"System.Threading.AccessControl": "(,10.0.32767]",
|
||||
"System.Threading.Channels": "(,10.0.32767]",
|
||||
"System.Threading.Overlapped": "(,4.3.32767]",
|
||||
"System.Threading.Tasks": "(,4.3.32767]",
|
||||
"System.Threading.Tasks.Dataflow": "(,10.0.32767]",
|
||||
"System.Threading.Tasks.Extensions": "(,5.0.32767]",
|
||||
"System.Threading.Tasks.Parallel": "(,4.3.32767]",
|
||||
"System.Threading.Thread": "(,4.3.32767]",
|
||||
"System.Threading.ThreadPool": "(,4.3.32767]",
|
||||
"System.Threading.Timer": "(,4.3.32767]",
|
||||
"System.ValueTuple": "(,4.5.32767]",
|
||||
"System.Xml.ReaderWriter": "(,4.3.32767]",
|
||||
"System.Xml.XDocument": "(,4.3.32767]",
|
||||
"System.Xml.XmlDocument": "(,4.3.32767]",
|
||||
"System.Xml.XmlSerializer": "(,4.3.32767]",
|
||||
"System.Xml.XPath": "(,4.3.32767]",
|
||||
"System.Xml.XPath.XDocument": "(,5.0.32767]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/wjones/.nuget/packages/</NuGetPackageRoot>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/wjones/.nuget/packages/</NuGetPackageFolders>
|
||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="/home/wjones/.nuget/packages/" />
|
||||
</ItemGroup>
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.codeanalysis.bannedapianalyzers/4.14.0/buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.props" Condition="Exists('$(NuGetPackageRoot)microsoft.codeanalysis.bannedapianalyzers/4.14.0/buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.props')" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<PkgStyleCop_Analyzers_Unstable Condition=" '$(PkgStyleCop_Analyzers_Unstable)' == '' ">/home/wjones/.nuget/packages/stylecop.analyzers.unstable/1.2.0.556</PkgStyleCop_Analyzers_Unstable>
|
||||
<PkgSmartAnalyzers_MultithreadingAnalyzer Condition=" '$(PkgSmartAnalyzers_MultithreadingAnalyzer)' == '' ">/home/wjones/.nuget/packages/smartanalyzers.multithreadinganalyzer/1.1.31</PkgSmartAnalyzers_MultithreadingAnalyzer>
|
||||
<PkgSerilogAnalyzer Condition=" '$(PkgSerilogAnalyzer)' == '' ">/home/wjones/.nuget/packages/seriloganalyzer/0.15.0</PkgSerilogAnalyzer>
|
||||
<PkgMicrosoft_CodeAnalysis_BannedApiAnalyzers Condition=" '$(PkgMicrosoft_CodeAnalysis_BannedApiAnalyzers)' == '' ">/home/wjones/.nuget/packages/microsoft.codeanalysis.bannedapianalyzers/4.14.0</PkgMicrosoft_CodeAnalysis_BannedApiAnalyzers>
|
||||
<PkgIDisposableAnalyzers Condition=" '$(PkgIDisposableAnalyzers)' == '' ">/home/wjones/.nuget/packages/idisposableanalyzers/4.0.8</PkgIDisposableAnalyzers>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.codeanalysis.bannedapianalyzers/4.14.0/buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.codeanalysis.bannedapianalyzers/4.14.0/buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,986 @@
|
||||
{
|
||||
"version": 3,
|
||||
"targets": {
|
||||
"net10.0": {
|
||||
"Diacritics/4.1.4": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net9.0/Diacritics.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Diacritics.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ICU4N/60.1.0-alpha.356": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"J2N": "2.0.0",
|
||||
"Microsoft.Extensions.Caching.Memory": "2.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/ICU4N.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/ICU4N.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ICU4N.Transliterator/60.1.0-alpha.356": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"ICU4N": "60.1.0-alpha.356"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/ICU4N.Transliterator.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/ICU4N.Transliterator.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"IDisposableAnalyzers/4.0.8": {
|
||||
"type": "package"
|
||||
},
|
||||
"J2N/2.0.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net6.0/J2N.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/J2N.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.CodeAnalysis.BannedApiAnalyzers/4.14.0": {
|
||||
"type": "package",
|
||||
"build": {
|
||||
"buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.props": {},
|
||||
"buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/2.0.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "2.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/2.0.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "2.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.0.0",
|
||||
"Microsoft.Extensions.Options": "2.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/2.0.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Options/2.0.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.0.0",
|
||||
"Microsoft.Extensions.Primitives": "2.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Options.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Options.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/2.0.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"SerilogAnalyzer/0.15.0": {
|
||||
"type": "package"
|
||||
},
|
||||
"SmartAnalyzers.MultithreadingAnalyzer/1.1.31": {
|
||||
"type": "package"
|
||||
},
|
||||
"StyleCop.Analyzers/1.2.0-beta.556": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"StyleCop.Analyzers.Unstable": "1.2.0.556"
|
||||
}
|
||||
},
|
||||
"StyleCop.Analyzers.Unstable/1.2.0.556": {
|
||||
"type": "package"
|
||||
},
|
||||
"Jellyfin.CodeAnalysis/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETStandard,Version=v2.0",
|
||||
"compile": {
|
||||
"bin/placeholder/Jellyfin.CodeAnalysis.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"bin/placeholder/Jellyfin.CodeAnalysis.dll": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"Diacritics/4.1.4": {
|
||||
"sha512": "9JK2bI+oWnzOK4Lu+5FXt7czofD28AMnZ95np5fkSClqioPnga1JVpjaUxVJaEpc/5HIlfikc6YI33lm2qu4mw==",
|
||||
"type": "package",
|
||||
"path": "diacritics/4.1.4",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE",
|
||||
"README.md",
|
||||
"diacritics.4.1.4.nupkg.sha512",
|
||||
"diacritics.nuspec",
|
||||
"lib/net48/Diacritics.dll",
|
||||
"lib/net48/Diacritics.xml",
|
||||
"lib/net7.0/Diacritics.dll",
|
||||
"lib/net7.0/Diacritics.xml",
|
||||
"lib/net8.0/Diacritics.dll",
|
||||
"lib/net8.0/Diacritics.xml",
|
||||
"lib/net9.0/Diacritics.dll",
|
||||
"lib/net9.0/Diacritics.xml",
|
||||
"lib/netstandard1.2/Diacritics.dll",
|
||||
"lib/netstandard1.2/Diacritics.xml",
|
||||
"lib/netstandard2.0/Diacritics.dll",
|
||||
"lib/netstandard2.0/Diacritics.xml",
|
||||
"lib/netstandard2.1/Diacritics.dll",
|
||||
"lib/netstandard2.1/Diacritics.xml",
|
||||
"logo.png"
|
||||
]
|
||||
},
|
||||
"ICU4N/60.1.0-alpha.356": {
|
||||
"sha512": "YMZtDnjcqWzziOKiE7w6Ma7Rl5vuFDxzOsUlHh1QyfghbNEIZQOLRs9MMfwCWAjX6n9UitrF6vLXy55Z5q+4Fg==",
|
||||
"type": "package",
|
||||
"path": "icu4n/60.1.0-alpha.356",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.txt",
|
||||
"icu4n.60.1.0-alpha.356.nupkg.sha512",
|
||||
"icu4n.nuspec",
|
||||
"lib/net40/ICU4N.dll",
|
||||
"lib/net40/ICU4N.xml",
|
||||
"lib/net451/ICU4N.dll",
|
||||
"lib/net451/ICU4N.xml",
|
||||
"lib/netstandard2.0/ICU4N.dll",
|
||||
"lib/netstandard2.0/ICU4N.xml",
|
||||
"unicode-icon-128x128.jpg"
|
||||
]
|
||||
},
|
||||
"ICU4N.Transliterator/60.1.0-alpha.356": {
|
||||
"sha512": "lFOSO6bbEtB6HkWMNDJAq+rFwVyi9g6xVc5O/2xHa6iZnV7wLVDqCbaQ4W4vIeBSQZAafqhxciaEkmAvSdzlCg==",
|
||||
"type": "package",
|
||||
"path": "icu4n.transliterator/60.1.0-alpha.356",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.txt",
|
||||
"icu4n.transliterator.60.1.0-alpha.356.nupkg.sha512",
|
||||
"icu4n.transliterator.nuspec",
|
||||
"lib/net40/ICU4N.Transliterator.dll",
|
||||
"lib/net40/ICU4N.Transliterator.xml",
|
||||
"lib/net451/ICU4N.Transliterator.dll",
|
||||
"lib/net451/ICU4N.Transliterator.xml",
|
||||
"lib/netstandard2.0/ICU4N.Transliterator.dll",
|
||||
"lib/netstandard2.0/ICU4N.Transliterator.xml",
|
||||
"unicode-icon-128x128.jpg"
|
||||
]
|
||||
},
|
||||
"IDisposableAnalyzers/4.0.8": {
|
||||
"sha512": "vNi4NMG0CcJyjXxiNDcQ21FwV/whM9o9OEZKD+oP7tuxAqFEzX/x5OhC3OZJqW/w+8GOtCmJPBquYgMWgz0rfQ==",
|
||||
"type": "package",
|
||||
"path": "idisposableanalyzers/4.0.8",
|
||||
"hasTools": true,
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"analyzers/dotnet/cs/IDisposableAnalyzers.dll",
|
||||
"idisposableanalyzers.4.0.8.nupkg.sha512",
|
||||
"idisposableanalyzers.nuspec",
|
||||
"tools/install.ps1",
|
||||
"tools/uninstall.ps1"
|
||||
]
|
||||
},
|
||||
"J2N/2.0.0": {
|
||||
"sha512": "M5bwDajAARZiyqupU+rHQJnsVLxNBOHJ8vKYHd8LcLIb1FgLfzzcJvc31Qo5Xz/GEHFjDF9ScjKL/ks/zRTXuA==",
|
||||
"type": "package",
|
||||
"path": "j2n/2.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.txt",
|
||||
"j2n-icon-100x100.png",
|
||||
"j2n.2.0.0.nupkg.sha512",
|
||||
"j2n.nuspec",
|
||||
"lib/net40/J2N.dll",
|
||||
"lib/net40/J2N.xml",
|
||||
"lib/net45/J2N.dll",
|
||||
"lib/net45/J2N.xml",
|
||||
"lib/net5.0/J2N.dll",
|
||||
"lib/net5.0/J2N.xml",
|
||||
"lib/net6.0/J2N.dll",
|
||||
"lib/net6.0/J2N.xml",
|
||||
"lib/netcoreapp3.0/J2N.dll",
|
||||
"lib/netcoreapp3.0/J2N.xml",
|
||||
"lib/netstandard2.0/J2N.dll",
|
||||
"lib/netstandard2.0/J2N.xml",
|
||||
"lib/netstandard2.1/J2N.dll",
|
||||
"lib/netstandard2.1/J2N.xml",
|
||||
"readme.md"
|
||||
]
|
||||
},
|
||||
"Microsoft.CodeAnalysis.BannedApiAnalyzers/4.14.0": {
|
||||
"sha512": "gSWJlDWwmDhtbrEJGiHqvEjz9KthIiFD0qYB8zZ6a7z+xpMSPEtM9yTYELSa58iFWYlzSRqP9FXO6KoT3+ZMtg==",
|
||||
"type": "package",
|
||||
"path": "microsoft.codeanalysis.bannedapianalyzers/4.14.0",
|
||||
"hasTools": true,
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"ThirdPartyNotices.txt",
|
||||
"analyzers/dotnet/cs/Microsoft.CodeAnalysis.BannedApiAnalyzers.dll",
|
||||
"analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.BannedApiAnalyzers.dll",
|
||||
"analyzers/dotnet/cs/cs/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/de/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/es/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/fr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/it/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/ja/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/ko/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/pl/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/pt-BR/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/ru/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/tr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/zh-Hans/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/zh-Hant/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/Microsoft.CodeAnalysis.BannedApiAnalyzers.dll",
|
||||
"analyzers/dotnet/vb/Microsoft.CodeAnalysis.VisualBasic.BannedApiAnalyzers.dll",
|
||||
"analyzers/dotnet/vb/cs/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/de/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/es/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/fr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/it/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/ja/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/ko/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/pl/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/pt-BR/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/ru/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/tr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/zh-Hans/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"analyzers/dotnet/vb/zh-Hant/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
|
||||
"buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.props",
|
||||
"buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets",
|
||||
"documentation/Microsoft.CodeAnalysis.BannedApiAnalyzers.md",
|
||||
"documentation/Microsoft.CodeAnalysis.BannedApiAnalyzers.sarif",
|
||||
"editorconfig/AllRulesDefault/.editorconfig",
|
||||
"editorconfig/AllRulesDisabled/.editorconfig",
|
||||
"editorconfig/AllRulesEnabled/.editorconfig",
|
||||
"editorconfig/ApiDesignRulesDefault/.editorconfig",
|
||||
"editorconfig/ApiDesignRulesEnabled/.editorconfig",
|
||||
"editorconfig/DataflowRulesDefault/.editorconfig",
|
||||
"editorconfig/DataflowRulesEnabled/.editorconfig",
|
||||
"editorconfig/PortedFromFxCopRulesDefault/.editorconfig",
|
||||
"editorconfig/PortedFromFxCopRulesEnabled/.editorconfig",
|
||||
"microsoft.codeanalysis.bannedapianalyzers.4.14.0.nupkg.sha512",
|
||||
"microsoft.codeanalysis.bannedapianalyzers.nuspec",
|
||||
"rulesets/AllRulesDefault.ruleset",
|
||||
"rulesets/AllRulesDisabled.ruleset",
|
||||
"rulesets/AllRulesEnabled.ruleset",
|
||||
"rulesets/ApiDesignRulesDefault.ruleset",
|
||||
"rulesets/ApiDesignRulesEnabled.ruleset",
|
||||
"rulesets/DataflowRulesDefault.ruleset",
|
||||
"rulesets/DataflowRulesEnabled.ruleset",
|
||||
"rulesets/PortedFromFxCopRulesDefault.ruleset",
|
||||
"rulesets/PortedFromFxCopRulesEnabled.ruleset",
|
||||
"tools/install.ps1",
|
||||
"tools/uninstall.ps1"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/2.0.0": {
|
||||
"sha512": "kGMEV53Od1ES0BDh7OOKbTW9Zu5dbbQ72yI936dvvbHlde3puuq/WRKAccFgcB2PuRjox1HFhA9+t53RYqfuEA==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.caching.abstractions/2.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml",
|
||||
"microsoft.extensions.caching.abstractions.2.0.0.nupkg.sha512",
|
||||
"microsoft.extensions.caching.abstractions.nuspec"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/2.0.0": {
|
||||
"sha512": "NqvVdYLbX7N2J2Wz9y3zjhE66JRdROiZZsGhA2u4a9IcIq/jzINC/cLM96BHA+TSOZFPxVdWneqB6/yt9u846A==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.caching.memory/2.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.xml",
|
||||
"microsoft.extensions.caching.memory.2.0.0.nupkg.sha512",
|
||||
"microsoft.extensions.caching.memory.nuspec"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/2.0.0": {
|
||||
"sha512": "eUdJ0Q/GfVyUJc0Jal5L1QZLceL78pvEM9wEKcHeI24KorqMDoVX+gWsMGLulQMfOwsUaPtkpQM2pFERTzSfSg==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/2.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
||||
"microsoft.extensions.dependencyinjection.abstractions.2.0.0.nupkg.sha512",
|
||||
"microsoft.extensions.dependencyinjection.abstractions.nuspec"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Options/2.0.0": {
|
||||
"sha512": "sAKBgjl2gWsECBLLR9K54T7/uZaP2n9GhMYHay/oOLfvpvX0+iNAlQ2NJgVE352C9Fs5CDV3VbNTK8T2aNKQFA==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.options/2.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Options.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Options.xml",
|
||||
"microsoft.extensions.options.2.0.0.nupkg.sha512",
|
||||
"microsoft.extensions.options.nuspec"
|
||||
]
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/2.0.0": {
|
||||
"sha512": "ukg53qNlqTrK38WA30b5qhw0GD7y3jdI9PHHASjdKyTcBHTevFM2o23tyk3pWCgAV27Bbkm+CPQ2zUe1ZOuYSA==",
|
||||
"type": "package",
|
||||
"path": "microsoft.extensions.primitives/2.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Primitives.dll",
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Primitives.xml",
|
||||
"microsoft.extensions.primitives.2.0.0.nupkg.sha512",
|
||||
"microsoft.extensions.primitives.nuspec"
|
||||
]
|
||||
},
|
||||
"SerilogAnalyzer/0.15.0": {
|
||||
"sha512": "sVpwfls4MfNnwIXLSGCgaUnV+c9kgJ8ia6GsyRcpd4Vs3gLogSDtSYBYrre2K2u/PNMo8GgG09RehwVnze70Tw==",
|
||||
"type": "package",
|
||||
"path": "seriloganalyzer/0.15.0",
|
||||
"hasTools": true,
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"analyzers/dotnet/cs/SerilogAnalyzer.dll",
|
||||
"seriloganalyzer.0.15.0.nupkg.sha512",
|
||||
"seriloganalyzer.nuspec",
|
||||
"tools/install.ps1",
|
||||
"tools/uninstall.ps1"
|
||||
]
|
||||
},
|
||||
"SmartAnalyzers.MultithreadingAnalyzer/1.1.31": {
|
||||
"sha512": "2f2k7bbhDd132ArglCKpzKoWBcp3uzbIFcb4aosnlqIKlfYKDE2HevBVRNVa+LkWFnjXFFWs47Bo96fu8iS//Q==",
|
||||
"type": "package",
|
||||
"path": "smartanalyzers.multithreadinganalyzer/1.1.31",
|
||||
"hasTools": true,
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"analyzers/dotnet/cs/SmartAnalyzers.MultithreadingAnalyzer.dll",
|
||||
"smartanalyzers.multithreadinganalyzer.1.1.31.nupkg.sha512",
|
||||
"smartanalyzers.multithreadinganalyzer.nuspec",
|
||||
"tools/install.ps1",
|
||||
"tools/uninstall.ps1"
|
||||
]
|
||||
},
|
||||
"StyleCop.Analyzers/1.2.0-beta.556": {
|
||||
"sha512": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==",
|
||||
"type": "package",
|
||||
"path": "stylecop.analyzers/1.2.0-beta.556",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE",
|
||||
"THIRD-PARTY-NOTICES.txt",
|
||||
"stylecop.analyzers.1.2.0-beta.556.nupkg.sha512",
|
||||
"stylecop.analyzers.nuspec"
|
||||
]
|
||||
},
|
||||
"StyleCop.Analyzers.Unstable/1.2.0.556": {
|
||||
"sha512": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ==",
|
||||
"type": "package",
|
||||
"path": "stylecop.analyzers.unstable/1.2.0.556",
|
||||
"hasTools": true,
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE",
|
||||
"THIRD-PARTY-NOTICES.txt",
|
||||
"analyzers/dotnet/cs/StyleCop.Analyzers.CodeFixes.dll",
|
||||
"analyzers/dotnet/cs/StyleCop.Analyzers.dll",
|
||||
"analyzers/dotnet/cs/de-DE/StyleCop.Analyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/en-GB/StyleCop.Analyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/es-MX/StyleCop.Analyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/fr-FR/StyleCop.Analyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/pl-PL/StyleCop.Analyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/pt-BR/StyleCop.Analyzers.resources.dll",
|
||||
"analyzers/dotnet/cs/ru-RU/StyleCop.Analyzers.resources.dll",
|
||||
"rulesets/StyleCopAnalyzersDefault.ruleset",
|
||||
"stylecop.analyzers.unstable.1.2.0.556.nupkg.sha512",
|
||||
"stylecop.analyzers.unstable.nuspec",
|
||||
"tools/install.ps1",
|
||||
"tools/uninstall.ps1"
|
||||
]
|
||||
},
|
||||
"Jellyfin.CodeAnalysis/1.0.0": {
|
||||
"type": "project",
|
||||
"path": "../Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj",
|
||||
"msbuildProject": "../Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj"
|
||||
}
|
||||
},
|
||||
"projectFileDependencyGroups": {
|
||||
"net10.0": [
|
||||
"Diacritics >= 4.1.4",
|
||||
"ICU4N.Transliterator >= 60.1.0-alpha.356",
|
||||
"IDisposableAnalyzers >= 4.0.8",
|
||||
"Jellyfin.CodeAnalysis >= 1.0.0",
|
||||
"Microsoft.CodeAnalysis.BannedApiAnalyzers >= 4.14.0",
|
||||
"SerilogAnalyzer >= 0.15.0",
|
||||
"SmartAnalyzers.MultithreadingAnalyzer >= 1.1.31",
|
||||
"StyleCop.Analyzers >= 1.2.0-beta.556"
|
||||
]
|
||||
},
|
||||
"packageFolders": {
|
||||
"/home/wjones/.nuget/packages/": {}
|
||||
},
|
||||
"project": {
|
||||
"version": "10.12.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj",
|
||||
"projectName": "Jellyfin.Extensions",
|
||||
"projectPath": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj",
|
||||
"packagesPath": "/home/wjones/.nuget/packages/",
|
||||
"outputPath": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"centralPackageVersionsManagementEnabled": true,
|
||||
"configFilePaths": [
|
||||
"/srv/common_drive/Projects/pgsql-jellyfin/nuget.config",
|
||||
"/home/wjones/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net10.0"
|
||||
],
|
||||
"sources": {
|
||||
"/usr/lib/dotnet/library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net10.0": {
|
||||
"targetAlias": "net10.0",
|
||||
"projectReferences": {
|
||||
"/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj": {
|
||||
"projectPath": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"allWarningsAsErrors": true,
|
||||
"noWarn": [
|
||||
"NU5104"
|
||||
],
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
],
|
||||
"warnNotAsError": [
|
||||
"NU1902",
|
||||
"NU1903"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "all"
|
||||
},
|
||||
"SdkAnalysisLevel": "10.0.100"
|
||||
},
|
||||
"frameworks": {
|
||||
"net10.0": {
|
||||
"targetAlias": "net10.0",
|
||||
"dependencies": {
|
||||
"Diacritics": {
|
||||
"target": "Package",
|
||||
"version": "[4.1.4, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"ICU4N.Transliterator": {
|
||||
"target": "Package",
|
||||
"version": "[60.1.0-alpha.356, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"IDisposableAnalyzers": {
|
||||
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[4.0.8, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"Microsoft.CodeAnalysis.BannedApiAnalyzers": {
|
||||
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[4.14.0, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"SerilogAnalyzer": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[0.15.0, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"SmartAnalyzers.MultithreadingAnalyzer": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[1.1.31, )",
|
||||
"versionCentrallyManaged": true
|
||||
},
|
||||
"StyleCop.Analyzers": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[1.2.0-beta.556, )",
|
||||
"versionCentrallyManaged": true
|
||||
}
|
||||
},
|
||||
"centralPackageVersions": {
|
||||
"AsyncKeyedLock": "8.0.2",
|
||||
"AutoFixture": "4.18.1",
|
||||
"AutoFixture.AutoMoq": "4.18.1",
|
||||
"AutoFixture.Xunit2": "4.18.1",
|
||||
"BDInfo": "0.8.0",
|
||||
"BitFaster.Caching": "2.5.4",
|
||||
"BlurHashSharp": "1.4.0-pre.1",
|
||||
"BlurHashSharp.SkiaSharp": "1.4.0-pre.1",
|
||||
"CommandLineParser": "2.9.1",
|
||||
"coverlet.collector": "8.0.0",
|
||||
"Diacritics": "4.1.4",
|
||||
"DiscUtils.Udf": "0.16.13",
|
||||
"DotNet.Glob": "3.1.3",
|
||||
"FsCheck.Xunit": "3.3.2",
|
||||
"HarfBuzzSharp.NativeAssets.Linux": "8.3.1.1",
|
||||
"ICU4N.Transliterator": "60.1.0-alpha.356",
|
||||
"IDisposableAnalyzers": "4.0.8",
|
||||
"Ignore": "0.2.1",
|
||||
"Jellyfin.XmlTv": "10.8.0",
|
||||
"libse": "4.0.12",
|
||||
"LrcParser": "2025.623.0",
|
||||
"MetaBrainz.MusicBrainz": "8.0.1",
|
||||
"Microsoft.AspNetCore.Authorization": "10.0.3",
|
||||
"Microsoft.AspNetCore.Mvc.Testing": "10.0.3",
|
||||
"Microsoft.CodeAnalysis.Analyzers": "3.11.0",
|
||||
"Microsoft.CodeAnalysis.BannedApiAnalyzers": "4.14.0",
|
||||
"Microsoft.CodeAnalysis.Common": "5.0.0",
|
||||
"Microsoft.CodeAnalysis.CSharp": "5.0.0",
|
||||
"Microsoft.Data.Sqlite": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Design": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Sqlite": "10.0.3",
|
||||
"Microsoft.EntityFrameworkCore.Tools": "10.0.3",
|
||||
"Microsoft.Extensions.Caching.Abstractions": "10.0.3",
|
||||
"Microsoft.Extensions.Caching.Memory": "10.0.3",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "10.0.3",
|
||||
"Microsoft.Extensions.Configuration.Binder": "10.0.3",
|
||||
"Microsoft.Extensions.DependencyInjection": "10.0.3",
|
||||
"Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore": "10.0.3",
|
||||
"Microsoft.Extensions.Hosting.Abstractions": "10.0.3",
|
||||
"Microsoft.Extensions.Http": "10.0.3",
|
||||
"Microsoft.Extensions.Logging": "10.0.3",
|
||||
"Microsoft.Extensions.Options": "10.0.3",
|
||||
"Microsoft.NET.Test.Sdk": "18.0.1",
|
||||
"MimeTypes": "2.5.2",
|
||||
"Moq": "4.18.4",
|
||||
"Morestachio": "5.0.1.631",
|
||||
"NEbml": "1.1.0.5",
|
||||
"Newtonsoft.Json": "13.0.4",
|
||||
"PlaylistsNET": "1.4.1",
|
||||
"Polly": "8.6.5",
|
||||
"prometheus-net": "8.2.1",
|
||||
"prometheus-net.AspNetCore": "8.2.1",
|
||||
"prometheus-net.DotNetRuntime": "4.4.1",
|
||||
"Serilog.AspNetCore": "10.0.0",
|
||||
"Serilog.Enrichers.Thread": "4.0.0",
|
||||
"Serilog.Expressions": "5.0.0",
|
||||
"Serilog.Settings.Configuration": "10.0.0",
|
||||
"Serilog.Sinks.Async": "2.1.0",
|
||||
"Serilog.Sinks.Console": "6.1.1",
|
||||
"Serilog.Sinks.File": "7.0.0",
|
||||
"Serilog.Sinks.Graylog": "3.1.1",
|
||||
"SerilogAnalyzer": "0.15.0",
|
||||
"SharpFuzz": "2.2.0",
|
||||
"SkiaSharp": "[3.116.1]",
|
||||
"SkiaSharp.HarfBuzz": "[3.116.1]",
|
||||
"SkiaSharp.NativeAssets.Linux": "[3.116.1]",
|
||||
"SmartAnalyzers.MultithreadingAnalyzer": "1.1.31",
|
||||
"StyleCop.Analyzers": "1.2.0-beta.556",
|
||||
"Svg.Skia": "3.4.1",
|
||||
"Swashbuckle.AspNetCore": "7.3.2",
|
||||
"Swashbuckle.AspNetCore.ReDoc": "6.9.0",
|
||||
"System.Text.Json": "10.0.3",
|
||||
"TagLibSharp": "2.3.0",
|
||||
"TMDbLib": "2.3.0",
|
||||
"UTF.Unknown": "2.6.0",
|
||||
"xunit": "2.9.3",
|
||||
"Xunit.Priority": "1.1.6",
|
||||
"xunit.runner.visualstudio": "2.8.2",
|
||||
"Xunit.SkippableFact": "1.5.61",
|
||||
"z440.atl.core": "7.11.0"
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"frameworkReferences": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/10.0.103/PortableRuntimeIdentifierGraph.json",
|
||||
"packagesToPrune": {
|
||||
"Microsoft.CSharp": "(,4.7.32767]",
|
||||
"Microsoft.VisualBasic": "(,10.4.32767]",
|
||||
"Microsoft.Win32.Primitives": "(,4.3.32767]",
|
||||
"Microsoft.Win32.Registry": "(,5.0.32767]",
|
||||
"runtime.any.System.Collections": "(,4.3.32767]",
|
||||
"runtime.any.System.Diagnostics.Tools": "(,4.3.32767]",
|
||||
"runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]",
|
||||
"runtime.any.System.Globalization": "(,4.3.32767]",
|
||||
"runtime.any.System.Globalization.Calendars": "(,4.3.32767]",
|
||||
"runtime.any.System.IO": "(,4.3.32767]",
|
||||
"runtime.any.System.Reflection": "(,4.3.32767]",
|
||||
"runtime.any.System.Reflection.Extensions": "(,4.3.32767]",
|
||||
"runtime.any.System.Reflection.Primitives": "(,4.3.32767]",
|
||||
"runtime.any.System.Resources.ResourceManager": "(,4.3.32767]",
|
||||
"runtime.any.System.Runtime": "(,4.3.32767]",
|
||||
"runtime.any.System.Runtime.Handles": "(,4.3.32767]",
|
||||
"runtime.any.System.Runtime.InteropServices": "(,4.3.32767]",
|
||||
"runtime.any.System.Text.Encoding": "(,4.3.32767]",
|
||||
"runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]",
|
||||
"runtime.any.System.Threading.Tasks": "(,4.3.32767]",
|
||||
"runtime.any.System.Threading.Timer": "(,4.3.32767]",
|
||||
"runtime.aot.System.Collections": "(,4.3.32767]",
|
||||
"runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]",
|
||||
"runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]",
|
||||
"runtime.aot.System.Globalization": "(,4.3.32767]",
|
||||
"runtime.aot.System.Globalization.Calendars": "(,4.3.32767]",
|
||||
"runtime.aot.System.IO": "(,4.3.32767]",
|
||||
"runtime.aot.System.Reflection": "(,4.3.32767]",
|
||||
"runtime.aot.System.Reflection.Extensions": "(,4.3.32767]",
|
||||
"runtime.aot.System.Reflection.Primitives": "(,4.3.32767]",
|
||||
"runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]",
|
||||
"runtime.aot.System.Runtime": "(,4.3.32767]",
|
||||
"runtime.aot.System.Runtime.Handles": "(,4.3.32767]",
|
||||
"runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]",
|
||||
"runtime.aot.System.Text.Encoding": "(,4.3.32767]",
|
||||
"runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]",
|
||||
"runtime.aot.System.Threading.Tasks": "(,4.3.32767]",
|
||||
"runtime.aot.System.Threading.Timer": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]",
|
||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
|
||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
|
||||
"runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]",
|
||||
"runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
|
||||
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
|
||||
"runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]",
|
||||
"runtime.unix.System.Console": "(,4.3.32767]",
|
||||
"runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]",
|
||||
"runtime.unix.System.IO.FileSystem": "(,4.3.32767]",
|
||||
"runtime.unix.System.Net.Primitives": "(,4.3.32767]",
|
||||
"runtime.unix.System.Net.Sockets": "(,4.3.32767]",
|
||||
"runtime.unix.System.Private.Uri": "(,4.3.32767]",
|
||||
"runtime.unix.System.Runtime.Extensions": "(,4.3.32767]",
|
||||
"runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]",
|
||||
"runtime.win.System.Console": "(,4.3.32767]",
|
||||
"runtime.win.System.Diagnostics.Debug": "(,4.3.32767]",
|
||||
"runtime.win.System.IO.FileSystem": "(,4.3.32767]",
|
||||
"runtime.win.System.Net.Primitives": "(,4.3.32767]",
|
||||
"runtime.win.System.Net.Sockets": "(,4.3.32767]",
|
||||
"runtime.win.System.Runtime.Extensions": "(,4.3.32767]",
|
||||
"runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
|
||||
"runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
|
||||
"runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
|
||||
"runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"runtime.win7.System.Private.Uri": "(,4.3.32767]",
|
||||
"runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]",
|
||||
"System.AppContext": "(,4.3.32767]",
|
||||
"System.Buffers": "(,5.0.32767]",
|
||||
"System.Collections": "(,4.3.32767]",
|
||||
"System.Collections.Concurrent": "(,4.3.32767]",
|
||||
"System.Collections.Immutable": "(,10.0.32767]",
|
||||
"System.Collections.NonGeneric": "(,4.3.32767]",
|
||||
"System.Collections.Specialized": "(,4.3.32767]",
|
||||
"System.ComponentModel": "(,4.3.32767]",
|
||||
"System.ComponentModel.Annotations": "(,4.3.32767]",
|
||||
"System.ComponentModel.EventBasedAsync": "(,4.3.32767]",
|
||||
"System.ComponentModel.Primitives": "(,4.3.32767]",
|
||||
"System.ComponentModel.TypeConverter": "(,4.3.32767]",
|
||||
"System.Console": "(,4.3.32767]",
|
||||
"System.Data.Common": "(,4.3.32767]",
|
||||
"System.Data.DataSetExtensions": "(,4.4.32767]",
|
||||
"System.Diagnostics.Contracts": "(,4.3.32767]",
|
||||
"System.Diagnostics.Debug": "(,4.3.32767]",
|
||||
"System.Diagnostics.DiagnosticSource": "(,10.0.32767]",
|
||||
"System.Diagnostics.FileVersionInfo": "(,4.3.32767]",
|
||||
"System.Diagnostics.Process": "(,4.3.32767]",
|
||||
"System.Diagnostics.StackTrace": "(,4.3.32767]",
|
||||
"System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]",
|
||||
"System.Diagnostics.Tools": "(,4.3.32767]",
|
||||
"System.Diagnostics.TraceSource": "(,4.3.32767]",
|
||||
"System.Diagnostics.Tracing": "(,4.3.32767]",
|
||||
"System.Drawing.Primitives": "(,4.3.32767]",
|
||||
"System.Dynamic.Runtime": "(,4.3.32767]",
|
||||
"System.Formats.Asn1": "(,10.0.32767]",
|
||||
"System.Formats.Tar": "(,10.0.32767]",
|
||||
"System.Globalization": "(,4.3.32767]",
|
||||
"System.Globalization.Calendars": "(,4.3.32767]",
|
||||
"System.Globalization.Extensions": "(,4.3.32767]",
|
||||
"System.IO": "(,4.3.32767]",
|
||||
"System.IO.Compression": "(,4.3.32767]",
|
||||
"System.IO.Compression.ZipFile": "(,4.3.32767]",
|
||||
"System.IO.FileSystem": "(,4.3.32767]",
|
||||
"System.IO.FileSystem.AccessControl": "(,4.4.32767]",
|
||||
"System.IO.FileSystem.DriveInfo": "(,4.3.32767]",
|
||||
"System.IO.FileSystem.Primitives": "(,4.3.32767]",
|
||||
"System.IO.FileSystem.Watcher": "(,4.3.32767]",
|
||||
"System.IO.IsolatedStorage": "(,4.3.32767]",
|
||||
"System.IO.MemoryMappedFiles": "(,4.3.32767]",
|
||||
"System.IO.Pipelines": "(,10.0.32767]",
|
||||
"System.IO.Pipes": "(,4.3.32767]",
|
||||
"System.IO.Pipes.AccessControl": "(,5.0.32767]",
|
||||
"System.IO.UnmanagedMemoryStream": "(,4.3.32767]",
|
||||
"System.Linq": "(,4.3.32767]",
|
||||
"System.Linq.AsyncEnumerable": "(,10.0.32767]",
|
||||
"System.Linq.Expressions": "(,4.3.32767]",
|
||||
"System.Linq.Parallel": "(,4.3.32767]",
|
||||
"System.Linq.Queryable": "(,4.3.32767]",
|
||||
"System.Memory": "(,5.0.32767]",
|
||||
"System.Net.Http": "(,4.3.32767]",
|
||||
"System.Net.Http.Json": "(,10.0.32767]",
|
||||
"System.Net.NameResolution": "(,4.3.32767]",
|
||||
"System.Net.NetworkInformation": "(,4.3.32767]",
|
||||
"System.Net.Ping": "(,4.3.32767]",
|
||||
"System.Net.Primitives": "(,4.3.32767]",
|
||||
"System.Net.Requests": "(,4.3.32767]",
|
||||
"System.Net.Security": "(,4.3.32767]",
|
||||
"System.Net.ServerSentEvents": "(,10.0.32767]",
|
||||
"System.Net.Sockets": "(,4.3.32767]",
|
||||
"System.Net.WebHeaderCollection": "(,4.3.32767]",
|
||||
"System.Net.WebSockets": "(,4.3.32767]",
|
||||
"System.Net.WebSockets.Client": "(,4.3.32767]",
|
||||
"System.Numerics.Vectors": "(,5.0.32767]",
|
||||
"System.ObjectModel": "(,4.3.32767]",
|
||||
"System.Private.DataContractSerialization": "(,4.3.32767]",
|
||||
"System.Private.Uri": "(,4.3.32767]",
|
||||
"System.Reflection": "(,4.3.32767]",
|
||||
"System.Reflection.DispatchProxy": "(,6.0.32767]",
|
||||
"System.Reflection.Emit": "(,4.7.32767]",
|
||||
"System.Reflection.Emit.ILGeneration": "(,4.7.32767]",
|
||||
"System.Reflection.Emit.Lightweight": "(,4.7.32767]",
|
||||
"System.Reflection.Extensions": "(,4.3.32767]",
|
||||
"System.Reflection.Metadata": "(,10.0.32767]",
|
||||
"System.Reflection.Primitives": "(,4.3.32767]",
|
||||
"System.Reflection.TypeExtensions": "(,4.3.32767]",
|
||||
"System.Resources.Reader": "(,4.3.32767]",
|
||||
"System.Resources.ResourceManager": "(,4.3.32767]",
|
||||
"System.Resources.Writer": "(,4.3.32767]",
|
||||
"System.Runtime": "(,4.3.32767]",
|
||||
"System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]",
|
||||
"System.Runtime.CompilerServices.VisualC": "(,4.3.32767]",
|
||||
"System.Runtime.Extensions": "(,4.3.32767]",
|
||||
"System.Runtime.Handles": "(,4.3.32767]",
|
||||
"System.Runtime.InteropServices": "(,4.3.32767]",
|
||||
"System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]",
|
||||
"System.Runtime.Loader": "(,4.3.32767]",
|
||||
"System.Runtime.Numerics": "(,4.3.32767]",
|
||||
"System.Runtime.Serialization.Formatters": "(,4.3.32767]",
|
||||
"System.Runtime.Serialization.Json": "(,4.3.32767]",
|
||||
"System.Runtime.Serialization.Primitives": "(,4.3.32767]",
|
||||
"System.Runtime.Serialization.Xml": "(,4.3.32767]",
|
||||
"System.Security.AccessControl": "(,6.0.32767]",
|
||||
"System.Security.Claims": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.Algorithms": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.Cng": "(,5.0.32767]",
|
||||
"System.Security.Cryptography.Csp": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.Encoding": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.OpenSsl": "(,5.0.32767]",
|
||||
"System.Security.Cryptography.Primitives": "(,4.3.32767]",
|
||||
"System.Security.Cryptography.X509Certificates": "(,4.3.32767]",
|
||||
"System.Security.Principal": "(,4.3.32767]",
|
||||
"System.Security.Principal.Windows": "(,5.0.32767]",
|
||||
"System.Security.SecureString": "(,4.3.32767]",
|
||||
"System.Text.Encoding": "(,4.3.32767]",
|
||||
"System.Text.Encoding.CodePages": "(,10.0.32767]",
|
||||
"System.Text.Encoding.Extensions": "(,4.3.32767]",
|
||||
"System.Text.Encodings.Web": "(,10.0.32767]",
|
||||
"System.Text.Json": "(,10.0.32767]",
|
||||
"System.Text.RegularExpressions": "(,4.3.32767]",
|
||||
"System.Threading": "(,4.3.32767]",
|
||||
"System.Threading.AccessControl": "(,10.0.32767]",
|
||||
"System.Threading.Channels": "(,10.0.32767]",
|
||||
"System.Threading.Overlapped": "(,4.3.32767]",
|
||||
"System.Threading.Tasks": "(,4.3.32767]",
|
||||
"System.Threading.Tasks.Dataflow": "(,10.0.32767]",
|
||||
"System.Threading.Tasks.Extensions": "(,5.0.32767]",
|
||||
"System.Threading.Tasks.Parallel": "(,4.3.32767]",
|
||||
"System.Threading.Thread": "(,4.3.32767]",
|
||||
"System.Threading.ThreadPool": "(,4.3.32767]",
|
||||
"System.Threading.Timer": "(,4.3.32767]",
|
||||
"System.ValueTuple": "(,4.5.32767]",
|
||||
"System.Xml.ReaderWriter": "(,4.3.32767]",
|
||||
"System.Xml.XDocument": "(,4.3.32767]",
|
||||
"System.Xml.XmlDocument": "(,4.3.32767]",
|
||||
"System.Xml.XmlSerializer": "(,4.3.32767]",
|
||||
"System.Xml.XPath": "(,4.3.32767]",
|
||||
"System.Xml.XPath.XDocument": "(,5.0.32767]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "ayxAauhDil8=",
|
||||
"success": true,
|
||||
"projectFilePath": "/srv/common_drive/Projects/pgsql-jellyfin/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj",
|
||||
"expectedPackageFiles": [
|
||||
"/home/wjones/.nuget/packages/diacritics/4.1.4/diacritics.4.1.4.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/icu4n/60.1.0-alpha.356/icu4n.60.1.0-alpha.356.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/icu4n.transliterator/60.1.0-alpha.356/icu4n.transliterator.60.1.0-alpha.356.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/idisposableanalyzers/4.0.8/idisposableanalyzers.4.0.8.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/j2n/2.0.0/j2n.2.0.0.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/microsoft.codeanalysis.bannedapianalyzers/4.14.0/microsoft.codeanalysis.bannedapianalyzers.4.14.0.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/microsoft.extensions.caching.abstractions/2.0.0/microsoft.extensions.caching.abstractions.2.0.0.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/microsoft.extensions.caching.memory/2.0.0/microsoft.extensions.caching.memory.2.0.0.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/2.0.0/microsoft.extensions.dependencyinjection.abstractions.2.0.0.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/microsoft.extensions.options/2.0.0/microsoft.extensions.options.2.0.0.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/microsoft.extensions.primitives/2.0.0/microsoft.extensions.primitives.2.0.0.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/seriloganalyzer/0.15.0/seriloganalyzer.0.15.0.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/smartanalyzers.multithreadinganalyzer/1.1.31/smartanalyzers.multithreadinganalyzer.1.1.31.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/stylecop.analyzers/1.2.0-beta.556/stylecop.analyzers.1.2.0-beta.556.nupkg.sha512",
|
||||
"/home/wjones/.nuget/packages/stylecop.analyzers.unstable/1.2.0.556/stylecop.analyzers.unstable.1.2.0.556.nupkg.sha512"
|
||||
],
|
||||
"logs": []
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
17714532042500000
|
||||
@@ -0,0 +1 @@
|
||||
17715044201300000
|
||||
Reference in New Issue
Block a user