@page "/Settings/Updates" @using LANCommander.Server.Services.Abstractions @using LANCommander.Server.Settings @using LANCommander.Server.Settings.Enums @using Markdig @using Microsoft.Extensions.Options @using Octokit @using Semver @inject IMessageService MessageService @inject UpdateService UpdateService @inject IGitHubService GitHubService @inject IVersionProvider VersionProvider @inject ILogger Logger @inject IOptions Settings @inject SettingsProvider SettingsProvider @attribute [Authorize(Roles = RoleService.AdministratorRoleName)] Release Channel: @if (!Loading && !UpdateAvailable) { } else if (!Loading && UpdateAvailable) { } else { } @if (Releases != null && Releases.Count() > 0) { foreach (var release in Releases) { @release.Name @release.PublishedAt.GetValueOrDefault().ToString("MMMM d yyyy") @if (Releases.First().Equals(release)) { Latest } @if (release.TagName == $"v{CurrentVersion}") { Current } View Release } } else { for (var i = 0; i < 5; i++) { } } @code { string RootPath = Path.GetPathRoot(Directory.GetCurrentDirectory()); bool Loading { get; set; } = true; bool Updating { get; set; } = false; bool UpdateAvailable { get; set; } = false; SemVersion LatestVersion { get; set; } SemVersion CurrentVersion { get; set; } IEnumerable Releases { get; set; } = new List(); protected override async Task OnInitializedAsync() { await CheckForUpdate(); } async Task CheckForUpdate() { Loading = true; await InvokeAsync(StateHasChanged); await Task.Yield(); CurrentVersion = VersionProvider.GetCurrentVersion(); UpdateAvailable = await UpdateService.UpdateAvailableAsync(); LatestVersion = await GitHubService.GetLatestVersionAsync(Settings.Value.Server.Update.ReleaseChannel); Releases = await GitHubService.GetReleasesAsync(5); Loading = false; await InvokeAsync(StateHasChanged); await Task.Yield(); } async Task ReleaseChannelChanged(ReleaseChannel releaseChannel) { if (!Loading) { SettingsProvider.Update(s => { s.Server.Update.ReleaseChannel = releaseChannel; }); MessageService.Success($"Changed release channel to {releaseChannel}!"); } } async Task Update() { try { Updating = true; if (Settings.Value.Server.Launcher.HostUpdates) await UpdateService.DownloadLauncherReleaseAsync(Releases.First()); await UpdateService.DownloadServerReleaseAsync(Releases.First()); } catch (NotImplementedException ex) { MessageService.Error(ex.Message); Logger.LogError(ex, "An unknown error occurred."); } catch (Exception ex) { MessageService.Error("An unknown error occurred while updating. Please check the logs"); Logger.LogError(ex, "An unknown error occurred."); } } }