@page "/settings/about" @using System.Text @using Iceshrimp.Assets.PhosphorIcons @using Iceshrimp.Frontend.Components @using Iceshrimp.Frontend.Core.InMemoryLogger @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Frontend.Localization @using Iceshrimp.Shared.Schemas.Web @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @attribute [Authorize] @layout SettingsLayout; @inject VersionService Version; @inject IStringLocalizer Loc; @inject IJSRuntime Js; @inject InMemoryLogService LogSvc; @inject UpdateService UpdateSvc; @inject NavigationManager Nav; @inject GlobalComponentSvc GlobalComponentSvc;

@Loc["Version Information"]

Iceshrimp.NET @Version.Version Codename @Version.Codename @if (Version.CommitHash != null) { Commit @Version.CommitHash } .NET Runtime @Environment.Version
@if (_updateAvailable == CheckState.True) {
New version!
Iceshrimp.NET @_newVersion?.Version Codename @_newVersion?.Codename @if (_newVersion?.CommitHash != null) { Commit @_newVersion?.CommitHash }
@if (_skipWaitingRes == CheckState.False) {
@Loc["Something went wrong, please check the logs."]
} } @if (_updateAvailable == CheckState.False) {
@Loc["Already on the newest version!"]
}

@Loc["Logs"]

@Loc["These logs may contain sensitive information, please do not post them publicly.\n" + "Providing them to developers upon request may help with debugging."]
@code { private IJSInProcessObjectReference _module = null!; private CheckState _updateAvailable = CheckState.Unknown; private CheckState _skipWaitingRes = CheckState.Unknown; private VersionResponse? _newVersion; protected override async Task OnInitializedAsync() { _module = (IJSInProcessObjectReference)await Js.InvokeAsync("import", "./Components/ErrorUi.razor.js"); } private enum CheckState { Unknown, True, False } private async void CheckUpdate() { await UpdateSvc.ServiceWorkerUpdate(); var res = await UpdateSvc.ServiceWorkerCheckWaiting(); _updateAvailable = res ? CheckState.True : CheckState.False; _newVersion = UpdateSvc.BackendVersion; StateHasChanged(); } private async void SkipWaiting() { var res = await UpdateSvc.ServiceWorkerSkipWaiting(); _skipWaitingRes = res ? CheckState.True : CheckState.False; if (res) { Nav.NavigateTo("/", true); } } private void DownloadLogs() { var logBytes = LogSvc.GetLogs().SelectMany(p => Encoding.UTF8.GetBytes(p)).ToArray(); _module.InvokeVoid("DownloadFile", "log.txt", "text/plain", logBytes); } }