aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Jellyfin.Api/Controllers/UniversalAudioController.cs4
-rw-r--r--MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs3
-rw-r--r--MediaBrowser.Model/Dlna/StreamBuilder.cs12
-rw-r--r--MediaBrowser.Model/Dlna/StreamInfo.cs2
-rw-r--r--MediaBrowser.Model/Session/TranscodeReasonExtensions.cs34
-rw-r--r--MediaBrowser.Model/Session/TranscodingInfo.cs5
-rw-r--r--src/Jellyfin.Extensions/Json/Converters/JsonFlagEnumConverter.cs36
-rw-r--r--src/Jellyfin.Extensions/Json/Converters/JsonFlagEnumConverterFactory.cs24
-rw-r--r--src/Jellyfin.Extensions/Json/JsonDefaults.cs1
9 files changed, 70 insertions, 51 deletions
diff --git a/Jellyfin.Api/Controllers/UniversalAudioController.cs b/Jellyfin.Api/Controllers/UniversalAudioController.cs
index 962f637d4..cf0858486 100644
--- a/Jellyfin.Api/Controllers/UniversalAudioController.cs
+++ b/Jellyfin.Api/Controllers/UniversalAudioController.cs
@@ -224,7 +224,7 @@ namespace Jellyfin.Api.Controllers
DeInterlace = false,
RequireNonAnamorphic = false,
EnableMpegtsM2TsMode = false,
- TranscodeReasons = mediaSource.TranscodeReasons == MediaBrowser.Model.Session.TranscodeReason.None ? null : mediaSource.TranscodeReasons.Serialize(),
+ TranscodeReasons = mediaSource.TranscodeReasons == TranscodeReason.None ? null : mediaSource.TranscodeReasons.ToString(),
Context = EncodingContext.Static,
StreamOptions = new Dictionary<string, string>(),
EnableAdaptiveBitrateStreaming = true
@@ -255,7 +255,7 @@ namespace Jellyfin.Api.Controllers
CopyTimestamps = true,
StartTimeTicks = startTimeTicks,
SubtitleMethod = SubtitleDeliveryMethod.Embed,
- TranscodeReasons = mediaSource.TranscodeReasons == MediaBrowser.Model.Session.TranscodeReason.None ? null : mediaSource.TranscodeReasons.Serialize(),
+ TranscodeReasons = mediaSource.TranscodeReasons == TranscodeReason.None ? null : mediaSource.TranscodeReasons.ToString(),
Context = EncodingContext.Static
};
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs b/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs
index 23067c7b1..d95461497 100644
--- a/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs
+++ b/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs
@@ -35,9 +35,6 @@ namespace MediaBrowser.Controller.MediaEncoding
SupportedSubtitleCodecs = Array.Empty<string>();
}
- public TranscodeReason[] TranscodeReasons => TranscodeReason.ToArray();
-
- [JsonIgnore]
public TranscodeReason TranscodeReason
{
get
diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs
index 2fb5a123f..b038d8ff1 100644
--- a/MediaBrowser.Model/Dlna/StreamBuilder.cs
+++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs
@@ -915,13 +915,13 @@ namespace MediaBrowser.Model.Dlna
}
_logger.LogInformation(
- "Transcode Result for Profile: {0}, Path: {1}, PlayMethod: {2}, AudioStreamIndex: {3}, SubtitleStreamIndex: {4}, Reasons: {5}",
- options.Profile.Name ?? "Anonymous Profile",
+ "Transcode Result for Profile: {Profile}, Path: {Path}, PlayMethod: {PlayMethod}, AudioStreamIndex: {AudioStreamIndex}, SubtitleStreamIndex: {SubtitleStreamIndex}, Reasons: {TranscodeReason}",
+ options.Profile?.Name ?? "Anonymous Profile",
item.Path ?? "Unknown path",
- playlistItem.PlayMethod,
- audioStream.Index,
- playlistItem.SubtitleStreamIndex,
- playlistItem.TranscodeReasons);
+ playlistItem?.PlayMethod,
+ audioStream?.Index,
+ playlistItem?.SubtitleStreamIndex,
+ playlistItem?.TranscodeReasons);
}
private static int GetDefaultAudioBitrate(string audioCodec, int? audioChannels)
diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs
index 3b86d5f42..79dfff5c2 100644
--- a/MediaBrowser.Model/Dlna/StreamInfo.cs
+++ b/MediaBrowser.Model/Dlna/StreamInfo.cs
@@ -798,7 +798,7 @@ namespace MediaBrowser.Model.Dlna
if (!item.IsDirectStream)
{
- list.Add(new NameValuePair("TranscodeReasons", item.TranscodeReasons.Serialize()));
+ list.Add(new NameValuePair("TranscodeReasons", item.TranscodeReasons.ToString()));
}
return list;
diff --git a/MediaBrowser.Model/Session/TranscodeReasonExtensions.cs b/MediaBrowser.Model/Session/TranscodeReasonExtensions.cs
deleted file mode 100644
index 213257b20..000000000
--- a/MediaBrowser.Model/Session/TranscodeReasonExtensions.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.Linq;
-
-namespace MediaBrowser.Model.Session
-{
- /// <summary>
- /// Extension methods for serializing TranscodeReason.
- /// </summary>
- public static class TranscodeReasonExtensions
- {
- private static readonly TranscodeReason[] _values = Enum.GetValues<TranscodeReason>();
-
- /// <summary>
- /// Serializes a TranscodeReason into a delimiter-separated string.
- /// </summary>
- /// <param name="reasons">The <see cref="TranscodeReason"/> enumeration.</param>
- /// <param name="sep">The string separator to use. defualt <c>,</c>.</param>
- /// <returns>string of transcode reasons delimited.</returns>
- public static string Serialize(this TranscodeReason reasons, string sep = ",")
- {
- return string.Join(sep, reasons.ToArray());
- }
-
- /// <summary>
- /// Serializes a TranscodeReason into an array of individual TranscodeReason bits.
- /// </summary>
- /// <param name="reasons">The <see cref="TranscodeReason"/> enumeration.</param>
- /// <returns>Array of <c>TranscodeReason</c>.</returns>
- public static TranscodeReason[] ToArray(this TranscodeReason reasons)
- {
- return _values.Where(r => r != 0 && reasons.HasFlag(r)).ToArray();
- }
- }
-}
diff --git a/MediaBrowser.Model/Session/TranscodingInfo.cs b/MediaBrowser.Model/Session/TranscodingInfo.cs
index 8834856b0..f876fa961 100644
--- a/MediaBrowser.Model/Session/TranscodingInfo.cs
+++ b/MediaBrowser.Model/Session/TranscodingInfo.cs
@@ -1,8 +1,6 @@
#nullable disable
#pragma warning disable CS1591
-using System.Text.Json.Serialization;
-
namespace MediaBrowser.Model.Session
{
public class TranscodingInfo
@@ -31,9 +29,6 @@ namespace MediaBrowser.Model.Session
public HardwareEncodingType? HardwareAccelerationType { get; set; }
- public TranscodeReason[] TranscodeReasons => TranscodeReason.ToArray();
-
- [JsonIgnore]
public TranscodeReason TranscodeReason { get; set; }
}
}
diff --git a/src/Jellyfin.Extensions/Json/Converters/JsonFlagEnumConverter.cs b/src/Jellyfin.Extensions/Json/Converters/JsonFlagEnumConverter.cs
new file mode 100644
index 000000000..6e4c85c47
--- /dev/null
+++ b/src/Jellyfin.Extensions/Json/Converters/JsonFlagEnumConverter.cs
@@ -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 : Enum
+{
+ private static readonly T[] _enumValues = (T[])Enum.GetValues(typeof(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();
+ }
+}
diff --git a/src/Jellyfin.Extensions/Json/Converters/JsonFlagEnumConverterFactory.cs b/src/Jellyfin.Extensions/Json/Converters/JsonFlagEnumConverterFactory.cs
new file mode 100644
index 000000000..b74caf345
--- /dev/null
+++ b/src/Jellyfin.Extensions/Json/Converters/JsonFlagEnumConverterFactory.cs
@@ -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));
+ }
+}
diff --git a/src/Jellyfin.Extensions/Json/JsonDefaults.cs b/src/Jellyfin.Extensions/Json/JsonDefaults.cs
index 2cd89dc3b..97cbee971 100644
--- a/src/Jellyfin.Extensions/Json/JsonDefaults.cs
+++ b/src/Jellyfin.Extensions/Json/JsonDefaults.cs
@@ -36,6 +36,7 @@ namespace Jellyfin.Extensions.Json
new JsonGuidConverter(),
new JsonNullableGuidConverter(),
new JsonVersionConverter(),
+ new JsonFlagEnumConverterFactory(),
new JsonStringEnumConverter(),
new JsonNullableStructConverterFactory(),
new JsonBoolNumberConverter(),