From e584f12c992a4543a8579f106661fb61c71a3da3 Mon Sep 17 00:00:00 2001 From: Yoshi Askharoun Date: Tue, 21 May 2024 21:04:37 -0500 Subject: [PATCH] Use mod factories to lazy-load mods --- ZuneModdingHelper/Pages/ModsPage.xaml | 2 +- ZuneModdingHelper/Pages/ModsPage.xaml.cs | 25 ++++++++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/ZuneModdingHelper/Pages/ModsPage.xaml b/ZuneModdingHelper/Pages/ModsPage.xaml index 9fa7e8e..b1db6e1 100644 --- a/ZuneModdingHelper/Pages/ModsPage.xaml +++ b/ZuneModdingHelper/Pages/ModsPage.xaml @@ -14,7 +14,7 @@ x:Name="ModList" HorizontalContentAlignment="Stretch" BorderThickness="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" d:ItemsSource="{d:SampleData ItemCount=5}"> - + diff --git a/ZuneModdingHelper/Pages/ModsPage.xaml.cs b/ZuneModdingHelper/Pages/ModsPage.xaml.cs index c821af2..30804c7 100644 --- a/ZuneModdingHelper/Pages/ModsPage.xaml.cs +++ b/ZuneModdingHelper/Pages/ModsPage.xaml.cs @@ -1,4 +1,5 @@ -using CommunityToolkit.Mvvm.Messaging; +using CommunityToolkit.Mvvm.DependencyInjection; +using CommunityToolkit.Mvvm.Messaging; using OwlCore.AbstractUI.Models; using OwlCore.ComponentModel; using System.Windows; @@ -23,15 +24,15 @@ namespace ZuneModdingHelper.Pages _modConfig = modConfig; InitializeComponent(); - ModList.ItemsSource = ModManager.GetAvailableMods(); + ModList.ItemsSource = ModManager.ModFactories; } private async void ApplyButton_Click(object sender, RoutedEventArgs e) { - if (!TryGetModFromControl(sender, out var mod)) + if (!TryGetModFromControl(sender, out var modFactory)) return; - var modTitle = mod.Metadata.Title; + var modTitle = modFactory.Metadata.Title; ProgressDialogViewModel progDialog = new() { Title = MOD_MANAGER_TITLE, @@ -42,9 +43,9 @@ namespace ZuneModdingHelper.Pages }; WeakReferenceMessenger.Default.Send(new ShowDialogMessage(progDialog)); - mod.ZuneInstallDir = _modConfig.ZuneInstallDir; - // Stage 0: Initialize mod + var mod = modFactory.Create(Ioc.Default); + mod.ZuneInstallDir = _modConfig.ZuneInstallDir; if (mod is IAsyncInit initMod) await initMod.InitAsync(); ++progDialog.Progress; @@ -93,10 +94,10 @@ namespace ZuneModdingHelper.Pages private async void ResetButton_Click(object sender, RoutedEventArgs e) { - if (!TryGetModFromControl(sender, out var mod)) + if (!TryGetModFromControl(sender, out var modFactory)) return; - var modTitle = mod.Metadata.Title; + var modTitle = modFactory.Metadata.Title; ProgressDialogViewModel progDialog = new() { Title = MOD_MANAGER_TITLE, @@ -107,8 +108,8 @@ namespace ZuneModdingHelper.Pages }; WeakReferenceMessenger.Default.Send(new ShowDialogMessage(progDialog)); + var mod = modFactory.Create(Ioc.Default); mod.ZuneInstallDir = _modConfig.ZuneInstallDir; - if (mod is IAsyncInit initMod) await initMod.InitAsync(); ++progDialog.Progress; @@ -147,10 +148,10 @@ namespace ZuneModdingHelper.Pages })); } - private static bool TryGetModFromControl(object sender, out Mod mod) + private static bool TryGetModFromControl(object sender, out IModFactory modFactory) { - mod = (sender as FrameworkElement)?.DataContext as Mod; - return mod is not null; + modFactory = (sender as FrameworkElement)?.DataContext as IModFactory; + return modFactory is not null; } } }