diff --git a/Wabbajack.App.Wpf/Messages/LoadLastLoadedModlist.cs b/Wabbajack.App.Wpf/Messages/LoadLastLoadedModlist.cs new file mode 100644 index 00000000..5b2fcb42 --- /dev/null +++ b/Wabbajack.App.Wpf/Messages/LoadLastLoadedModlist.cs @@ -0,0 +1,12 @@ + +using ReactiveUI; + +namespace Wabbajack.Messages; + +public class LoadLastLoadedModlist +{ + public static void Send() + { + MessageBus.Current.SendMessage(new LoadLastLoadedModlist()); + } +} \ No newline at end of file diff --git a/Wabbajack.App.Wpf/View Models/Installers/InstallerVM.cs b/Wabbajack.App.Wpf/View Models/Installers/InstallerVM.cs index a8b110fe..89391738 100644 --- a/Wabbajack.App.Wpf/View Models/Installers/InstallerVM.cs +++ b/Wabbajack.App.Wpf/View Models/Installers/InstallerVM.cs @@ -24,6 +24,7 @@ using Wabbajack.Paths; using Wabbajack.RateLimiter; using Wabbajack.View_Models; using Wabbajack.Paths.IO; +using Wabbajack.Services.OSIntegrated; using Consts = Wabbajack.Consts; using KnownFolders = Wabbajack.Paths.IO.KnownFolders; @@ -36,6 +37,8 @@ public enum ModManager public class InstallerVM : BackNavigatingVM, IBackNavigatingVM { + private const string LastLoadedModlist = "last-loaded-modlist"; + [Reactive] public ModList ModList { get; set; } @@ -72,7 +75,8 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM private readonly ObservableAsPropertyHelper _installing; private readonly DTOSerializer _dtos; private readonly ILogger _logger; - + private readonly SettingsManager _settingsManager; + [Reactive] public bool Installing { get; set; } @@ -89,9 +93,10 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM public ReactiveCommand BackCommand { get; } - public InstallerVM(ILogger logger, DTOSerializer dtos) : base(logger) + public InstallerVM(ILogger logger, DTOSerializer dtos, SettingsManager settingsManager) : base(logger) { _logger = logger; + _settingsManager = settingsManager; _dtos = dtos; Installer = new MO2InstallerVM(this); @@ -119,6 +124,12 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM .Subscribe(msg => LoadModlist(msg.Path).FireAndForget()) .DisposeWith(CompositeDisposable); + MessageBus.Current.Listen() + .Subscribe(msg => + { + LoadLastModlist().FireAndForget(); + }); + this.WhenActivated(disposables => { ModListLocation.WhenAnyValue(l => l.TargetPath) @@ -129,6 +140,13 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM } + private async Task LoadLastModlist() + { + var lst = await _settingsManager.Load(LastLoadedModlist); + if (lst.FileExists()) + await LoadModlist(lst); + } + private async Task LoadModlist(AbsolutePath path) { using var ll = LoadingLock.WithLoading(); @@ -140,6 +158,7 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM PopulateSlideShow(ModList); ll.Succeed(); + await _settingsManager.Save(LastLoadedModlist, path); } catch (Exception ex) { @@ -148,7 +167,6 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM } } - private void PopulateSlideShow(ModList modList) { SlideShowTitle = modList.Name; diff --git a/Wabbajack.App.Wpf/View Models/ModeSelectionVM.cs b/Wabbajack.App.Wpf/View Models/ModeSelectionVM.cs index 71828c3f..98fee019 100644 --- a/Wabbajack.App.Wpf/View Models/ModeSelectionVM.cs +++ b/Wabbajack.App.Wpf/View Models/ModeSelectionVM.cs @@ -19,11 +19,16 @@ namespace Wabbajack public ICommand BrowseCommand { get; } public ICommand InstallCommand { get; } public ICommand CompileCommand { get; } + public ReactiveCommand UpdateCommand { get; } public ModeSelectionVM() { - InstallCommand = ReactiveCommand.Create(() => NavigateToGlobal.Send(NavigateToGlobal.ScreenType.Installer)); + InstallCommand = ReactiveCommand.Create(() => + { + LoadLastLoadedModlist.Send(); + NavigateToGlobal.Send(NavigateToGlobal.ScreenType.Installer); + }); CompileCommand = ReactiveCommand.Create(() => NavigateToGlobal.Send(NavigateToGlobal.ScreenType.Compiler)); BrowseCommand = ReactiveCommand.Create(() => NavigateToGlobal.Send(NavigateToGlobal.ScreenType.ModListGallery)); }