From fb247fb33fb3457ce644c2e552cde65e7cddb89f Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Thu, 26 May 2022 17:29:55 -0600 Subject: [PATCH] Add better handling for parents and series with no children. --- Source/AudibleUtilities/ApiExtended.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Source/AudibleUtilities/ApiExtended.cs b/Source/AudibleUtilities/ApiExtended.cs index f732ff78..dd5e602e 100644 --- a/Source/AudibleUtilities/ApiExtended.cs +++ b/Source/AudibleUtilities/ApiExtended.cs @@ -138,6 +138,9 @@ namespace AudibleUtilities //description, series rating, and series cover art which differ //from the individual episodes' values. item.Series = new Series[]{ new Series { Asin = item.Asin, Sequence = RelationshipToProduct.Parent, Title = item.TitleWithSubtitle } }; + //Helps to distinguish product parrents which have no content + //from children which do have content. + item.Asin = $"PARENT_{item.Asin}"; items.Add(item); } else if (!item.IsEpisodes) @@ -155,7 +158,7 @@ namespace AudibleUtilities Serilog.Log.Logger.Debug("Completed library scan."); #if DEBUG -//System.IO.File.WriteAllText(library_json, AudibleApi.Common.Converter.ToJson(items)); + //System.IO.File.WriteAllText(library_json, AudibleApi.Common.Converter.ToJson(items)); #endif var validators = new List(); validators.AddRange(getValidators()); @@ -182,7 +185,13 @@ namespace AudibleUtilities var children = await getEpisodeChildrenAsync(parent); if (!children.Any()) - return children; + { + //The parent is the only episode in the podcase series, + //so the parent is its own child. + var parentJson = parent.ToJson(parent).ToString(); + var child = Item.FromJson(parentJson); + children.Add(child); + } foreach (var child in children) { @@ -195,7 +204,7 @@ namespace AudibleUtilities { Asin = parent.Asin, // This should properly be Single() not FirstOrDefault(), but FirstOrDefault is defensive for malformed data from audible - Sequence = parent.Relationships.FirstOrDefault(r => r.Asin == child.Asin).Sort.ToString(), + Sequence = parent.Relationships.FirstOrDefault(r => r.Asin == child.Asin)?.Sort?.ToString() ?? "0", Title = parent.TitleWithSubtitle } };