Skip to content

Commit b987c2e

Browse files
author
Daniel Mueller
committed
Introduce CData for Content
1 parent 88ad73b commit b987c2e

File tree

11 files changed

+40
-18
lines changed

11 files changed

+40
-18
lines changed

build.cake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ Task("Test")
106106
});
107107

108108
Task("Pack")
109-
.IsDependentOn("Test")
109+
.IsDependentOn("Build")
110110
.Does(() =>
111111
{
112112
DotNetCorePack("./src/dng.Syndication.csproj", new DotNetCorePackSettings

dng.Syndication.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
1515
.travis.yml = .travis.yml
1616
appveyor.yml = appveyor.yml
1717
build.cake = build.cake
18+
global.json = global.json
1819
README.md = README.md
1920
version.json = version.json
2021
EndProjectSection

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"sdk": {
3-
"version": "3.1.201"
3+
"version": "3.1.400"
44
}
55
}

src/Generators/AtomGenerator.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using System.Xml.Linq;
44

55
using dng.Syndication.Models;
6+
using System.Web;
7+
using System.Text;
68

79
namespace dng.Syndication.Generators
810
{
@@ -68,13 +70,15 @@ public string Process()
6870
var itemElement = new XElement(ns + "entry");
6971
itemElement.Add(new XElement(ns + "title", feedEntry.Title));
7072

71-
itemElement.Add(new XElement(ns + "link", new XAttribute("href", feedEntry.Link)));
73+
itemElement.Add(new XElement(ns + "link",
74+
new XAttribute("href",
75+
HttpUtility.UrlDecode(feedEntry.Link.ToString(), Encoding.UTF8))));
7276

7377
if (!string.IsNullOrWhiteSpace(feedEntry.Summary))
7478
itemElement.Add(new XElement(ns + "summary", feedEntry.Summary));
7579

7680
if (!string.IsNullOrWhiteSpace(feedEntry.Content))
77-
itemElement.Add(new XElement(ns + "content", feedEntry.Content));
81+
itemElement.Add(new XElement(ns + "content", new XCData(feedEntry.Content)));
7882

7983
if (feedEntry.Author != null)
8084
{

src/Generators/PodcastRssGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,13 @@ private void AppendItems(
106106
new XElement("item",
107107
new XElement("title", episode.Title),
108108
new XElement(itunesNamespace + "title", episode.Title),
109-
new XElement("description", new XCData(episode.Description)),
110-
new XElement(itunesNamespace + "summary", new XCData(episode.Description)),
109+
new XElement("description", episode.Description),
110+
new XElement(itunesNamespace + "summary", episode.Description),
111111
new XElement("pubDate", FormatDateRfc2822(episode.Date)),
112112
episode.Link != null ? new XElement("link", episode.Link) : null,
113113
episode.Image != null ? new XElement(itunesNamespace + "image", new XAttribute("href", episode.Image)) : null,
114114
new XElement("guid", new XAttribute("isPermaLink", false), episode.Guid),
115-
new XElement(contentNamespace + "encoded", new XCData(episode.Description)),
115+
!IsNullOrWhiteSpace(episode.Content) ? new XElement(contentNamespace + "encoded", new XCData(episode.Content)) : null,
116116
episode.EpisodeNumber > 0 ? new XElement(itunesNamespace + "episode", episode.EpisodeNumber) : null,
117117
new XElement(itunesNamespace + "episodeType", episode.EpisodeType.ToString().ToLower()),
118118
episode.SeasonNumber > 0 ? new XElement(itunesNamespace + "season", episode.SeasonNumber) : null,

src/Generators/Rss20Generator.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
using System;
2+
using System.Text;
3+
using System.Web;
24
using System.Xml.Linq;
35
using dng.Syndication.Models;
6+
47
using static System.String;
58

69
namespace dng.Syndication.Generators
@@ -38,7 +41,7 @@ public string Process()
3841

3942
channel.Add(new XElement("link", _feed.Link));
4043

41-
channel.Add(new XElement("description", _feed.Description));
44+
channel.Add(new XElement("description", new XCData(_feed.Description)));
4245

4346
if (!IsNullOrWhiteSpace(_feed.Copyright))
4447
channel.Add(new XElement("copyright", _feed.Copyright));
@@ -67,9 +70,9 @@ public string Process()
6770
if (feedEntry.Author != null)
6871
itemElement.Add(new XElement("author", $"{feedEntry.Author.Email} ({feedEntry.Author.Name})"));
6972

70-
itemElement.Add(new XElement("guid", feedEntry.Link));
73+
itemElement.Add(new XElement("guid", HttpUtility.UrlDecode(feedEntry.Link.ToString(), Encoding.UTF8)));
7174

72-
itemElement.Add(new XElement("link", feedEntry.Link));
75+
itemElement.Add(new XElement("link", HttpUtility.UrlDecode(feedEntry.Link.ToString(), Encoding.UTF8)));
7376

7477
if (feedEntry.PublishDate != DateTime.MinValue)
7578
itemElement.Add(new XElement("pubDate", FormatDateRfc2822(feedEntry.PublishDate)));

src/Models/Podcasts/Episode.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ public Episode()
3131
/// </summary>
3232
public string Description{ get; set; }
3333

34+
/// <summary>
35+
/// An episode description allows html tags.
36+
/// </summary>
37+
public string Content { get; set; }
38+
3439
public string Author { get; set; }
3540

3641
/// <summary>

tests/Examples/SimplePodcastRssFeed.xml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
<item>
2929
<title>At vero eos et accusam et justo duo</title>
3030
<itunes:title>At vero eos et accusam et justo duo</itunes:title>
31-
<description><![CDATA[<p>Lorem ipsum dolor sit amet, <a href="https://www.apple.com/itunes/podcasts/">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p><p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.<br />Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>]]></description>
32-
<itunes:summary><![CDATA[<p>Lorem ipsum dolor sit amet, <a href="https://www.apple.com/itunes/podcasts/">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p><p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.<br />Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>]]></itunes:summary>
31+
<description>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</description>
32+
<itunes:summary>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.cleanupDescription</itunes:summary>
3333
<pubDate>Thu, 9 Apr 2020 14:45:00 +0200</pubDate>
3434
<link>https://www.example.com/podcasts/At-vero-eos-et-accusam-et-justo-duo</link>
3535
<guid isPermaLink="false">20f0fc4c7c404</guid>
@@ -44,12 +44,11 @@
4444
<item>
4545
<title>Et accusam et justo duo</title>
4646
<itunes:title>Et accusam et justo duo</itunes:title>
47-
<description><![CDATA[<p>Lorem ipsum dolor sit amet, <a href="https://www.apple.com/itunes/podcasts/">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p><p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.<br />Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>]]></description>
48-
<itunes:summary><![CDATA[<p>Lorem ipsum dolor sit amet, <a href="https://www.apple.com/itunes/podcasts/">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p><p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.<br />Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>]]></itunes:summary>
47+
<description>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</description>
48+
<itunes:summary>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</itunes:summary>
4949
<pubDate>Wed, 8 Apr 2020 12:45:00 +0200</pubDate>
5050
<itunes:image href="https://www.example.com/podcasts/img/episode2.jpg" />
5151
<guid isPermaLink="false">40f0fc5c7c404</guid>
52-
<content:encoded><![CDATA[<p>Lorem ipsum dolor sit amet, <a href="https://www.apple.com/itunes/podcasts/">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p><p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.<br />Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>]]></content:encoded>
5352
<itunes:episodeType>full</itunes:episodeType>
5453
<itunes:explicit>false</itunes:explicit>
5554
<googleplay:explicit>no</googleplay:explicit>

tests/PodcastRssGeneratorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void when_creating_a_podcast_rss_feed_with_one_items()
4444
.Build())
4545
.WithEpisode(new PodcastRssEpisodeBuilder()
4646
.WithTitle("Et accusam et justo duo")
47-
.WithDescription(@"<p>Lorem ipsum dolor sit amet, <a href=""https://www.apple.com/itunes/podcasts/"">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p><p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.<br />Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>")
47+
.WithDescription("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat")
4848
.WithDuration(TimeSpan.FromSeconds(1102))
4949
.WithId("40f0fc5c7c404")
5050
.WithEpisodeType(EpisodeType.Full)

tests/TestdataBuilder/Podcasts/PodcastRssEpisodeBuilder.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class PodcastRssEpisodeBuilder
1818
private Uri _link;
1919
private Enclosure _enclosure;
2020
private Uri _image;
21+
private string _content;
2122

2223
public PodcastRssEpisodeBuilder WithEpisodeType(
2324
EpisodeType episodeType)
@@ -47,6 +48,13 @@ public PodcastRssEpisodeBuilder WithDescription(
4748
return this;
4849
}
4950

51+
public PodcastRssEpisodeBuilder WithContent(
52+
string content)
53+
{
54+
_content = content;
55+
return this;
56+
}
57+
5058
public PodcastRssEpisodeBuilder WithAuthor(
5159
string author)
5260
{
@@ -107,7 +115,8 @@ public PodcastRssEpisodeBuilder WithDefault()
107115
{
108116
return WithEpisodeType(EpisodeType.Full)
109117
.WithId("20f0fc4c7c404").WithTitle("At vero eos et accusam et justo duo")
110-
.WithDescription(@"<p>Lorem ipsum dolor sit amet, <a href=""https://www.apple.com/itunes/podcasts/"">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p><p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.<br />Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>")
118+
.WithDescription("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.")
119+
.WithContent(@"<p>Lorem ipsum dolor sit amet, <a href=""https://www.apple.com/itunes/podcasts/"">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p><p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.<br />Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>")
111120
.WithAuthor("Lorem")
112121
.WithDate(new DateTime(2020, 4, 9, 14, 45, 00))
113122
.WithDuration(TimeSpan.FromSeconds(1079))
@@ -129,6 +138,7 @@ public Episode Build()
129138
Guid = _id,
130139
Title = _title,
131140
Description = _description,
141+
Content = _content,
132142
Author = _author,
133143
Date = _date,
134144
EpisodeNumber = _episodeNumber,

0 commit comments

Comments
 (0)