diff --git a/PodcastRewind/Pages/Setup.cshtml b/PodcastRewind/Pages/Setup.cshtml index d0282ee..9118961 100644 --- a/PodcastRewind/Pages/Setup.cshtml +++ b/PodcastRewind/Pages/Setup.cshtml @@ -10,12 +10,25 @@
@if (!string.IsNullOrEmpty(Model.PodcastImageUrl)) { - + } -

@Model.PodcastTitle

+

@Model.PodcastTitle

-@if (Model.PodcastEpisodes.Count == 0) +@if (Model.XmlParsingError) +{ + +} +else if (Model.PodcastEpisodes.Count == 0) {

That podcast feed doesn't seem to have any episodes!

} @@ -77,5 +90,5 @@ else @section Scripts { - + } diff --git a/PodcastRewind/Pages/Setup.cshtml.cs b/PodcastRewind/Pages/Setup.cshtml.cs index 59819b0..e8808a0 100644 --- a/PodcastRewind/Pages/Setup.cshtml.cs +++ b/PodcastRewind/Pages/Setup.cshtml.cs @@ -1,8 +1,8 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; -using PodcastRewind.Services; -using System.ServiceModel.Syndication; using PodcastRewind.Models.Dto; +using PodcastRewind.Services; +using System.Xml; namespace PodcastRewind.Pages; @@ -15,6 +15,7 @@ public class SetupModel(IFeedRewindInfoRepository repository, ISyndicationFeedSe public string PodcastTitle { get; private set; } = string.Empty; public string PodcastImageUrl { get; private set; } = string.Empty; public List PodcastEpisodes { get; private set; } = []; + public bool XmlParsingError { get; private set; } public async Task OnGetAsync(string? feedUrl, int interval = 7) { @@ -24,7 +25,18 @@ public async Task OnGetAsync(string? feedUrl, int interval = 7) var feed = await feedService.GetSyndicationFeedAsync(feedUrl); if (feed is null) return NotFound(); - LoadData(feed); + PodcastTitle = feed.Title.Text; + PodcastImageUrl = feed.ImageUrl?.ToString() ?? ""; + try + { + PodcastEpisodes = feed.Items.Select(item => new ViewPodcastEpisodeDto(item)) + .OrderBy(dto => dto.PublishDate).ToList(); + } + catch (XmlException e) + { + XmlParsingError = true; + return Page(); + } if (PodcastEpisodes.Count > 0) { @@ -46,19 +58,14 @@ public async Task OnPostAsync() var feed = await feedService.GetSyndicationFeedAsync(CreateFeedRewindInfo.FeedUrl); if (feed is null) return NotFound(); - LoadData(feed); + PodcastTitle = feed.Title.Text; + PodcastEpisodes = feed.Items.Select(item => new ViewPodcastEpisodeDto(item)) + .OrderBy(dto => dto.PublishDate).ToList(); + PodcastImageUrl = feed.ImageUrl?.ToString() ?? ""; return Page(); } var id = await repository.SaveAsync(CreateFeedRewindInfo); return RedirectToPage("Details", new { id }); } - - private void LoadData(SyndicationFeed feed) - { - PodcastTitle = feed.Title.Text; - PodcastEpisodes = feed.Items.Select(item => new ViewPodcastEpisodeDto(item)) - .OrderBy(dto => dto.PublishDate).ToList(); - PodcastImageUrl = feed.ImageUrl?.ToString() ?? ""; - } }