Fix some wiring on the launcher page

This commit is contained in:
Timothy Baldridge 2021-09-30 06:23:43 -06:00
parent 6bc1662399
commit f7a9be2d7e
5 changed files with 45 additions and 8 deletions

View File

@ -3,9 +3,9 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Wabbajack.App.Screens.LauncherScreen">
x:Class="Wabbajack.App.Screens.LauncherView">
<Grid RowDefinitions="40, *, Auto">
<TextBlock Grid.Row="0" x:Name="StatusText" FontSize="20" FontWeight="Bold">[20/30] Installing Files</TextBlock>
<TextBlock Grid.Row="0" x:Name="StatusText" FontSize="20" FontWeight="Bold"></TextBlock>
<Viewbox Grid.Row="1" HorizontalAlignment="Center"
VerticalAlignment="Center"
Stretch="Uniform">

View File

@ -7,15 +7,17 @@ using Wabbajack.App.Views;
namespace Wabbajack.App.Screens
{
public partial class LauncherScreen : ScreenBase<LauncherViewModel>
public partial class LauncherView : ScreenBase<LauncherViewModel>
{
public LauncherScreen()
public LauncherView()
{
InitializeComponent();
this.WhenActivated(disposables =>
{
this.OneWayBind(ViewModel, vm => vm.Image, view => view.SlideImage.Source)
.DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.Title, view => view.StatusText.Text)
.DisposeWith(disposables);
});
}

View File

@ -23,6 +23,9 @@ namespace Wabbajack.App.Screens
[Reactive]
public InstallationConfigurationSetting? Setting { get; set; }
[Reactive]
public string Title { get; set; }
public LauncherViewModel(InstallationStateManager manager)
{
Activator = new ViewModelActivator();
@ -31,6 +34,7 @@ namespace Wabbajack.App.Screens
{
this.WhenAnyValue(v => v.InstallFolder)
.SelectAsync(disposables, async folder => await manager.GetByInstallFolder(folder))
.ObserveOn(RxApp.MainThreadScheduler)
.Where(v => v != null)
.BindTo(this, vm => vm.Setting)
.DisposeWith(disposables);
@ -40,7 +44,13 @@ namespace Wabbajack.App.Screens
.Select(v => new Bitmap((v!.Image).ToString()))
.BindTo(this, vm => vm.Image)
.DisposeWith(disposables);
this.WhenAnyValue(v => v.Setting)
.Where(v => v is { Metadata: { } })
.Select(v => $"{v!.Metadata!.Title} v{v!.Metadata.Version}")
.BindTo(this, vm => vm.Title)
.DisposeWith(disposables);
});
}

View File

@ -46,6 +46,8 @@ namespace Wabbajack.App
services.AddSingleton<IScreenView, StandardInstallationView>();
services.AddSingleton<IScreenView, SettingsView>();
services.AddSingleton<IScreenView, BrowseView>();
services.AddSingleton<IScreenView, LauncherView>();
services.AddSingleton<InstallationStateManager>();
services.AddSingleton<HttpClient>();
@ -56,6 +58,7 @@ namespace Wabbajack.App
services.AddAllSingleton<IReceiverMarker, NexusLoginViewModel>();
services.AddAllSingleton<IReceiverMarker, LoversLabOAuthLoginViewModel>();
services.AddAllSingleton<IReceiverMarker, VectorPlexusOAuthLoginViewModel>();
services.AddAllSingleton<IReceiverMarker, LauncherViewModel>();
// Services
services.AddAllSingleton<IDownloader, IDownloader<Manual>, ManualDownloader>();

View File

@ -14,9 +14,11 @@ using ReactiveUI.Fody.Helpers;
using ReactiveUI.Validation.Helpers;
using Wabbajack.App.Interfaces;
using Wabbajack.App.Messages;
using Wabbajack.App.Models;
using Wabbajack.App.Screens;
using Wabbajack.App.Views;
using Wabbajack.Common;
using Wabbajack.Paths.IO;
using Wabbajack.RateLimiter;
namespace Wabbajack.App.ViewModels
@ -28,6 +30,7 @@ namespace Wabbajack.App.ViewModels
private readonly IResource[] _resources;
private StatusReport[] _prevReport;
private readonly Task _resourcePoller;
private readonly InstallationStateManager _manager;
[Reactive]
public Control CurrentScreen { get; set; }
@ -44,11 +47,13 @@ namespace Wabbajack.App.ViewModels
[Reactive]
public string ResourceStatus { get; set; }
public MainWindowViewModel(IEnumerable<IScreenView> screens, IEnumerable<IResource> resources, IServiceProvider provider)
public MainWindowViewModel(IEnumerable<IScreenView> screens, IEnumerable<IResource> resources, IServiceProvider provider,
InstallationStateManager manager)
{
_provider = provider;
_screens = screens;
_resources = resources.ToArray();
_manager = manager;
_prevReport = NextReport();
@ -73,9 +78,26 @@ namespace Wabbajack.App.ViewModels
.DisposeWith(disposables);
});
Receive(new NavigateTo(typeof(ModeSelectionViewModel)));
LoadFirstScreen().FireAndForget();
}
private async Task LoadFirstScreen()
{
var setting = await _manager.GetLastState();
if (setting.Install != default && setting.Install.DirectoryExists())
{
BreadCrumbs =
BreadCrumbs.Push((Control)_screens.First(s => s.ViewModelType == typeof(ModeSelectionViewModel)));
MessageBus.Instance.Send(new ConfigureLauncher(setting.Install));
Receive(new NavigateTo(typeof(LauncherViewModel)));
}
else
{
Receive(new NavigateTo(typeof(ModeSelectionViewModel)));
}
}
private StatusReport[] NextReport()