RBLNews/RBLNews.Shared/Components/Pages/Feeds.razor
2024-09-18 17:19:01 +02:00

135 lines
4.4 KiB
Plaintext

@inherits RefreshablePageBase
@page "/"
@using RBLFeederCommon.Enums
@using RBLFeederCommon.Models.RssFeed
@using RBLNews.Shared.Components.Controls
@using RBLNews.Shared.Services
@inject IFeedDataService feedDataService
@inject AppLifecycleService appLifecycleService
@if (FeedGroups == null)
{
<div class="d-flex justify-content-center">
Lade Feeds ...<br /><br />
<Spinner Type="SpinnerType.Grow" Color="SpinnerColor.Primary" Size="SpinnerSize.Large" />
</div>
}
else
{
<br />
<div id="feeds-page" class="row">
<div class="container">
<div class="FilterButtons">
@foreach (IGrouping<int, int> sGrouping in SourceGroupings)
{
@* <BadgeWithCounter ShowCount="true" Source="(RssFeedSources)sGrouping.Key" OnClickedCallback="OnClicked" Text="@GetRssSourceName((RssFeedSources)sGrouping.Key)" Count="@sGrouping.Count()"></BadgeWithCounter> *@
}
</div>
@foreach (FeedGroupVM feedGrp in FeedGroups)
{
<h4><Icon Name="IconName.Calendar2Event" /> @feedGrp.PublishDate.ToLocalTime().ToString("dd.MM.yyyy")</h4>
@foreach (FeedVM feed in feedGrp.Feeds)
{
<div class="col-xs-12 col-sm-12 col-md-8 col-lg-4">
<Card>
<CardBody>
<CardTitle>@feed.Title</CardTitle>
<CardText>@feed.Description</CardText>
</CardBody>
<ul class="list-group list-group-flush">
<li class="list-group-item">
@GetRssSourceName((RssFeedSources)@feed.Source) | @feed.PubDate?.ToLocalTime()
</li>
</ul>
<CardFooter>
<div class="row">
<Button Color="ButtonColor.Primary" Class="btn-sm align-self-end ml-auto" To="@feed.Link" Type="ButtonType.Link"><Icon Name="IconName.Link" /> Öffnen</Button>
</div>
</CardFooter>
</Card>
<br />
</div>
}
}
</div>
</div>
}
@code {
[Inject]
private IFeedDataService FeedDataService { get; set; }
[Inject]
private AppLifecycleService AppLifecycleService { get; set; }
private List<FeedGroupVM>? FeedGroups { get; set; }
private IEnumerable<IGrouping<int, int>> SourceGroupings { get; set; } = new List<IGrouping<int, int>>();
protected override void OnInitialized()
{
AppLifecycleService.OnActivated = LoadFeeds;
LoadFeeds();
}
private async void LoadFeeds()
{
// Copy feed list to keep original list
await FeedDataService.LoadFeeds();
FeedGroups = [..FeedDataService.Feeds.FeedGroups];
List<FeedGroupVM> listTmp = [.. FeedDataService.Feeds.FeedGroups];
SourceGroupings = listTmp.SelectMany(fg => fg.Feeds.Select(f => f.Source)).GroupBy(sources => sources);
StateHasChanged();
}
private string GetRssSourceName(RssFeedSources source)
{
switch (source)
{
case RssFeedSources.RbLive:
case RssFeedSources.NitterRbLive:
return "RBLive!";
case RssFeedSources.NitterFabrizioRomano:
return "Fabrizio Romano";
case RssFeedSources.Lvz:
return "LVZ";
case RssFeedSources.Kicker:
return "Kicker";
case RssFeedSources.Bild:
return "BILD";
case RssFeedSources.Transfermarkt:
return "Transfermarkt";
default:
return "?";
}
}
private void OnClicked(RssFeedSources source)
{
FeedGroups = new List<FeedGroupVM>();
foreach (FeedGroupVM fg in FeedDataService.Feeds.FeedGroups)
{
List<FeedVM> feeds = fg.Feeds.Where(f => (RssFeedSources)f.Source == source).ToList();
if (feeds.Any())
{
FeedGroups.Add(new FeedGroupVM
{
Feeds = feeds,
PublishDate = fg.PublishDate
});
}
}
StateHasChanged();
}
}