- Load thread after creation - Change thread list from DataList to Flex - Move unread badge to right side of chat thread list item - Fix avatar rerendering after another message is added to message group - Add styling to thread list - Change message input to support markdown and add markdown rendering for message contents
146 lines
4.9 KiB
Text
146 lines
4.9 KiB
Text
@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<Updates> Logger
|
|
@inject IOptions<Settings> Settings
|
|
@inject SettingsProvider<Settings> SettingsProvider
|
|
@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.Value.Server.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>
|
|
<Markdown Content="@release.Body" />
|
|
</Body>
|
|
</Card>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (var i = 0; i < 5; i++)
|
|
{
|
|
<Card Loading="true" Style="width: 100%;"></Card>
|
|
}
|
|
}
|
|
</Flex>
|
|
</PageContent>
|
|
|
|
@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<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.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.");
|
|
}
|
|
}
|
|
}
|