From c33d8e3a4e3aa8f2233d2d7e09a736ac617b072b Mon Sep 17 00:00:00 2001 From: Max Holleman Date: Wed, 17 May 2023 16:03:04 +0200 Subject: [PATCH] Working on UI --- SharpRss/RssService.cs | 8 ++-- WebSharpRSS/Models/FeedStateContainer.cs | 17 +++++++++ WebSharpRSS/Pages/Index.razor | 48 +++++++++++++++++++++++- WebSharpRSS/Program.cs | 1 + WebSharpRSS/Shared/SideGuide.razor | 33 ++++++++++++---- 5 files changed, 93 insertions(+), 14 deletions(-) create mode 100644 WebSharpRSS/Models/FeedStateContainer.cs diff --git a/SharpRss/RssService.cs b/SharpRss/RssService.cs index e6c13c7..c24a071 100644 --- a/SharpRss/RssService.cs +++ b/SharpRss/RssService.cs @@ -17,6 +17,8 @@ namespace SharpRss /// - Database /// - File /// - Memory + combined.UnionWith(feedSet); + combined.UnionWith(feedSet2); } private static HashSet feedSet = new HashSet() @@ -29,6 +31,7 @@ namespace SharpRss new FeedModel("https://journals.plos.org/plosone/feed/atom"), new FeedModel("https://itsfoss.com/feed") }; + private static HashSet combined = new HashSet(); HashSet set = new HashSet() { @@ -43,10 +46,7 @@ namespace SharpRss public async Task> GetAllFeeds() { - HashSet fSet = new HashSet(); - fSet.UnionWith(feedSet); - fSet.UnionWith(feedSet2); - return fSet; + return combined; } diff --git a/WebSharpRSS/Models/FeedStateContainer.cs b/WebSharpRSS/Models/FeedStateContainer.cs new file mode 100644 index 0000000..4f2cce2 --- /dev/null +++ b/WebSharpRSS/Models/FeedStateContainer.cs @@ -0,0 +1,17 @@ +using SharpRss.Models; + +namespace WebSharpRSS.Models +{ + public class FeedStateContainer + { + public HashSet Feeds { get; set; } + public event Action StateChanged; + public void SetValue(HashSet feedSet) + { + Feeds = feedSet; + Invoke(); + } + + private void Invoke() => StateChanged?.Invoke(); + } +} diff --git a/WebSharpRSS/Pages/Index.razor b/WebSharpRSS/Pages/Index.razor index 2f95661..4ad8a17 100644 --- a/WebSharpRSS/Pages/Index.razor +++ b/WebSharpRSS/Pages/Index.razor @@ -1,8 +1,52 @@ @page "/" -@inject RssService _rssService +@using CodeHollow.FeedReader; +@using SharpRss.Models; +@using WebSharpRSS.Models; +@inject RssService _rssService; +@inject FeedStateContainer _stateContainer; + + @if (Feeds != null) + { + foreach (var feedItem in _items) + { + + + + @feedItem.Title + @feedItem.Description + @feedItem.PublishingDateString + + + + } + } + @code { - + [Parameter] + public HashSet? Feeds { get; set; } + + private HashSet _items = new HashSet(); + protected override async void OnInitialized() + { + UpdateFeeds(); + _stateContainer.StateChanged += FeedsChanged; + } + private void FeedsChanged() + { + UpdateFeeds(); + InvokeAsync(StateHasChanged); + } + + private void UpdateFeeds() + { + Feeds = _stateContainer.Feeds; + if (Feeds == null) return; + foreach (var feedmodel in Feeds) + { + _items = feedmodel.Base.Items.OrderBy(x => x.PublishingDate).ToHashSet(); + } + } } \ No newline at end of file diff --git a/WebSharpRSS/Program.cs b/WebSharpRSS/Program.cs index af892e4..ec61f9f 100644 --- a/WebSharpRSS/Program.cs +++ b/WebSharpRSS/Program.cs @@ -18,6 +18,7 @@ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddTransient(); +builder.Services.AddSingleton(); builder.Services.AddMudServices(config => { config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight; diff --git a/WebSharpRSS/Shared/SideGuide.razor b/WebSharpRSS/Shared/SideGuide.razor index 97cf19e..5a1dc86 100644 --- a/WebSharpRSS/Shared/SideGuide.razor +++ b/WebSharpRSS/Shared/SideGuide.razor @@ -6,16 +6,13 @@ @using ToolQit.Extensions; @inject NavigationManager _navManager; +@inject FeedStateContainer _stateContainer; @inject RssService _rssService - @* - Home - - *@ - + - +
@@ -42,8 +39,27 @@ @code { public HashSet Categories = new HashSet(); - private TreeItemData? ActivatedItem { get; set; } - private TreeItemData? SelectedItem { get; set; } + private TreeItemData? _selecteditem; + private TreeItemData? SelectedItem + { + get => _selecteditem; + set + { + _selecteditem = value; + ItemClicked(); + } + } + private void ItemClicked() + { + if (SelectedItem == null) return; + if (SelectedItem.FeedModel != null) + _stateContainer.SetValue(new HashSet() { SelectedItem.FeedModel }); + if (SelectedItem.Feeds != null) + { + + } + //_navManager.NavigateTo("/"); + } protected override async void OnInitialized() { Log.Verbose("Loading guide data..."); @@ -51,6 +67,7 @@ HashSet cats = await _rssService.GetCategories(); await Task.Run(() => Categories.UnionWith(cats.Select(x => new TreeItemData(x)).ToHashSet())); + StateHasChanged(); Log.Verbose(" Guide initialized!"); //await Task.Run(() => Categories = cats.Select(x => new TreeItemData(x)).ToHashSet()); }