Skip to content

Commit 277d285

Browse files
authored
Merge pull request #8 from jonsagara/feature/subcat
Create a proper iTunesSubcategory class instead of making iTunesCategory recursive
2 parents 82b15e9 + 04f6c41 commit 277d285

File tree

10 files changed

+51
-21
lines changed

10 files changed

+51
-21
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<Nullable>enable</Nullable>
99

1010
<!-- NuGet -->
11-
<Version>1.0.0-alpha3</Version>
11+
<Version>1.0.0-alpha4</Version>
1212
<AssemblyVersion>1.0.0.0</AssemblyVersion>
1313
<FileVersion>1.0.0.0</FileVersion>
1414
<Authors>Armin Reiter; Jon Sagara</Authors>

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"version": "8.0.100",
3+
"version": "8.0.200",
44
"rollForward": "latestPatch"
55
}
66
}

src/Sagara.FeedReader.Benchmarks/Sagara.FeedReader.Benchmarks.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<PackageReference Include="BenchmarkDotNet" Version="0.13.12" />
1313
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
1414
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.0" />
15-
<PackageReference Include="Polly.Core" Version="8.2.0" />
15+
<PackageReference Include="Polly.Core" Version="8.3.0" />
1616
<PackageReference Include="Scrutor" Version="4.2.2" />
1717
</ItemGroup>
1818

src/Sagara.FeedReader.ConsoleSample/Sagara.FeedReader.ConsoleSample.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
<ItemGroup>
88
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
99
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
10-
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="8.0.0" />
10+
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="8.2.0" />
1111
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
1212
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
1313
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.0" />
14-
<PackageReference Include="Polly.Core" Version="8.2.0" />
14+
<PackageReference Include="Polly.Core" Version="8.3.0" />
1515
<PackageReference Include="Scrutor" Version="4.2.2" />
1616
<PackageReference Include="Serilog" Version="3.1.1" />
1717
<PackageReference Include="Serilog.Enrichers.Environment" Version="2.3.0" />

src/Sagara.FeedReader.TestDataCrawler/Sagara.FeedReader.TestDataCrawler.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<ItemGroup>
1212
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
1313
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.0" />
14-
<PackageReference Include="Polly.Core" Version="8.2.0" />
14+
<PackageReference Include="Polly.Core" Version="8.3.0" />
1515
<PackageReference Include="Scrutor" Version="4.2.2" />
1616
</ItemGroup>
1717

src/Sagara.FeedReader.Tests.Integration/Sagara.FeedReader.Tests.Integration.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
<ItemGroup>
44
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
5-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
6-
<PackageReference Include="xunit" Version="2.6.5" />
7-
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.6">
5+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
6+
<PackageReference Include="xunit" Version="2.7.0" />
7+
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.7">
88
<PrivateAssets>all</PrivateAssets>
99
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
1010
</PackageReference>

src/Sagara.FeedReader.Tests.Unit/Sagara.FeedReader.Tests.Unit.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
<ItemGroup>
44
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
5-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
6-
<PackageReference Include="xunit" Version="2.6.5" />
7-
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.6">
5+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
6+
<PackageReference Include="xunit" Version="2.7.0" />
7+
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.7">
88
<PrivateAssets>all</PrivateAssets>
99
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
1010
</PackageReference>

src/Sagara.FeedReader/Modules/ApplePodcasts/iTunesCategory.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,24 @@
66
public class iTunesCategory
77
{
88
/// <summary>
9-
/// Top-level category text.
9+
/// The category text.
1010
/// </summary>
1111
public string? Text { get; set; }
1212

1313
/// <summary>
1414
/// Optional Subcategory.
1515
/// </summary>
16-
public iTunesCategory? Subcategory { get; set; }
16+
public iTunesSubcategory? Subcategory { get; set; }
17+
}
18+
19+
/// <summary>
20+
/// Since a subcategory has no subcategories of its own, give it its own entity without
21+
/// a Subcategory property.
22+
/// </summary>
23+
public class iTunesSubcategory
24+
{
25+
/// <summary>
26+
/// The subcategory text.
27+
/// </summary>
28+
public string? Text { get; set; }
1729
}

src/Sagara.FeedReader/Modules/ApplePodcasts/iTunesChannel.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System.Xml.Linq;
2+
using Microsoft.Extensions.Logging;
3+
using Microsoft.Extensions.Logging.Abstractions;
24
using Sagara.FeedReader.Extensions;
35

