From 1b6af73a0c7a245f67f6dcb809c5f2003c17e3ec Mon Sep 17 00:00:00 2001 From: glax Date: Sun, 15 Jun 2025 23:55:23 +0200 Subject: [PATCH] MangaDex nullvalue checks and allow null-fields in response --- API/Schema/MangaConnectors/MangaDex.cs | 33 ++++++++++++++------------ 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/API/Schema/MangaConnectors/MangaDex.cs b/API/Schema/MangaConnectors/MangaDex.cs index 70728be..5371fec 100644 --- a/API/Schema/MangaConnectors/MangaDex.cs +++ b/API/Schema/MangaConnectors/MangaDex.cs @@ -226,22 +226,25 @@ public class MangaDex : MangaConnector private Manga ParseMangaFromJToken(JToken jToken) { string? id = jToken.Value("id"); + if(id is null) + throw new Exception("jToken was not in expected format"); JObject? attributes = jToken["attributes"] as JObject; - string? name = attributes?["title"]?.Value("en") ?? attributes?["title"]?.First?.First?.Value(); - string? description = attributes?["description"]?.Value("en")??attributes?["description"]?.First?.First?.Value(); - string? status = attributes?["status"]?.Value(); - uint? year = attributes?["year"]?.Value(); - string? originalLanguage = attributes?["originalLanguage"]?.Value(); - JArray? altTitlesJArray = attributes?["altTitles"] as JArray; - JArray? tagsJArray = attributes?["tags"] as JArray; - + if(attributes is null) + throw new Exception("jToken was not in expected format"); + string? name = attributes["title"]?.Value("en") ?? attributes["title"]?.First?.First?.Value(); + string description = attributes["description"]?.Value("en")??attributes["description"]?.First?.First?.Value()??""; + string? status = attributes["status"]?.Value(); + uint? year = attributes["year"]?.Value(); + string? originalLanguage = attributes["originalLanguage"]?.Value(); + JArray? altTitlesJArray = attributes.TryGetValue("altTitles", out JToken? altTitlesArray) ? altTitlesArray as JArray : null; + JArray? tagsJArray = attributes.TryGetValue("tags", out JToken? tagsArray) ? tagsArray as JArray : null; JArray? relationships = jToken["relationships"] as JArray; - string? coverFileName = - relationships?.FirstOrDefault(r => r["type"]?.Value() == "cover_art")?["attributes"]?.Value("fileName"); - - if (id is null || attributes is null || name is null || description is null || status is null || - altTitlesJArray is null || tagsJArray is null || relationships is null || coverFileName is null) + if (name is null || status is null || relationships is null) + throw new Exception("jToken was not in expected format"); + + string? coverFileName = relationships.FirstOrDefault(r => r["type"]?.Value() == "cover_art")?["attributes"]?.Value("fileName"); + if(coverFileName is null) throw new Exception("jToken was not in expected format"); List links = attributes["links"]? @@ -276,7 +279,7 @@ public class MangaDex : MangaConnector return new Link(key, url); }).ToList()!; - List altTitles = altTitlesJArray + List altTitles = (altTitlesJArray??[]) .Select(t => { JObject? j = t as JObject; @@ -286,7 +289,7 @@ public class MangaDex : MangaConnector return new MangaAltTitle(p.Name, p.Value.ToString()); }).Where(x => x is not null).ToList()!; - List tags = tagsJArray + List tags = (tagsJArray??[]) .Where(t => t.Value("type") == "tag") .Select(t => t["attributes"]?["name"]?.Value("en")??t["attributes"]?["name"]?.First?.First?.Value()) .Select(str => str is not null ? new MangaTag(str) : null)