diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/Channel.cs b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/Channel.cs index a3d33e2..ca99f36 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/Channel.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/Channel.cs @@ -70,6 +70,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist /// Gets channel tags. /// [JsonProperty(PropertyName = "channel_tags")] + [JsonConverter(typeof(TagsJsonConverter))] public Collection Tags { get; } /// diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TagsJsonConverter.cs b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TagsJsonConverter.cs new file mode 100644 index 0000000..17eb73e --- /dev/null +++ b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TagsJsonConverter.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.ObjectModel; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist +{ + /// + /// Custom JsonConverter to handle tags list that could be null. + /// + public class TagsJsonConverter : JsonConverter + { + /// + public override bool CanConvert(Type objectType) + { + return objectType == typeof(Collection); + } + + /// + public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) + { + JToken token = JToken.Load(reader); + var tags = new Collection(); + + if (token.Type == JTokenType.Array) + { + var stringArray = token.ToObject(); + if (stringArray != null) + { + foreach (var tag in stringArray) + { + tags.Add(tag); + } + } + } + + return tags; + } + + /// + public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) + { + var tags = (Collection)(value ?? Array.Empty()); + + writer.WriteStartArray(); + foreach (var tag in tags) + { + writer.WriteValue(tag); + } + + writer.WriteEndArray(); + } + } +} diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/Video.cs b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/Video.cs index 49d380d..ac7bfff 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/Video.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/Video.cs @@ -54,6 +54,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist /// Gets video tags. /// [JsonProperty(PropertyName = "tags")] + [JsonConverter(typeof(TagsJsonConverter))] public Collection Tags { get; } ///