@page "/Settings/Updates" @using LANCommander.Server.Services.Abstractions @using Markdig @using Octokit @using Semver @inject IMessageService MessageService @inject UpdateService UpdateService @inject IGitHubService GitHubService @inject IVersionProvider VersionProvider @inject ILogger Logger @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 @((MarkupString)Markdown.ToHtml(release.Body)) } } else { for (var i = 0; i < 5; i++) { } } @code { Settings Settings = SettingService.GetSettings(); 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.Update.ReleaseChannel); Releases = await GitHubService.GetReleasesAsync(5); Loading = false; await InvokeAsync(StateHasChanged); await Task.Yield(); } async Task ReleaseChannelChanged(ReleaseChannel releaseChannel) { if (!Loading) { Settings = SettingService.GetSettings(); Settings.Update.ReleaseChannel = releaseChannel; SettingService.SaveSettings(Settings); MessageService.Success($"Changed release channel to {releaseChannel}!"); } } async Task Update() { try { Updating = true; if (Settings.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."); } } }