From 99e6f0bc444215ddc0c71efeee7d3992c7169126 Mon Sep 17 00:00:00 2001 From: Michael Bond Date: Wed, 18 Dec 2024 13:21:09 -0500 Subject: [PATCH] Start working on showing blog posts --- AboutMe/Wasm/Pages/Blog.razor | 15 +++++++ AboutMe/Wasm/Pages/Blog.razor.cs | 68 ++++++++++++++++++++++++++++++++ AboutMe/Wasm/Program.cs | 5 ++- 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 AboutMe/Wasm/Pages/Blog.razor create mode 100644 AboutMe/Wasm/Pages/Blog.razor.cs diff --git a/AboutMe/Wasm/Pages/Blog.razor b/AboutMe/Wasm/Pages/Blog.razor new file mode 100644 index 00000000..3e4c0f9b --- /dev/null +++ b/AboutMe/Wasm/Pages/Blog.razor @@ -0,0 +1,15 @@ +@page "/Blog" +@inject HttpClient Http + +

@feedTitle

+ diff --git a/AboutMe/Wasm/Pages/Blog.razor.cs b/AboutMe/Wasm/Pages/Blog.razor.cs new file mode 100644 index 00000000..b1d61ec7 --- /dev/null +++ b/AboutMe/Wasm/Pages/Blog.razor.cs @@ -0,0 +1,68 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace AboutMe.Wasm.Pages; + +// ReSharper disable once UnusedType.Global +public partial class Blog +{ + private string feedTitle = string.Empty; + private List posts = []; + + protected override async Task OnInitializedAsync() + { + try + { + const string feedUrl = "https://micro.bondcodes.com/feed.json"; + var jsonResponse = await Http.GetStringAsync(feedUrl); + + var feed = JsonSerializer.Deserialize(jsonResponse, + new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + + if (feed != null) + { + feedTitle = feed.Title; + posts = feed.Items.Take(10).ToList(); // Get the last 10 posts + } + } + catch (Exception ex) + { + Console.WriteLine($"Error loading feed: {ex.Message}"); + } + } +} + +[JsonSerializable(typeof(Feed))] +public class Feed +{ + [JsonPropertyName("version")] + public string Version { get; set; } = ""; + [JsonPropertyName("title")] + public string Title { get; set; } = ""; + [JsonPropertyName("icon")] + public string Icon { get; set; } = ""; + [JsonPropertyName("home_page_url")] + public string HomePageUrl { get; set; } = ""; + [JsonPropertyName("feed_url")] + public string FeedUrl { get; set; } = ""; + + // ReSharper disable once CollectionNeverUpdated.Global + [JsonPropertyName("items")] + public List Items { get; set; } = []; +} + +// ReSharper disable once ClassNeverInstantiated.Global +public class Item +{ + // ReSharper disable once UnusedMember.Global + [JsonPropertyName("id")] + public string Id { get; set; } = ""; + [JsonPropertyName("title")] + public string Title { get; set; } = ""; + [JsonPropertyName("content_text")] + public string ContentHtml { get; set; } = ""; + [JsonPropertyName("date_published")] + public DateTime DatePublished { get; set; } + [JsonPropertyName("url")] + public string Url { get; set; } = ""; +} diff --git a/AboutMe/Wasm/Program.cs b/AboutMe/Wasm/Program.cs index f0db08aa..475df383 100644 --- a/AboutMe/Wasm/Program.cs +++ b/AboutMe/Wasm/Program.cs @@ -1,6 +1,9 @@ var builder = WebAssemblyHostBuilder.CreateDefault(args); +var services = builder.Services; -builder.Services.AddMudServices(); +services + .AddMudServices() + .AddScoped(_ => new HttpClient { BaseAddress = new(builder.HostEnvironment.BaseAddress) }); builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after");