@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 }); } } } }