From b0c9816524aed0a80d37bcc2937f693f6b366383 Mon Sep 17 00:00:00 2001 From: Max Holleman Date: Thu, 25 May 2023 15:48:56 +0200 Subject: [PATCH] Working on read ui feed item fetching --- SharpRss/Services/RssService.cs | 11 +++--- WebSharpRSS/Pages/Read.razor | 62 +++++++++++++++++++++++------- WebSharpRSS/Shared/SideGuide.razor | 14 +++++-- 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/SharpRss/Services/RssService.cs b/SharpRss/Services/RssService.cs index ba41fff..6f0ac65 100644 --- a/SharpRss/Services/RssService.cs +++ b/SharpRss/Services/RssService.cs @@ -57,16 +57,17 @@ namespace SharpRss.Services Log.Warning("No feed items added to feed: {FeedUrl}", feedModel.Url); return result; } - public async Task> GetFeedsAsync(GroupModel? group = null) => await _dbService.GetFeedsAsync(group?.Id); + public async Task> GetFeedsAsync(string? groupId = null) => await _dbService.GetFeedsAsync(groupId); public async Task> GetUngroupedFeedsAsync() => await _dbService.GetFeedsAsync(""); - public async Task> GetFeedItems(FeedModel feedModel) + public async Task> GetFeedItemsAsync(string feedId, string? groupId = null) => await GetFeedItemsFromFeedsAsync(new[] { feedId }, groupId); + public async Task> GetFeedItemsFromFeedsAsync(string[] feedIds, string? groupId = null) { - var items = await _dbService.GetFeedItemsAsync(new []{ feedModel.Id ?? string.Empty }); + var items = await _dbService.GetFeedItemsAsync(feedIds); GroupModel? group = null; - if (feedModel.GroupId != null) + if (groupId != null) { - var model = await _dbService.GetGroupsAsync(feedModel.GroupId); + var model = await _dbService.GetGroupsAsync(groupId); if (model != null && model.Any()) group = model.FirstOrDefault(); } // Update the items with the group data diff --git a/WebSharpRSS/Pages/Read.razor b/WebSharpRSS/Pages/Read.razor index ec3bb45..97c78f7 100644 --- a/WebSharpRSS/Pages/Read.razor +++ b/WebSharpRSS/Pages/Read.razor @@ -1,4 +1,4 @@ -@page "/read/{Id}" +@page "/read" @using WebSharpRSS.Models; @using ToolQit.Extensions @using Serilog @@ -15,9 +15,9 @@ Loading... } - else if (failed) + else if (faulted) { - Loading failed! + Could not load feeds! } else { @@ -48,21 +48,57 @@ @code { [Parameter] - public string Id { get; set; } + [SupplyParameterFromQuery(Name = "fid")] + public string? Fid + { + get => _fid; + set + { + _fid = value; + LoadItems(); + } + } + private string? _fid; + [Parameter] + [SupplyParameterFromQuery(Name = "gid")] + public string? Gid + { + get => _gid; + set + { + _gid = value; + LoadItems(); + } + } + private string? _gid; HashSet items = new HashSet(); bool isLoading = true; - bool failed = false; - - protected override async void OnInitialized() + bool faulted = false; + private async void LoadItems() { - if (Id.IsNullEmptyWhiteSpace()) + //TODO: better group feed fetching! + faulted = false; + if (Fid != null) { - Log.Warning("Invalid id!"); - failed = true; + var fItems = await _rssService.GetFeedItemsAsync(Fid); + items = fItems.Select(x => FeedItemData.FromModel(x)).ToHashSet(); + isLoading = false; + } + else if (Gid != null) + { + var feeds = await _rssService.GetFeedsAsync(Gid); + var feedids = feeds.Select(x => x.Id); + var feedItems = await _rssService.GetFeedItemsFromFeedsAsync(feedids.ToArray()); + items = feedItems.Select(x => FeedItemData.FromModel(x)).ToHashSet(); + } + else + { + faulted = true; } - var fItems = await _rssService.GetFeedItems(new FeedModel("") { Id = Id }); - items = fItems.Select(x => FeedItemData.FromModel(x)).ToHashSet(); - isLoading = false; StateHasChanged(); } + protected override void OnInitialized() + { + LoadItems(); + } } \ No newline at end of file diff --git a/WebSharpRSS/Shared/SideGuide.razor b/WebSharpRSS/Shared/SideGuide.razor index bd393c7..f0919e3 100644 --- a/WebSharpRSS/Shared/SideGuide.razor +++ b/WebSharpRSS/Shared/SideGuide.razor @@ -6,8 +6,8 @@ @using WebSharpRSS.Models; @using ToolQit.Extensions; -@inject FeedStateContainer _stateContainer; @inject RssService _rssService +@inject NavigationManager Navigation @@ -52,12 +52,20 @@ } private void ItemClicked() { - + if (_selectedItem == null) return; + if (_selectedItem.FeedModel != null) + { + Navigation.NavigateTo($"/read?fid={_selectedItem.FeedModel.Id}"); + } + else if (_selectedItem.GroupModel != null) + { + Navigation.NavigateTo($"/read?gid={_selectedItem.GroupModel.Id}"); + } } private async void ExpandedChanged(TreeItemData treeItemData) { treeItemData.Loading = true; - var groupedItems = await _rssService.GetFeedsAsync(treeItemData.GroupModel); + var groupedItems = await _rssService.GetFeedsAsync(treeItemData.GroupModel?.Id); treeItemData.Children = ModelToTreeItem(groupedItems); treeItemData.IsExpanded = !treeItemData.IsExpanded; treeItemData.Loading = false;