using Avalonia.Controls; using Avalonia.Interactivity; using DynamicData; using ModpackUpdater.Apps.Manager.Api.Model; using ModpackUpdater.Apps.Manager.Ui.Models.UpdatesCollectorViewMode; using ModpackUpdater.Manager; using Pilz.UI.AvaloniaUI.Dialogs; namespace ModpackUpdater.Apps.Manager.Ui; public partial class UpdatesCollectorView : AvaloniaFlyoutBase { private readonly IWorkspace workspace; private readonly ModpackFactory factory = new(); private readonly InstallAction[] actions; public UpdatesCollectorViewModel Model { get; } = new(); public UpdatesCollectorView(IWorkspace workspace, params InstallAction[] actions) { this.workspace = workspace; this.actions = actions; DataContext = Model; InitializeComponent(); } private async Task FindUpdates() { Model.Progress.Start(actions.Length); foreach (var action in actions) { var updates = await factory.FindUpdates(action, workspace.ModpackConfig?.MinecraftVersion, workspace.ModpackConfig?.ModLoader ?? ModLoader.Any); Model.Progress.Increment(); if (updates == null || updates.Length == 0 || updates[0].Tag == action.SourceTag) continue; Model.Updates.List.Add(new(updates, action)); if (IsClosed) break; } Model.Progress.Stop(); } protected override object GetResult() { return new ModUpdates([.. Model.Updates.List.Items]); } private async void Me_OnLoaded(object? sender, RoutedEventArgs e) { await FindUpdates(); } private void ButtonRemoveUpdate_Click(object? sender, RoutedEventArgs e) { if (sender is Button button && button.DataContext is ModUpdateInfo update) Model.Updates.List.Remove(update); } }