@inherits RefreshablePageBase
@page "/"
@using RBLFeederCommon.Enums
@using RBLFeederCommon.Models.RssFeed
@using RBLNews.Shared.Services
@using RBLNews.Shared.Components.Controls
@using RBLNews.Shared.Models
@inject IFeedDataService feedDataService
@inject AppLifecycleService appLifecycleService
@if (FeedGroups == null)
{
}
else
{
@foreach (IGrouping
sGrouping in SourceGroupings)
{
}
@foreach (FeedGroupVM feedGrp in FeedGroups)
{
@feedGrp.PublishDate.ToLocalTime().ToString("dd.MM.yyyy")
@foreach (FeedVM feed in feedGrp.Feeds)
{
@feed.Title
@feed.Description
@* *@
@* - *@
@*
*@
@* *@
@*
*@
@* *@
@*
*@
@GetRssSourceName((RssFeedSources)@feed.Source) | @feed.PubDate?.ToLocalTime().ToString("dd.MM.yyyy HH:mm")
}
}
}
@code {
[Inject] private IFeedDataService FeedDataService { get; set; }
[Inject] private AppLifecycleService AppLifecycleService { get; set; }
private List? FeedGroups { get; set; }
private IEnumerable> SourceGroupings { get; set; } = new List>();
private List activeFeedSources = new List();
protected override void OnInitialized()
{
AppLifecycleService.OnActivated = LoadFeeds;
LoadFeeds();
}
private void SetFilter()
{
this.activeFeedSources.Clear();
IEnumerable enumerable = this.SourceGroupings.Select(grp => grp.Key).Distinct();
foreach (int i in enumerable)
{
this.activeFeedSources.Add((RssFeedSources)i);
}
}
private async void LoadFeeds()
{
// Copy feed list to keep original list
await FeedDataService.LoadFeeds();
FeedGroups = [.. FeedDataService.Feeds.FeedGroups];
List listTmp = [.. FeedDataService.Feeds.FeedGroups];
SourceGroupings = listTmp.SelectMany(fg => fg.Feeds.Select(f => f.Source)).GroupBy(sources => sources);
SetFilter();
this.FilterFeeds();
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 OnFilterChanged(FilterFeedEventArg eventArg)
{
if (eventArg.Value && !this.activeFeedSources.Contains(eventArg.Source))
{
activeFeedSources.Add(eventArg.Source);
}
else if (this.activeFeedSources.Contains(eventArg.Source))
{
activeFeedSources.Remove(eventArg.Source);
}
this.FilterFeeds();
StateHasChanged();
}
private void FilterFeeds()
{
this.FeedGroups = new List();
foreach (FeedGroupVM fg in this.FeedDataService.Feeds.FeedGroups)
{
List feeds = fg.Feeds.Where(f => this.activeFeedSources.Contains((RssFeedSources)f.Source)).ToList();
if (feeds.Any())
{
this.FeedGroups.Add(
new FeedGroupVM
{
Feeds = feeds,
PublishDate = fg.PublishDate
});
}
}
}
}