46
namespace Sagara.FeedReader.Modules.ApplePodcasts;
@@ -102,13 +104,19 @@ public class iTunesChannel
102104
public bool Complete { get; set; }
103105

104106

107+
private readonly ILogger<iTunesChannel> _logger;
108+
109+
105110
/// <summary>
106111
/// .ctor
107112
/// </summary>
108-
public iTunesChannel(XElement channelElement)
113+
public iTunesChannel(XElement channelElement, ILoggerFactory? loggerFactory = null)
109114
{
110115
ArgumentNullException.ThrowIfNull(channelElement);
111116

117+
loggerFactory ??= NullLoggerFactory.Instance;
118+
_logger = loggerFactory.CreateLogger<iTunesChannel>();
119+
112120
var imageElement = channelElement.GetElement(namespacePrefix: NamespacePrefix, elementName: "image");
113121
if (imageElement is not null)
114122
{
@@ -167,7 +175,7 @@ private static iTunesCategory[] ParseCategories(XElement channelElement)
167175
var subCatElement = catElement.GetElement(namespacePrefix: NamespacePrefix, elementName: "category");
168176
var subCategoryText = subCatElement?.GetAttributeValue("text");
169177
var subCategory = !string.IsNullOrWhiteSpace(subCategoryText)
170-
? new iTunesCategory { Text = subCategoryText }
178+
? new iTunesSubcategory { Text = subCategoryText }
171179
: null;
172180

173181
return new iTunesCategory
@@ -179,7 +187,7 @@ private static iTunesCategory[] ParseCategories(XElement channelElement)
179187
.ToArray();
180188
}
181189

182-
private static iTunesType? ParseiTunesType(XElement channelElement)
190+
private iTunesType? ParseiTunesType(XElement channelElement)
183191
{
184192
var typeElement = channelElement.GetChildElementValue(namespacePrefix: NamespacePrefix, elementName: "type");
185193
if (string.IsNullOrWhiteSpace(typeElement))
@@ -191,17 +199,27 @@ private static iTunesCategory[] ParseCategories(XElement channelElement)
191199
if (!Enum.TryParse(typeElement, out iTunesType type))
192200
{
193201
// Can't parse it into an enum. Don't assume any default value.
194-
#warning TODO: logging?
202+
_logger.UnableToParseEnumValue(typeElement.ToString());
195203
return null;
196204
}
197205

198206
if (!Enum.IsDefined(type))
199207
{
200208
// Not a valid enum value. Don't assume any default value.
209+
_logger.EnumValueNotDefined(type, typeElement.ToString());
201210
return null;
202211
}
203212

204213
// Parsed and a valid enum value. Return it as-is.
205214
return type;
206215
}
207216
}
217+
218+
internal static partial class iTunesChannelLogger
219+
{
220+
[LoggerMessage(Level = LogLevel.Warning, EventId = 200, Message = "Unable to parse an iTunesType enum value from the itunes:type element: {TypeElementXml}")]
221+
internal static partial void UnableToParseEnumValue(this ILogger logger, string typeElementXml);
222+
223+
[LoggerMessage(Level = LogLevel.Warning, EventId = 201, Message = "Parsed iTunesType, but the value '{TypeValue}' is not defined. itunes:type element: {TypeElementXml}")]
224+
internal static partial void EnumValueNotDefined(this ILogger logger, iTunesType typeValue, string typeElementXml);
225+
}

src/Sagara.FeedReader/Sagara.FeedReader.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@
3939

4040
<ItemGroup>
4141
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
42-
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="8.0.0" />
42+
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="8.2.0" />
4343
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.0" />
44-
<PackageReference Include="Microsoft.Net.Http.Headers" Version="8.0.0" />
44+
<PackageReference Include="Microsoft.Net.Http.Headers" Version="8.0.2" />
4545
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0">
4646
<PrivateAssets>all</PrivateAssets>
4747
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
4848
</PackageReference>
49-
<PackageReference Include="Polly.Core" Version="8.2.0" />
49+
<PackageReference Include="Polly.Core" Version="8.3.0" />
5050
<PackageReference Include="Scrutor" Version="4.2.2" />
5151
</ItemGroup>
5252

0 commit comments

Comments
 (0)