SharpRSS/WebSharpRSS/Pages/Read.razor
2023-05-26 14:43:10 +02:00

107 lines
3.3 KiB
Plaintext

@page "/read"
@using WebSharpRSS.Models;
@using ToolQit.Extensions
@using Serilog
@using SharpRss.Models
@using SharpRss.Services
@inject RssService _rssService;
<MudStack Spacing="2" Class="ml-2 mr-2">
@if (isLoading)
{
<div class="justify-self: center">
<MudProgressCircular Color="Color.Primary" Indeterminate="true" />
<MudText>Loading...</MudText>
</div>
}
else if (faulted)
{
<MudAlert Severity="Severity.Error" Variant="Variant.Filled">Could not load feeds!</MudAlert>
}
else
{
foreach (var feedItemData in items)
{
<MudItem Style="backdrop-filter: blur(16px) saturate(180%);">
<MudCard Style=" background: rgba(0,0,0,0.5);">
<MudCardContent>
<div style="justify-self: start;" class="d-flex align-center">
@if (feedItemData.FaviconUrl != null)
{
<MudImage Src="@feedItemData.FaviconUrl" ObjectFit="ObjectFit.Contain" />
}
<div class="d-inline pa-2 align-center" style="font-size: 16px;">
@((MarkupString)feedItemData.Title)
</div>
@*<MudText Class="d-inline pa-2 align-center">@feedItemData.Title</MudText>*@
</div>
<div>
@((MarkupString)feedItemData.Description)
</div>
@*<MudText Typo="Typo.body2">@feedItemData.Description</MudText>*@
<MudText Typo="Typo.overline">@feedItemData.PublishingDate.ToString()</MudText>
</MudCardContent>
</MudCard>
</MudItem>
}
}
</MudStack>
@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<FeedItemData> items = new HashSet<FeedItemData>();
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();
}
}