Save the last install path, and load it next time we open the app

This commit is contained in:
Timothy Baldridge 2021-12-30 17:18:20 -07:00
parent 7faa65ca77
commit de21eebe14
3 changed files with 39 additions and 4 deletions

View File

@ -0,0 +1,12 @@
using ReactiveUI;
namespace Wabbajack.Messages;
public class LoadLastLoadedModlist
{
public static void Send()
{
MessageBus.Current.SendMessage(new LoadLastLoadedModlist());
}
}

View File

@ -24,6 +24,7 @@ using Wabbajack.Paths;
using Wabbajack.RateLimiter; using Wabbajack.RateLimiter;
using Wabbajack.View_Models; using Wabbajack.View_Models;
using Wabbajack.Paths.IO; using Wabbajack.Paths.IO;
using Wabbajack.Services.OSIntegrated;
using Consts = Wabbajack.Consts; using Consts = Wabbajack.Consts;
using KnownFolders = Wabbajack.Paths.IO.KnownFolders; using KnownFolders = Wabbajack.Paths.IO.KnownFolders;
@ -36,6 +37,8 @@ public enum ModManager
public class InstallerVM : BackNavigatingVM, IBackNavigatingVM public class InstallerVM : BackNavigatingVM, IBackNavigatingVM
{ {
private const string LastLoadedModlist = "last-loaded-modlist";
[Reactive] [Reactive]
public ModList ModList { get; set; } public ModList ModList { get; set; }
@ -72,7 +75,8 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM
private readonly ObservableAsPropertyHelper<bool> _installing; private readonly ObservableAsPropertyHelper<bool> _installing;
private readonly DTOSerializer _dtos; private readonly DTOSerializer _dtos;
private readonly ILogger<InstallerVM> _logger; private readonly ILogger<InstallerVM> _logger;
private readonly SettingsManager _settingsManager;
[Reactive] [Reactive]
public bool Installing { get; set; } public bool Installing { get; set; }
@ -89,9 +93,10 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM
public ReactiveCommand<Unit, Unit> BackCommand { get; } public ReactiveCommand<Unit, Unit> BackCommand { get; }
public InstallerVM(ILogger<InstallerVM> logger, DTOSerializer dtos) : base(logger) public InstallerVM(ILogger<InstallerVM> logger, DTOSerializer dtos, SettingsManager settingsManager) : base(logger)
{ {
_logger = logger; _logger = logger;
_settingsManager = settingsManager;
_dtos = dtos; _dtos = dtos;
Installer = new MO2InstallerVM(this); Installer = new MO2InstallerVM(this);
@ -119,6 +124,12 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM
.Subscribe(msg => LoadModlist(msg.Path).FireAndForget()) .Subscribe(msg => LoadModlist(msg.Path).FireAndForget())
.DisposeWith(CompositeDisposable); .DisposeWith(CompositeDisposable);
MessageBus.Current.Listen<LoadLastLoadedModlist>()
.Subscribe(msg =>
{
LoadLastModlist().FireAndForget();
});
this.WhenActivated(disposables => this.WhenActivated(disposables =>
{ {
ModListLocation.WhenAnyValue(l => l.TargetPath) ModListLocation.WhenAnyValue(l => l.TargetPath)
@ -129,6 +140,13 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM
} }
private async Task LoadLastModlist()
{
var lst = await _settingsManager.Load<AbsolutePath>(LastLoadedModlist);
if (lst.FileExists())
await LoadModlist(lst);
}
private async Task LoadModlist(AbsolutePath path) private async Task LoadModlist(AbsolutePath path)
{ {
using var ll = LoadingLock.WithLoading(); using var ll = LoadingLock.WithLoading();
@ -140,6 +158,7 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM
PopulateSlideShow(ModList); PopulateSlideShow(ModList);
ll.Succeed(); ll.Succeed();
await _settingsManager.Save(LastLoadedModlist, path);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -148,7 +167,6 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM
} }
} }
private void PopulateSlideShow(ModList modList) private void PopulateSlideShow(ModList modList)
{ {
SlideShowTitle = modList.Name; SlideShowTitle = modList.Name;

View File

@ -19,11 +19,16 @@ namespace Wabbajack
public ICommand BrowseCommand { get; } public ICommand BrowseCommand { get; }
public ICommand InstallCommand { get; } public ICommand InstallCommand { get; }
public ICommand CompileCommand { get; } public ICommand CompileCommand { get; }
public ReactiveCommand<Unit, Unit> UpdateCommand { get; } public ReactiveCommand<Unit, Unit> UpdateCommand { get; }
public ModeSelectionVM() 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)); CompileCommand = ReactiveCommand.Create(() => NavigateToGlobal.Send(NavigateToGlobal.ScreenType.Compiler));
BrowseCommand = ReactiveCommand.Create(() => NavigateToGlobal.Send(NavigateToGlobal.ScreenType.ModListGallery)); BrowseCommand = ReactiveCommand.Create(() => NavigateToGlobal.Send(NavigateToGlobal.ScreenType.ModListGallery));
} }