diff --git a/MediaBrowser.Providers/Plugins/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Plugins/Omdb/OmdbItemProvider.cs index 3ef404b535..71d5510632 100644 --- a/MediaBrowser.Providers/Plugins/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Plugins/Omdb/OmdbItemProvider.cs @@ -11,6 +11,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common; using MediaBrowser.Common.Json; +using MediaBrowser.Common.Json.Converters; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; @@ -32,7 +33,7 @@ namespace MediaBrowser.Providers.Plugins.Omdb private readonly IFileSystem _fileSystem; private readonly IServerConfigurationManager _configurationManager; private readonly IApplicationHost _appHost; - private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.GetOptions(); + private readonly JsonSerializerOptions _jsonOptions; public OmdbItemProvider( IApplicationHost appHost, @@ -46,6 +47,10 @@ namespace MediaBrowser.Providers.Plugins.Omdb _fileSystem = fileSystem; _configurationManager = configurationManager; _appHost = appHost; + + _jsonOptions = new JsonSerializerOptions(JsonDefaults.GetOptions()); + _jsonOptions.Converters.Add(new JsonOmdbNotAvailableStringConverter()); + _jsonOptions.Converters.Add(new JsonOmdbNotAvailableStructConverter()); } public string Name => "The Open Movie Database"; diff --git a/MediaBrowser.Providers/Plugins/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Plugins/Omdb/OmdbProvider.cs index e700e6969b..a177ae30a9 100644 --- a/MediaBrowser.Providers/Plugins/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Plugins/Omdb/OmdbProvider.cs @@ -30,7 +30,7 @@ namespace MediaBrowser.Providers.Plugins.Omdb private readonly IHttpClientFactory _httpClientFactory; private readonly CultureInfo _usCulture = new CultureInfo("en-US"); private readonly IApplicationHost _appHost; - private static readonly JsonSerializerOptions _jsonOptions = JsonDefaults.GetOptions(); + private readonly JsonSerializerOptions _jsonOptions; public OmdbProvider(IHttpClientFactory httpClientFactory, IFileSystem fileSystem, IApplicationHost appHost, IServerConfigurationManager configurationManager) { @@ -38,6 +38,10 @@ namespace MediaBrowser.Providers.Plugins.Omdb _fileSystem = fileSystem; _configurationManager = configurationManager; _appHost = appHost; + + _jsonOptions = new JsonSerializerOptions(JsonDefaults.GetOptions()); + _jsonOptions.Converters.Add(new JsonOmdbNotAvailableStringConverter()); + _jsonOptions.Converters.Add(new JsonOmdbNotAvailableStructConverter()); } public async Task Fetch(MetadataResult itemResult, string imdbId, string language, string country, CancellationToken cancellationToken) @@ -344,7 +348,7 @@ namespace MediaBrowser.Providers.Plugins.Omdb return path; } - public static async Task GetDeserializedOmdbResponse(HttpClient httpClient, string url, CancellationToken cancellationToken) + public async Task GetDeserializedOmdbResponse(HttpClient httpClient, string url, CancellationToken cancellationToken) { using var response = await GetOmdbResponse(httpClient, url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); @@ -471,101 +475,71 @@ namespace MediaBrowser.Providers.Plugins.Omdb public class SeasonRootObject { - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Title { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string seriesID { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStructConverter))] public int? Season { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStructConverter))] public int? totalSeasons { get; set; } public RootObject[] Episodes { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Response { get; set; } } public class RootObject { - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Title { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Year { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Rated { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Released { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Runtime { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Genre { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Director { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Writer { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Actors { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Plot { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Language { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Country { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Awards { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Poster { get; set; } public List Ratings { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Metascore { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string imdbRating { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string imdbVotes { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string imdbID { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Type { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string DVD { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string BoxOffice { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Production { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Website { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStringConverter))] public string Response { get; set; } - [JsonConverter(typeof(JsonOmdbNotAvailableStructConverter))] public int? Episode { get; set; } public float? GetRottenTomatoScore() diff --git a/tests/Jellyfin.Common.Tests/Json/JsonOmdbConverterTests.cs b/tests/Jellyfin.Common.Tests/Json/JsonOmdbConverterTests.cs index e1436a648e..06a4855bfd 100644 --- a/tests/Jellyfin.Common.Tests/Json/JsonOmdbConverterTests.cs +++ b/tests/Jellyfin.Common.Tests/Json/JsonOmdbConverterTests.cs @@ -23,7 +23,7 @@ namespace Jellyfin.Common.Tests.Json public void Deserialize_Omdb_Response_Not_Available_Success() { const string Input = "{\"Title\":\"Chapter 1\",\"Year\":\"2013\",\"Rated\":\"TV-MA\",\"Released\":\"01 Feb 2013\",\"Season\":\"N/A\",\"Episode\":\"N/A\",\"Runtime\":\"55 min\",\"Genre\":\"Drama\",\"Director\":\"David Fincher\",\"Writer\":\"Michael Dobbs (based on the novels by), Andrew Davies (based on the mini-series by), Beau Willimon (created for television by), Beau Willimon, Sam Forman (staff writer)\",\"Actors\":\"Kevin Spacey, Robin Wright, Kate Mara, Corey Stoll\",\"Plot\":\"Congressman Francis Underwood has been declined the chair for Secretary of State. He's now gathering his own team to plot his revenge. Zoe Barnes, a reporter for the Washington Herald, will do anything to get her big break.\",\"Language\":\"English\",\"Country\":\"USA\",\"Awards\":\"N/A\",\"Poster\":\"https://m.media-amazon.com/images/M/MV5BMTY5MTU4NDQzNV5BMl5BanBnXkFtZTgwMzk2ODcxMzE@._V1_SX300.jpg\",\"Ratings\":[{\"Source\":\"Internet Movie Database\",\"Value\":\"8.7/10\"}],\"Metascore\":\"N/A\",\"imdbRating\":\"8.7\",\"imdbVotes\":\"6736\",\"imdbID\":\"tt2161930\",\"seriesID\":\"N/A\",\"Type\":\"episode\",\"Response\":\"True\"}"; - var seasonRootObject = JsonSerializer.Deserialize(Input, JsonDefaults.GetOptions()); + var seasonRootObject = JsonSerializer.Deserialize(Input, _options); Assert.NotNull(seasonRootObject); Assert.Null(seasonRootObject?.Awards); Assert.Null(seasonRootObject?.Episode);