164 lines
4.1 KiB
Plaintext
164 lines
4.1 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">
|
|
<Spinner Type="SpinnerType.Grow" Color="SpinnerColor.Primary" Size="SpinnerSize.Large"/>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<div id="feeds-page">
|
|
<div class="container-fluid">
|
|
<section id="filter">
|
|
@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>
|
|
}
|
|
</section>
|
|
<section id="feeds-list">
|
|
@foreach (FeedGroupVM feedGrp in FeedGroups)
|
|
{
|
|
<h1>
|
|
<Icon Name="IconName.Calendar2Event"/> @feedGrp.PublishDate.ToLocalTime().ToString("dd.MM.yyyy")
|
|
</h1>
|
|
@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>
|
|
<div class="row">
|
|
<Button Outline="true" Color="ButtonColor.Primary" Class="btn-sm align-self-end ml-auto" To="@feed.Link" Type="ButtonType.Link"><Icon Name="IconName.Link"/> Öffnen</Button>
|
|
</div>
|
|
</CardBody>
|
|
@* <ul class="list-group list-group-flush"> *@
|
|
@* <li class="list-group-item"> *@
|
|
@* <div class="row"> *@
|
|
@* <Button Outline="true" Color="ButtonColor.Primary" Class="btn-sm align-self-end ml-auto" To="@feed.Link" Type="ButtonType.Link"><Icon Name="IconName.Link"/> Öffnen</Button> *@
|
|
@* </div> *@
|
|
@* </li> *@
|
|
@* </ul> *@
|
|
<CardFooter>
|
|
|
|
@GetRssSourceName((RssFeedSources)@feed.Source) | @feed.PubDate?.ToLocalTime()
|
|
|
|
</CardFooter>
|
|
</Card>
|
|
<br/>
|
|
</div>
|
|
}
|
|
}
|
|
</section>
|
|
</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>>();
|
|
|
|
private List<RssFeedSources> activeFilters = new List<RssFeedSources>();
|
|
|
|
|
|
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)
|
|
{
|
|
if (activeFilters.Contains(source))
|
|
activeFilters.Remove(source);
|
|
else
|
|
{
|
|
activeFilters.Add(source);
|
|
}
|
|
|
|
if (!activeFilters.Any())
|
|
{
|
|
FeedGroups = [.. FeedDataService.Feeds.FeedGroups];
|
|
return;
|
|
}
|
|
|
|
FeedGroups = new List<FeedGroupVM>();
|
|
foreach (FeedGroupVM fg in FeedDataService.Feeds.FeedGroups)
|
|
{
|
|
List<FeedVM> feeds = fg.Feeds.Where(f => activeFilters.Contains((RssFeedSources)f.Source)).ToList();
|
|
if (feeds.Any())
|
|
{
|
|
FeedGroups.Add(
|
|
new FeedGroupVM
|
|
{
|
|
Feeds = feeds,
|
|
PublishDate = fg.PublishDate
|
|
});
|
|
}
|
|
}
|
|
|
|
StateHasChanged();
|
|
}
|
|
|
|
|
|
} |