@page "/" @using Microsoft.Extensions.Caching.Memory @using System.Reflection @using ErsatzTV.Core.Interfaces.GitHub @using ErsatzTV.Core.Health @using ErsatzTV.Application.Health @implements IDisposable @inject IGitHubApiClient _gitHubApiClient @inject IMemoryCache _memoryCache @inject IMediator _mediator Full changelog is available on GitHub Health Checks Check Message @if (context.Status == HealthCheckStatus.Fail) { } else if (context.Status == HealthCheckStatus.Warning) { } else if (context.Status == HealthCheckStatus.Info) { } else { } @context.Title @if (context.Link.IsSome) { foreach (string link in context.Link) { @context.Message } } else { @context.Message } @code { private readonly CancellationTokenSource _cts = new(); private string _releaseNotes; private MudTable _table; public void Dispose() { _cts.Cancel(); _cts.Dispose(); } protected override async Task OnParametersSetAsync() { try { if (_memoryCache.TryGetValue("Index.ReleaseNotesHtml", out string releaseNotesHtml)) { _releaseNotes = releaseNotesHtml; } else { var assembly = Assembly.GetEntryAssembly(); if (assembly != null) { string version = assembly.GetCustomAttribute()?.InformationalVersion; if (version != null) { Either maybeNotes; if (version != "develop") { string gitHubVersion = version.Split("-").Head() + "-beta"; if (!gitHubVersion.StartsWith("v")) { gitHubVersion = $"v{gitHubVersion}"; } maybeNotes = await _gitHubApiClient.GetReleaseNotes(gitHubVersion, _cts.Token); maybeNotes.IfRight(notes => _releaseNotes = notes); } else { maybeNotes = await _gitHubApiClient.GetLatestReleaseNotes(_cts.Token); maybeNotes.IfRight(notes => _releaseNotes = notes); } } } if (_releaseNotes != null) { _memoryCache.Set("Index.ReleaseNotesHtml", _releaseNotes); } } } catch (Exception) { // ignore } } private async Task> ServerReload(TableState state) { List healthCheckResults = await _mediator.Send(new GetAllHealthCheckResults(), _cts.Token); return new TableData { TotalItems = healthCheckResults.Count, Items = healthCheckResults }; } }