From 863aa4777e9e03942bbb9c4133654c6c58d1fa0a Mon Sep 17 00:00:00 2001 From: Max <51083570+DRdrProfessor@users.noreply.github.com> Date: Fri, 26 May 2023 21:54:12 +0200 Subject: [PATCH] UI Tuneup! --- SharpRss/Services/RssService.cs | 1 - WebSharpRSS/MainLayout.razor | 24 ++++-- WebSharpRSS/Models/FeedItemData.cs | 11 ++- WebSharpRSS/Models/TreeItemData.cs | 7 +- WebSharpRSS/Pages/Index.razor | 66 ++--------------- WebSharpRSS/Pages/List.razor | 72 ++++++++++++++++++ WebSharpRSS/Pages/Read.razor | 102 +------------------------- WebSharpRSS/Shared/FeedItemList.razor | 60 +++++++++++++++ WebSharpRSS/Shared/ItemView.razor | 29 ++++++++ WebSharpRSS/Shared/ReadDialog.razor | 13 ++++ WebSharpRSS/Shared/SideGuide.razor | 15 ++-- 11 files changed, 216 insertions(+), 184 deletions(-) create mode 100644 WebSharpRSS/Pages/List.razor create mode 100644 WebSharpRSS/Shared/FeedItemList.razor create mode 100644 WebSharpRSS/Shared/ItemView.razor create mode 100644 WebSharpRSS/Shared/ReadDialog.razor diff --git a/SharpRss/Services/RssService.cs b/SharpRss/Services/RssService.cs index af2fd50..88c8fb8 100644 --- a/SharpRss/Services/RssService.cs +++ b/SharpRss/Services/RssService.cs @@ -5,7 +5,6 @@ using System.Threading.Tasks; using CodeHollow.FeedReader; using Serilog; using SharpRss.Models; -using ToolQit.Extensions; namespace SharpRss.Services { diff --git a/WebSharpRSS/MainLayout.razor b/WebSharpRSS/MainLayout.razor index c0ee7ee..2e2c2c1 100644 --- a/WebSharpRSS/MainLayout.razor +++ b/WebSharpRSS/MainLayout.razor @@ -3,13 +3,27 @@ + - - - - - + + + SharpRSS + + diff --git a/WebSharpRSS/Models/FeedItemData.cs b/WebSharpRSS/Models/FeedItemData.cs index a1234ee..af1a6be 100644 --- a/WebSharpRSS/Models/FeedItemData.cs +++ b/WebSharpRSS/Models/FeedItemData.cs @@ -8,18 +8,17 @@ namespace WebSharpRSS.Models { public FeedItemData() { - if (Link == null) return; - //FaviconUrl = new Uri(Link).AbsoluteUri; - //FaviconUrl = string.Format(Caretaker.Settings["Paths"].GetString("FaviconResolveUrl"), Link.Remove(Link.IndexOf("http", StringComparison.Ordinal), Link.IndexOf("://", StringComparison.Ordinal) + 3)); + } public static FeedItemData? FromModel(FeedItemModel model) => Utilities.ConvertFrom(model); + private string? _faviconUrl; public string? FaviconUrl { get { - if (Link == null) return null; - Uri uri = new Uri(Link); - return string.Format(Caretaker.Settings["Paths"].GetString("FaviconResolveUrl"), uri.Host); + if (Link == null || _faviconUrl != null) return _faviconUrl; + _faviconUrl = string.Format(Caretaker.Settings["Paths"].GetString("FaviconResolveUrl"), new Uri(Link).Host); + return _faviconUrl; } } diff --git a/WebSharpRSS/Models/TreeItemData.cs b/WebSharpRSS/Models/TreeItemData.cs index d3280eb..620779b 100644 --- a/WebSharpRSS/Models/TreeItemData.cs +++ b/WebSharpRSS/Models/TreeItemData.cs @@ -19,14 +19,15 @@ namespace WebSharpRSS.Models public TreeItemData(FeedModel feedModel) { FeedModel = feedModel; - Title = feedModel.Title; - FaviconUrl = string.Format(Caretaker.Settings["Paths"].GetString("FaviconResolveUrl"), feedModel.Url.Remove(feedModel.Url.IndexOf("http", StringComparison.Ordinal), feedModel.Url.IndexOf("://", StringComparison.Ordinal) + 3)); + Title = feedModel.Title ?? string.Empty; + if (FeedModel.Url == null) return; + FaviconUrl = string.Format(Caretaker.Settings["Paths"].GetString("FaviconResolveUrl"), new Uri(FeedModel.Url).Host); } public readonly GroupModel? GroupModel; public readonly FeedModel? FeedModel; public HashSet? Children { get; set; } - public string Title { get; set; } = string.Empty; + public string Title { get; set; } public bool IsSelected { get; set; } public string? Icon { get; set; } public string? FaviconUrl { get; set; } diff --git a/WebSharpRSS/Pages/Index.razor b/WebSharpRSS/Pages/Index.razor index f913d66..356ef3b 100644 --- a/WebSharpRSS/Pages/Index.razor +++ b/WebSharpRSS/Pages/Index.razor @@ -1,68 +1,14 @@ @page "/" -@using CodeHollow.FeedReader; -@using SharpRss.Models; +@page "/dashboard" @using WebSharpRSS.Models; -@using SharpRss.Services @inject FeedStateContainer _stateContainer; - - @*@foreach (var feedItemData in _itemDatas) - { - - - -
- @if (feedItemData.Icon != null) - { - - } - @if (feedItemData.FaviconUrl != null) - { - - } - @feedItemData.FeedItem.Title -
- @feedItemData.FeedItem.Description - @feedItemData.FeedItem.PublishingDate.ToString() -
-
-
- }*@ -
+Dashboard! + + + @code { - protected override void OnInitialized() - { - UpdateFeeds(); - //_stateContainer.StateChanged += FeedsChanged; - } - private void FeedsChanged() - { - UpdateFeeds(); - InvokeAsync(StateHasChanged); - } - //private HashSet _itemDatas = new HashSet(); - //private TreeItemData? _treeItemData; - private void UpdateFeeds() - { - - /*if (_stateContainer.TreeItem == null) return; - _treeItemData = _stateContainer.TreeItem; - if (_treeItemData.Feed != null) - { - Feed feed = _treeItemData.Feed; - _itemDatas = feed.Items.Select(x => new FeedItemData(x) { Icon = _treeItemData.Icon, FaviconUrl = _treeItemData.FaviconUrl, CategoryColorHex = _treeItemData.CategoryModel?.HexColor }).ToHashSet(); - } - else if (_treeItemData.Feeds != null) - { - HashSet items = new HashSet(); - foreach (var treeItem in _treeItemData.Feeds) - { - if (treeItem.Feed == null) continue; - items.UnionWith(treeItem.Feed.Items.Select(x => new FeedItemData(x) { Icon = treeItem.Icon, FaviconUrl = treeItem.FaviconUrl, CategoryColorHex = _treeItemData.CategoryModel?.HexColor })); - _itemDatas = items.OrderBy(x => x.FeedItem.PublishingDate).Reverse().ToHashSet(); - } - }*/ - } + } \ No newline at end of file diff --git a/WebSharpRSS/Pages/List.razor b/WebSharpRSS/Pages/List.razor new file mode 100644 index 0000000..fffa28b --- /dev/null +++ b/WebSharpRSS/Pages/List.razor @@ -0,0 +1,72 @@ +@page "/list" +@using WebSharpRSS.Models +@using SharpRss.Services + +@inject IDialogService _dialogService; +@inject RssService _rssService; + +
+ @if (_isLoading) + { +
+ + Loading... +
+ } + else + { + + } +
+ +@code { + [Parameter] + [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; + private async void LoadItems() + { + _isLoading = true; + if (Fid != null) + { + var fItems = await _rssService.GetFeedItemsAsync(Fid); + items = fItems.Select(x => FeedItemData.FromModel(x)).OrderBy(x => x.PublishingDate).Reverse().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)).OrderBy(x => x.PublishingDate).Reverse().ToHashSet(); + } + _isLoading = false; + StateHasChanged(); + } + protected override void OnInitialized() + { + LoadItems(); + } +} \ No newline at end of file diff --git a/WebSharpRSS/Pages/Read.razor b/WebSharpRSS/Pages/Read.razor index 0b56627..4ca7055 100644 --- a/WebSharpRSS/Pages/Read.razor +++ b/WebSharpRSS/Pages/Read.razor @@ -1,107 +1,9 @@ @page "/read" -@using WebSharpRSS.Models; -@using ToolQit.Extensions -@using Serilog -@using SharpRss.Models @using SharpRss.Services @inject RssService _rssService; - - - @if (isLoading) - { -
- - Loading... -
- } - else if (faulted) - { - Could not load feeds! - } - else - { - foreach (var feedItemData in items) - { - - - -
- @if (feedItemData.FaviconUrl != null) - { - - } -
- @((MarkupString)feedItemData.Title) -
- @*@feedItemData.Title*@ -
-
- @((MarkupString)feedItemData.Description) -
- @*@feedItemData.Description*@ - @feedItemData.PublishingDate.ToString() -
-
-
- } - } -
+Nothing here yet! @code { - [Parameter] - [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 faulted = false; - private async void LoadItems() - { - faulted = false; - isLoading = true; - if (Fid != null) - { - var fItems = await _rssService.GetFeedItemsAsync(Fid); - items = fItems.Select(x => FeedItemData.FromModel(x)).OrderBy(x => x.PublishingDate).Reverse().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)).OrderBy(x => x.PublishingDate).Reverse().ToHashSet(); - } - else - { - faulted = true; - } - isLoading = false; - StateHasChanged(); - } - protected override void OnInitialized() - { - LoadItems(); - } + } \ No newline at end of file diff --git a/WebSharpRSS/Shared/FeedItemList.razor b/WebSharpRSS/Shared/FeedItemList.razor new file mode 100644 index 0000000..b0cf4e6 --- /dev/null +++ b/WebSharpRSS/Shared/FeedItemList.razor @@ -0,0 +1,60 @@ +@using WebSharpRSS.Models +@using Serilog +@using ToolQit.Extensions + +@inject IDialogService _dialogService + + + @if (Items != null) + { + foreach (var feedItemData in Items) + { + + +
+ @if (feedItemData.FaviconUrl != null) + { + + } +
+ @if (feedItemData.Title != null) + { + @((MarkupString)feedItemData.Title) + } +
+
+
+ @if (feedItemData.Description != null && !feedItemData.Description.IsNullEmptyWhiteSpace()) + { + @((MarkupString)feedItemData.Description) + } + else + { + No description found! + } +
+ @feedItemData.PublishingDate.ToString() +
+
+ } + } + else + { + No items to load! + } +
+ +@code { + [Parameter] + public HashSet? Items { get; set; } + DialogOptions _dialogOptions = new DialogOptions() { FullWidth = true, MaxWidth = MaxWidth.ExtraLarge, NoHeader = true, CloseButton = true, CloseOnEscapeKey = true }; + + private void Callback(FeedItemData feedItem) + { + var parameters = new DialogParameters(); + parameters.Add("Data", feedItem); + _dialogService.Show("", parameters, _dialogOptions); + Log.Verbose("Item: {ItemId} clicked", feedItem.Id); + } + +} \ No newline at end of file diff --git a/WebSharpRSS/Shared/ItemView.razor b/WebSharpRSS/Shared/ItemView.razor new file mode 100644 index 0000000..25281e6 --- /dev/null +++ b/WebSharpRSS/Shared/ItemView.razor @@ -0,0 +1,29 @@ +@using WebSharpRSS.Models +@using ToolQit.Extensions + + +@if (FeedItem != null) +{ +
+ @if (FeedItem.FaviconUrl != null) + { + + } +
+ @((MarkupString)(FeedItem?.Title ?? "This item doesn't contains a title!")) +
+
+ +
+ @((MarkupString)((FeedItem?.Content == null || FeedItem.Content.IsNullEmptyWhiteSpace() ? FeedItem?.Description : FeedItem.Content) ?? "This item doesn't contain any content!")) +
+} +else +{ + Could not load data! +} + +@code { + [Parameter] + public FeedItemData? FeedItem { get; set; } +} \ No newline at end of file diff --git a/WebSharpRSS/Shared/ReadDialog.razor b/WebSharpRSS/Shared/ReadDialog.razor new file mode 100644 index 0000000..a4e3edb --- /dev/null +++ b/WebSharpRSS/Shared/ReadDialog.razor @@ -0,0 +1,13 @@ +@using WebSharpRSS.Models + + + + + + + +@code { + [Parameter] + public FeedItemData? Data { get; set; } + +} \ No newline at end of file diff --git a/WebSharpRSS/Shared/SideGuide.razor b/WebSharpRSS/Shared/SideGuide.razor index f0919e3..ab8634f 100644 --- a/WebSharpRSS/Shared/SideGuide.razor +++ b/WebSharpRSS/Shared/SideGuide.razor @@ -7,10 +7,10 @@ @using ToolQit.Extensions; @inject RssService _rssService -@inject NavigationManager Navigation +@inject NavigationManager _navigation - + @@ -19,7 +19,7 @@ @if (context.FaviconUrl == null && context.Icon != null) { - + } else { @@ -27,9 +27,6 @@ } @context.Title -
- @*@context.FeeditemCount*@ -
@@ -38,7 +35,7 @@
@code { - private MudTheme Theme = new MudTheme(); + private MudTheme _theme = new MudTheme(); private readonly HashSet _guideItems = new HashSet(); private TreeItemData? _selectedItem; private TreeItemData? SelectedItem @@ -55,11 +52,11 @@ if (_selectedItem == null) return; if (_selectedItem.FeedModel != null) { - Navigation.NavigateTo($"/read?fid={_selectedItem.FeedModel.Id}"); + _navigation.NavigateTo($"/list?fid={_selectedItem.FeedModel.Id}"); } else if (_selectedItem.GroupModel != null) { - Navigation.NavigateTo($"/read?gid={_selectedItem.GroupModel.Id}"); + _navigation.NavigateTo($"/list?gid={_selectedItem.GroupModel.Id}"); } } private async void ExpandedChanged(TreeItemData treeItemData)