aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2021-06-19 18:02:33 +0200
committerBond_009 <bond.009@outlook.com>2021-06-19 18:04:46 +0200
commit6f8ccab788e85e025eaa44b67a1487bf419afb53 (patch)
treef8895fae8ec17e922daab473180c9de9a702a02a /MediaBrowser.Common
parent0c3dcdf77b0d124517bffa608bfddf7d8f7682db (diff)
Move non-jellyfin extensions to separate project
Diffstat (limited to 'MediaBrowser.Common')
-rw-r--r--MediaBrowser.Common/Extensions/CopyToExtensions.cs26
-rw-r--r--MediaBrowser.Common/Extensions/EnumerableExtensions.cs51
-rw-r--r--MediaBrowser.Common/Extensions/ShuffleExtensions.cs41
-rw-r--r--MediaBrowser.Common/Extensions/SplitStringExtensions.cs95
-rw-r--r--MediaBrowser.Common/Extensions/StreamExtensions.cs63
-rw-r--r--MediaBrowser.Common/Extensions/StringBuilderExtensions.cs35
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonBoolNumberConverter.cs30
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverter.cs24
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverterFactory.cs28
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonDateTimeConverter.cs34
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonDelimitedArrayConverter.cs81
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonGuidConverter.cs26
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonNullableGuidConverter.cs33
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonNullableStructConverter.cs45
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonNullableStructConverterFactory.cs27
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableInt32Converter.cs44
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStringConverter.cs41
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs24
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverterFactory.cs28
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonStringConverter.cs39
-rw-r--r--MediaBrowser.Common/Json/Converters/JsonVersionConverter.cs23
-rw-r--r--MediaBrowser.Common/Json/JsonDefaults.cs90
22 files changed, 0 insertions, 928 deletions
diff --git a/MediaBrowser.Common/Extensions/CopyToExtensions.cs b/MediaBrowser.Common/Extensions/CopyToExtensions.cs
deleted file mode 100644
index 2ecbc6539..000000000
--- a/MediaBrowser.Common/Extensions/CopyToExtensions.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Collections.Generic;
-
-namespace MediaBrowser.Common.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];
- }
- }
- }
-}
diff --git a/MediaBrowser.Common/Extensions/EnumerableExtensions.cs b/MediaBrowser.Common/Extensions/EnumerableExtensions.cs
deleted file mode 100644
index 2b8a6c395..000000000
--- a/MediaBrowser.Common/Extensions/EnumerableExtensions.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace MediaBrowser.Common.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)
- {
- if (source == null)
- {
- throw new ArgumentNullException(nameof(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;
- }
- }
-}
diff --git a/MediaBrowser.Common/Extensions/ShuffleExtensions.cs b/MediaBrowser.Common/Extensions/ShuffleExtensions.cs
deleted file mode 100644
index 2604abf85..000000000
--- a/MediaBrowser.Common/Extensions/ShuffleExtensions.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace MediaBrowser.Common.Extensions
-{
- /// <summary>
- /// Provides <c>Shuffle</c> extensions methods for <see cref="IList{T}" />.
- /// </summary>
- public static class ShuffleExtensions
- {
- private static readonly Random _rng = new Random();
-
- /// <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(_rng);
- }
-
- /// <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;
- }
- }
- }
-}
diff --git a/MediaBrowser.Common/Extensions/SplitStringExtensions.cs b/MediaBrowser.Common/Extensions/SplitStringExtensions.cs
deleted file mode 100644
index 9c9108495..000000000
--- a/MediaBrowser.Common/Extensions/SplitStringExtensions.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
-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.
- */
-
-#pragma warning disable CS1591
-#pragma warning disable CA1034
-using System;
-using System.Diagnostics.Contracts;
-using System.Runtime.InteropServices;
-
-namespace MediaBrowser.Common.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 SplitEnumerator 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 SplitEnumerator Split(this ReadOnlySpan<char> str, char separator) => new (str, separator);
-
- [StructLayout(LayoutKind.Auto)]
- public ref struct SplitEnumerator
- {
- private readonly char _separator;
- private ReadOnlySpan<char> _str;
-
- public SplitEnumerator(ReadOnlySpan<char> str, char separator)
- {
- _str = str;
- _separator = separator;
- Current = default;
- }
-
- public ReadOnlySpan<char> Current { get; private set; }
-
- public readonly SplitEnumerator GetEnumerator() => this;
-
- 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;
- }
- }
- }
-}
diff --git a/MediaBrowser.Common/Extensions/StreamExtensions.cs b/MediaBrowser.Common/Extensions/StreamExtensions.cs
deleted file mode 100644
index 5cbf57d98..000000000
--- a/MediaBrowser.Common/Extensions/StreamExtensions.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-namespace MediaBrowser.Common.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()) != 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>
- /// <returns>All lines in the stream.</returns>
- public static async IAsyncEnumerable<string> ReadAllLinesAsync(this TextReader reader)
- {
- string? line;
- while ((line = await reader.ReadLineAsync().ConfigureAwait(false)) != null)
- {
- yield return line;
- }
- }
- }
-}
diff --git a/MediaBrowser.Common/Extensions/StringBuilderExtensions.cs b/MediaBrowser.Common/Extensions/StringBuilderExtensions.cs
deleted file mode 100644
index 75d654f23..000000000
--- a/MediaBrowser.Common/Extensions/StringBuilderExtensions.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Collections.Generic;
-using System.Text;
-
-namespace MediaBrowser.Common.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;
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonBoolNumberConverter.cs b/MediaBrowser.Common/Json/Converters/JsonBoolNumberConverter.cs
deleted file mode 100644
index b29e6a71a..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonBoolNumberConverter.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.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);
- }
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverter.cs b/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverter.cs
deleted file mode 100644
index 127a41a06..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverter.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.Json.Converters
-{
- /// <summary>
- /// Convert comma delimited string to array of type.
- /// </summary>
- /// <typeparam name="T">Type to convert to.</typeparam>
- public sealed class JsonCommaDelimitedArrayConverter<T> : JsonDelimitedArrayConverter<T>
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="JsonCommaDelimitedArrayConverter{T}"/> class.
- /// </summary>
- public JsonCommaDelimitedArrayConverter() : base()
- {
- }
-
- /// <inheritdoc />
- protected override char Delimiter => ',';
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverterFactory.cs b/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverterFactory.cs
deleted file mode 100644
index de41348dd..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverterFactory.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.Json.Converters
-{
- /// <summary>
- /// Json comma delimited array converter factory.
- /// </summary>
- /// <remarks>
- /// This must be applied as an attribute, adding to the JsonConverter list causes stack overflow.
- /// </remarks>
- public class JsonCommaDelimitedArrayConverterFactory : JsonConverterFactory
- {
- /// <inheritdoc />
- public override bool CanConvert(Type typeToConvert)
- {
- return true;
- }
-
- /// <inheritdoc />
- public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
- {
- var structType = typeToConvert.GetElementType() ?? typeToConvert.GenericTypeArguments[0];
- return (JsonConverter?)Activator.CreateInstance(typeof(JsonCommaDelimitedArrayConverter<>).MakeGenericType(structType));
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonDateTimeConverter.cs b/MediaBrowser.Common/Json/Converters/JsonDateTimeConverter.cs
deleted file mode 100644
index 73e3a0493..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonDateTimeConverter.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.Globalization;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.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);
- }
- }
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Common/Json/Converters/JsonDelimitedArrayConverter.cs b/MediaBrowser.Common/Json/Converters/JsonDelimitedArrayConverter.cs
deleted file mode 100644
index b691798c9..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonDelimitedArrayConverter.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.Json.Converters
-{
- /// <summary>
- /// Convert delimited string to array of type.
- /// </summary>
- /// <typeparam name="T">Type to convert to.</typeparam>
- public abstract class JsonDelimitedArrayConverter<T> : JsonConverter<T[]?>
- {
- private readonly TypeConverter _typeConverter;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="JsonDelimitedArrayConverter{T}"/> class.
- /// </summary>
- protected JsonDelimitedArrayConverter()
- {
- _typeConverter = TypeDescriptor.GetConverter(typeof(T));
- }
-
- /// <summary>
- /// Gets the array delimiter.
- /// </summary>
- protected virtual char Delimiter { get; }
-
- /// <inheritdoc />
- public override T[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- if (reader.TokenType == JsonTokenType.String)
- {
- // GetString can't return null here because we already handled it above
- var stringEntries = reader.GetString()?.Split(Delimiter, StringSplitOptions.RemoveEmptyEntries);
- if (stringEntries == null || stringEntries.Length == 0)
- {
- return Array.Empty<T>();
- }
-
- var parsedValues = new object[stringEntries.Length];
- var convertedCount = 0;
- for (var i = 0; i < stringEntries.Length; i++)
- {
- try
- {
- parsedValues[i] = _typeConverter.ConvertFrom(stringEntries[i].Trim());
- convertedCount++;
- }
- catch (FormatException)
- {
- // TODO log when upgraded to .Net6
- // https://github.com/dotnet/runtime/issues/42975
- // _logger.LogDebug(e, "Error converting value.");
- }
- }
-
- var typedValues = new T[convertedCount];
- var typedValueIndex = 0;
- for (var i = 0; i < stringEntries.Length; i++)
- {
- if (parsedValues[i] != null)
- {
- typedValues.SetValue(parsedValues[i], typedValueIndex);
- typedValueIndex++;
- }
- }
-
- return typedValues;
- }
-
- return JsonSerializer.Deserialize<T[]>(ref reader, options);
- }
-
- /// <inheritdoc />
- public override void Write(Utf8JsonWriter writer, T[]? value, JsonSerializerOptions options)
- {
- throw new NotImplementedException();
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonGuidConverter.cs b/MediaBrowser.Common/Json/Converters/JsonGuidConverter.cs
deleted file mode 100644
index bd9600110..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonGuidConverter.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System;
-using System.Globalization;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.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)
- {
- var guidStr = reader.GetString();
- return guidStr == null ? Guid.Empty : new Guid(guidStr);
- }
-
- /// <inheritdoc />
- public override void Write(Utf8JsonWriter writer, Guid value, JsonSerializerOptions options)
- {
- writer.WriteStringValue(value.ToString("N", CultureInfo.InvariantCulture));
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonNullableGuidConverter.cs b/MediaBrowser.Common/Json/Converters/JsonNullableGuidConverter.cs
deleted file mode 100644
index 6d96d5496..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonNullableGuidConverter.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.Globalization;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.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)
- {
- var guidStr = reader.GetString();
- return guidStr == null ? null : new Guid(guidStr);
- }
-
- /// <inheritdoc />
- public override void Write(Utf8JsonWriter writer, Guid? value, JsonSerializerOptions options)
- {
- if (value == null || value == Guid.Empty)
- {
- writer.WriteNullValue();
- }
- else
- {
- writer.WriteStringValue(value.Value.ToString("N", CultureInfo.InvariantCulture));
- }
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonNullableStructConverter.cs b/MediaBrowser.Common/Json/Converters/JsonNullableStructConverter.cs
deleted file mode 100644
index 0501f7b2a..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonNullableStructConverter.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.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.TokenType == JsonTokenType.Null)
- {
- return null;
- }
-
- // Token is empty string.
- if (reader.TokenType == JsonTokenType.String && ((reader.HasValueSequence && reader.ValueSequence.IsEmpty) || reader.ValueSpan.IsEmpty))
- {
- return null;
- }
-
- return JsonSerializer.Deserialize<TStruct>(ref reader, options);
- }
-
- /// <inheritdoc />
- public override void Write(Utf8JsonWriter writer, TStruct? value, JsonSerializerOptions options)
- {
- if (value.HasValue)
- {
- JsonSerializer.Serialize(writer, value.Value, options);
- }
- else
- {
- writer.WriteNullValue();
- }
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonNullableStructConverterFactory.cs b/MediaBrowser.Common/Json/Converters/JsonNullableStructConverterFactory.cs
deleted file mode 100644
index e2a3d798a..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonNullableStructConverterFactory.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.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));
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableInt32Converter.cs b/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableInt32Converter.cs
deleted file mode 100644
index 3d97a9de5..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableInt32Converter.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.Json.Converters
-{
- /// <summary>
- /// Converts a string <c>N/A</c> to <c>string.Empty</c>.
- /// </summary>
- public class JsonOmdbNotAvailableInt32Converter : JsonConverter<int?>
- {
- /// <inheritdoc />
- public override int? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- if (reader.TokenType == JsonTokenType.String)
- {
- var str = reader.GetString();
- if (str != null && str.Equals("N/A", StringComparison.OrdinalIgnoreCase))
- {
- return null;
- }
-
- var converter = TypeDescriptor.GetConverter(typeToConvert);
- return (int?)converter.ConvertFromString(str);
- }
-
- return JsonSerializer.Deserialize<int>(ref reader, options);
- }
-
- /// <inheritdoc />
- public override void Write(Utf8JsonWriter writer, int? value, JsonSerializerOptions options)
- {
- if (value.HasValue)
- {
- writer.WriteNumberValue(value.Value);
- }
- else
- {
- writer.WriteNullValue();
- }
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStringConverter.cs b/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStringConverter.cs
deleted file mode 100644
index 77cf46b70..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStringConverter.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.Json.Converters
-{
- /// <summary>
- /// Converts a string <c>N/A</c> to <c>string.Empty</c>.
- /// </summary>
- public class JsonOmdbNotAvailableStringConverter : JsonConverter<string?>
- {
- /// <inheritdoc />
- public override string? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- if (reader.TokenType == JsonTokenType.Null)
- {
- return null;
- }
-
- if (reader.TokenType == JsonTokenType.String)
- {
- // GetString can't return null here because we already handled it above
- var str = reader.GetString()!;
- if (str.Equals("N/A", StringComparison.OrdinalIgnoreCase))
- {
- return null;
- }
-
- return str;
- }
-
- return JsonSerializer.Deserialize<string?>(ref reader, options);
- }
-
- /// <inheritdoc />
- public override void Write(Utf8JsonWriter writer, string? value, JsonSerializerOptions options)
- {
- writer.WriteStringValue(value);
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs b/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs
deleted file mode 100644
index a8f6cfbec..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.Json.Converters
-{
- /// <summary>
- /// Convert Pipe delimited string to array of type.
- /// </summary>
- /// <typeparam name="T">Type to convert to.</typeparam>
- public sealed class JsonPipeDelimitedArrayConverter<T> : JsonDelimitedArrayConverter<T>
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="JsonPipeDelimitedArrayConverter{T}"/> class.
- /// </summary>
- public JsonPipeDelimitedArrayConverter() : base()
- {
- }
-
- /// <inheritdoc />
- protected override char Delimiter => '|';
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverterFactory.cs b/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverterFactory.cs
deleted file mode 100644
index 1bebc49ec..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverterFactory.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.Json.Converters
-{
- /// <summary>
- /// Json Pipe delimited array converter factory.
- /// </summary>
- /// <remarks>
- /// This must be applied as an attribute, adding to the JsonConverter list causes stack overflow.
- /// </remarks>
- public class JsonPipeDelimitedArrayConverterFactory : JsonConverterFactory
- {
- /// <inheritdoc />
- public override bool CanConvert(Type typeToConvert)
- {
- return true;
- }
-
- /// <inheritdoc />
- public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
- {
- var structType = typeToConvert.GetElementType() ?? typeToConvert.GenericTypeArguments[0];
- return (JsonConverter?)Activator.CreateInstance(typeof(JsonPipeDelimitedArrayConverter<>).MakeGenericType(structType));
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonStringConverter.cs b/MediaBrowser.Common/Json/Converters/JsonStringConverter.cs
deleted file mode 100644
index 6cd980e48..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonStringConverter.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-using System.Buffers;
-using System.Text;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.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)
- {
- return reader.TokenType switch
- {
- JsonTokenType.Null => null,
- 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);
- }
- }
-}
diff --git a/MediaBrowser.Common/Json/Converters/JsonVersionConverter.cs b/MediaBrowser.Common/Json/Converters/JsonVersionConverter.cs
deleted file mode 100644
index 81c093c54..000000000
--- a/MediaBrowser.Common/Json/Converters/JsonVersionConverter.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MediaBrowser.Common.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());
- }
-}
diff --git a/MediaBrowser.Common/Json/JsonDefaults.cs b/MediaBrowser.Common/Json/JsonDefaults.cs
deleted file mode 100644
index 405d6125f..000000000
--- a/MediaBrowser.Common/Json/JsonDefaults.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using System.Text.Json;
-using System.Text.Json.Serialization;
-using MediaBrowser.Common.Json.Converters;
-
-namespace MediaBrowser.Common.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 JsonStringEnumConverter(),
- new JsonNullableStructConverterFactory(),
- new JsonBoolNumberConverter(),
- new JsonDateTimeConverter(),
- new JsonStringConverter()
- }
- };
-
- 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;
- }
-}