@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; } } }