144 lines
4.8 KiB
Text
144 lines
4.8 KiB
Text
@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<Updates> Logger
|
|
@attribute [Authorize(Roles = RoleService.AdministratorRoleName)]
|
|
|
|
<PageHeader Title="Updates">
|
|
<PageHeaderExtra>
|
|
<Flex Justify="FlexJustify.End" Align="FlexAlign.Center" Gap="FlexGap.Small">
|
|
Release Channel:
|
|
<EnumSelect TEnum="ReleaseChannel" OnSelectedItemChanged="ReleaseChannelChanged" @bind-Value="Settings.Update.ReleaseChannel" Disabled="Loading" />
|
|
<Button Type="@ButtonType.Primary" OnClick="Update" Disabled="@(!UpdateAvailable || Updating)" Loading="Updating">Update</Button>
|
|
</Flex>
|
|
</PageHeaderExtra>
|
|
</PageHeader>
|
|
|
|
<PageContent>
|
|
<Flex Direction="FlexDirection.Vertical" Gap="FlexGap.Small">
|
|
@if (!Loading && !UpdateAvailable)
|
|
{
|
|
<Alert Type="@AlertType.Success" Message="You are on the latest version!" ShowIcon="true" />
|
|
}
|
|
else if (!Loading && UpdateAvailable)
|
|
{
|
|
<Alert Type="@AlertType.Info" Message="A newer version of LANCommander is available" ShowIcon="true" />
|
|
}
|
|
else
|
|
{
|
|
<Alert Type="@AlertType.Warning" Message="Loading release information..." ShowIcon="true" />
|
|
}
|
|
|
|
@if (Releases != null && Releases.Count() > 0)
|
|
{
|
|
foreach (var release in Releases)
|
|
{
|
|
<Card Title="@release.Name">
|
|
<TitleTemplate>
|
|
@release.Name <span style="font-size: 70%; margin-right: 6px;">@release.PublishedAt.GetValueOrDefault().ToString("MMMM d yyyy")</span>
|
|
|
|
@if (Releases.First().Equals(release))
|
|
{
|
|
<Tag Color="@PresetColor.Gold.ToString()">Latest</Tag>
|
|
}
|
|
|
|
@if (release.TagName == $"v{CurrentVersion}")
|
|
{
|
|
<Tag Color="@PresetColor.Blue.ToString()">Current</Tag>
|
|
}
|
|
</TitleTemplate>
|
|
<Extra>
|
|
<a href="@release.HtmlUrl" target="_blank">View Release</a>
|
|
</Extra>
|
|
<Body>
|
|
@((MarkupString)Markdown.ToHtml(release.Body))
|
|
</Body>
|
|
</Card>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (var i = 0; i < 5; i++)
|
|
{
|
|
<Card Loading="true" Style="width: 100%;"></Card>
|
|
}
|
|
}
|
|
</Flex>
|
|
</PageContent>
|
|
|
|
@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<Release> Releases { get; set; } = new List<Release>();
|
|
|
|
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.");
|
|
}
|
|
}
|
|
}
|