using ModpackUpdater.Apps.Manager.Api.Plugins.Params; using ModpackUpdater.Apps.Manager.LangRes; using Pilz.Plugins.Advanced; using Pilz.UI.Extensions; using Pilz.UI.Symbols; namespace ModpackUpdater.Apps.Manager.Features.Tools; internal class UpdatesCollectorFeature : PluginFunction, IPluginFeatureProvider { public static UpdatesCollectorFeature Instance { get; } = new(); public UpdatesCollectorFeature() : base(FeatureTypes.Tools, "origin.updatescollector", FeatureNamesLangRes.UpdatesCollectorFeature) { Icon = AppGlobals.Symbols.GetSvgImage(AppSymbols.search, SymbolSize.Small); } protected override object? ExecuteFunction(PluginFunctionParameter? @params) { if (@params is not MainApiParameters p || p.Api.CurWorkspace?.InstallInfos is null || p.Api.CurWorkspace.UpdateInfos is null) return null; // Collect updates var ucDialog = new UpdatesCollectorUi(p.Api.CurWorkspace.InstallInfos); if (!ucDialog.ShowDialog(p.Api.MainWindow).IsOk() || ucDialog.CurrentUpdates is null) return null; // Collect versions with changes var updates = new List(); foreach (var update in ucDialog.CurrentUpdates.List) { if (update.Origin.SourceTag != update.AvailableVersions[update.NewVersion].Value) updates.Add(update); } // Path install actions foreach (var update in updates) { update.Origin.SourceTag = update.AvailableVersions[update.NewVersion].Value; p.Api.UpdateItem(update.Origin); } // Create update actions var updateSet = new UpdateInfo(); foreach (var update in updates) { updateSet.Actions.Add(new() { InheritFrom = update.Origin.Id, }); } p.Api.CurWorkspace.UpdateInfos.Updates.Insert(0, updateSet); p.Api.UpdateItem(updateSet); return null; } }