@using LANCommander.Launcher.Data.Models @using LANCommander.Launcher.Models @using LANCommander.SDK.Extensions @inherits FeedbackComponent @inject InstallService InstallService @inject SDK.Client Client @inject LocalizationService LocalizationService
@if (Addons.Any()) { } @if (Settings.Games.InstallDirectories.Length > 1) { @foreach (var directory in Settings.Games.InstallDirectories) { @directory } }
@if (GetOperation() != "None") { } @code { Settings Settings = SettingService.GetSettings(); string SelectedDirectory = ""; SDK.Models.Game RemoteGame; Data.Models.Game Game; List Addons = new(); IEnumerable SelectedAddons = new List(); protected override async Task OnInitializedAsync() { Game = Options.DataItem as Game; if (Game.Installed) SelectedDirectory = Settings.Games.InstallDirectories.FirstOrDefault(d => Game.InstallDirectory.StartsWith(d)); if (String.IsNullOrWhiteSpace(SelectedDirectory)) SelectedDirectory = Settings.Games.InstallDirectories.First(); RemoteGame = await Client.Games.GetAsync(Options.Key); Addons = (await Client.Games.GetAddonsAsync(Options.Key)).OrderByTitle(g => g.SortTitle ?? g.Title).ToList(); var localAddons = Game?.DependentGames.Where(g => g.Installed).Select(addon => addon.Id).ToArray() ?? []; SelectedAddons = Addons?.Where(addon => localAddons.Contains(addon.Id)).ToList() ?? []; } async Task Close() { await CloseFeedbackAsync(); } async Task Install() { var game = Options.DataItem as Game; InstallService.Add(game, SelectedDirectory, SelectedAddons.ToArray()); await CloseFeedbackAsync(); } string GetOperation() { if (!Game.Installed) return "Install"; if (Game.DependentGames.Any(g => g.Installed ^ SelectedAddons.Any(a => a.Id == g.Id))) return "Modify"; if (!Game.InstallDirectory.StartsWith(SelectedDirectory)) return "Move"; return string.Empty; } long GetDownloadSize() { long size = 0; if (RemoteGame != null && RemoteGame.Archives.Any()) { size += RemoteGame.Archives.OrderByDescending(a => a.CreatedOn).First().CompressedSize; size += SelectedAddons.Sum(a => a.Archives.OrderByDescending(arc => arc.CreatedOn).First().CompressedSize); } return size; } long GetSpaceRequired() { long size = 0; if (RemoteGame != null && RemoteGame.Archives.Any()) { size += RemoteGame.Archives.OrderByDescending(a => a.CreatedOn).First().UncompressedSize; size += SelectedAddons.Sum(a => a.Archives.OrderByDescending(arc => arc.CreatedOn).First().UncompressedSize); } return size; } long GetFreeSpace(string path) { var root = Path.GetPathRoot(path); var drive = new DriveInfo(path); return drive.AvailableFreeSpace; } }