@using System.Collections
@using LANCommander.Server.Settings.Enums
@inject UpdateService UpdateService
@inject NavigationManager NavigationManager
@if (IsInitializing)
{
Fetching Launchers …
}
else if (DownloadLinks.Count() == 0)
{
No Launchers available
}
@foreach (var downloadLink in DownloadLinks)
{
}
@code {
class DownloadLink
{
public class Tag
{
public Tag(string name)
{
Name = name;
Icon = string.Empty;
}
public string Name { get; set; }
public string Icon { get; set; }
public TagColor? ColorOverride { get; set; }
}
public string Name { get; set; }
public string Url { get; set; }
public string Icon { get; set; }
public Tag[] Tags { get; set; }
public bool IsOnline { get; set; }
}
bool IsInitializing = false;
IEnumerable DownloadLinks = new List();
readonly string DefaultIcon = IconType.Fill.QuestionCircle;
readonly Hashtable _iconMap = new()
{
[LauncherPlatform.Windows] = IconType.Fill.Windows,
[LauncherPlatform.Linux] = IconType.Outline.Qq, // Not Linux, but QQ penguin
[LauncherPlatform.macOS] = IconType.Fill.Apple,
};
protected override async Task OnInitializedAsync()
{
try
{
IsInitializing = true;
var artifacts = await UpdateService.GetLauncherArtifactsAsync();
DownloadLinks = artifacts
.OrderBy(a => a.Platform)
.ThenBy(a => a.Architecture)
.Select(a =>
{
var tags = new List();
if (artifacts.Count(art => art.Platform == a.Platform && art.Architecture == a.Architecture) > 1)
{
if (a.Url.ToLower().EndsWith(".exe"))
tags.Add(new DownloadLink.Tag("exe"));
else if (a.Url.ToLower().EndsWith(".zip"))
tags.Add(new DownloadLink.Tag("zip"));
}
if (a.IsNightly)
tags.Add(new DownloadLink.Tag("nightly") { Icon = IconType.Fill.Fire, ColorOverride = TagColor.Volcano });
else if (a.IsPrerelease)
tags.Add(new DownloadLink.Tag("pre") { ColorOverride = TagColor.Gold });
return new DownloadLink
{
Name = $"{a.Platform} ({a.Architecture})",
Icon = _iconMap[a.Platform]?.ToString() ?? DefaultIcon,
Url = a.Url,
Tags = tags.ToArray(),
IsOnline = a.IsOnline,
};
});
}
finally
{
IsInitializing = false;
}
}
}