mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Implement pre-flight checks
This commit is contained in:
parent
6671fcb533
commit
905eca4ea7
@ -21,6 +21,7 @@ using Wabbajack.Compiler;
|
|||||||
using Wabbajack.DTOs;
|
using Wabbajack.DTOs;
|
||||||
using Wabbajack.DTOs.JsonConverters;
|
using Wabbajack.DTOs.JsonConverters;
|
||||||
using Wabbajack.Models;
|
using Wabbajack.Models;
|
||||||
|
using Wabbajack.Networking.WabbajackClientApi;
|
||||||
using Wabbajack.Paths;
|
using Wabbajack.Paths;
|
||||||
using Wabbajack.Paths.IO;
|
using Wabbajack.Paths.IO;
|
||||||
using Wabbajack.Services.OSIntegrated;
|
using Wabbajack.Services.OSIntegrated;
|
||||||
@ -45,6 +46,7 @@ namespace Wabbajack
|
|||||||
private readonly ILogger<CompilerVM> _logger;
|
private readonly ILogger<CompilerVM> _logger;
|
||||||
private readonly ResourceMonitor _resourceMonitor;
|
private readonly ResourceMonitor _resourceMonitor;
|
||||||
private readonly CompilerSettingsInferencer _inferencer;
|
private readonly CompilerSettingsInferencer _inferencer;
|
||||||
|
private readonly Client _wjClient;
|
||||||
|
|
||||||
[Reactive]
|
[Reactive]
|
||||||
public CompilerState State { get; set; }
|
public CompilerState State { get; set; }
|
||||||
@ -95,7 +97,7 @@ namespace Wabbajack
|
|||||||
|
|
||||||
public CompilerVM(ILogger<CompilerVM> logger, DTOSerializer dtos, SettingsManager settingsManager,
|
public CompilerVM(ILogger<CompilerVM> logger, DTOSerializer dtos, SettingsManager settingsManager,
|
||||||
IServiceProvider serviceProvider, LogStream loggerProvider, ResourceMonitor resourceMonitor,
|
IServiceProvider serviceProvider, LogStream loggerProvider, ResourceMonitor resourceMonitor,
|
||||||
CompilerSettingsInferencer inferencer) : base(logger)
|
CompilerSettingsInferencer inferencer, Client wjClient) : base(logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_dtos = dtos;
|
_dtos = dtos;
|
||||||
@ -104,6 +106,7 @@ namespace Wabbajack
|
|||||||
LoggerProvider = loggerProvider;
|
LoggerProvider = loggerProvider;
|
||||||
_resourceMonitor = resourceMonitor;
|
_resourceMonitor = resourceMonitor;
|
||||||
_inferencer = inferencer;
|
_inferencer = inferencer;
|
||||||
|
_wjClient = wjClient;
|
||||||
|
|
||||||
BackCommand =
|
BackCommand =
|
||||||
ReactiveCommand.CreateFromTask(async () =>
|
ReactiveCommand.CreateFromTask(async () =>
|
||||||
@ -207,6 +210,7 @@ namespace Wabbajack
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var token = CancellationToken.None;
|
||||||
State = CompilerState.Compiling;
|
State = CompilerState.Compiling;
|
||||||
|
|
||||||
var mo2Settings = new CompilerSettings
|
var mo2Settings = new CompilerSettings
|
||||||
@ -225,9 +229,15 @@ namespace Wabbajack
|
|||||||
UseGamePaths = true
|
UseGamePaths = true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (PublishUpdate && !await RunPreflightChecks(token))
|
||||||
|
{
|
||||||
|
State = CompilerState.Errored;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var compiler = MO2Compiler.Create(_serviceProvider, mo2Settings);
|
var compiler = MO2Compiler.Create(_serviceProvider, mo2Settings);
|
||||||
|
|
||||||
await compiler.Begin(CancellationToken.None);
|
await compiler.Begin(token);
|
||||||
|
|
||||||
State = CompilerState.Completed;
|
State = CompilerState.Completed;
|
||||||
}
|
}
|
||||||
@ -241,6 +251,17 @@ namespace Wabbajack
|
|||||||
await tsk;
|
await tsk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<bool> RunPreflightChecks(CancellationToken token)
|
||||||
|
{
|
||||||
|
var lists = await _wjClient.GetMyModlists(token);
|
||||||
|
if (!lists.Any(x => x.Equals(MachineUrl, StringComparison.InvariantCultureIgnoreCase)))
|
||||||
|
{
|
||||||
|
_logger.LogError("Preflight Check failed, list {MachineUrl} not found in any repository", MachineUrl);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task SaveSettingsFile()
|
private async Task SaveSettingsFile()
|
||||||
{
|
{
|
||||||
if (Source == default) return;
|
if (Source == default) return;
|
||||||
|
@ -34,8 +34,8 @@ namespace Wabbajack
|
|||||||
.DisposeWith(disposables);
|
.DisposeWith(disposables);
|
||||||
|
|
||||||
ViewModel.WhenAny(vm => vm.State)
|
ViewModel.WhenAny(vm => vm.State)
|
||||||
.Select(x => x == CompilerState.Errored)
|
.Select(x => x is CompilerState.Errored or CompilerState.Completed)
|
||||||
.Select(failed => $"Installation {(failed ? "Failed" : "Complete")}")
|
.Select(failed => $"Compilation {(failed ? "Failed" : "Complete")}")
|
||||||
.BindToStrict(this, x => x.CompilationComplete.TitleText.Text)
|
.BindToStrict(this, x => x.CompilationComplete.TitleText.Text)
|
||||||
.DisposeWith(disposables);
|
.DisposeWith(disposables);
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ namespace Wabbajack
|
|||||||
.DisposeWith(disposables);
|
.DisposeWith(disposables);
|
||||||
|
|
||||||
ViewModel.WhenAnyValue(vm => vm.State)
|
ViewModel.WhenAnyValue(vm => vm.State)
|
||||||
.Select(v => v == CompilerState.Completed ? Visibility.Visible : Visibility.Collapsed)
|
.Select(v => v is CompilerState.Completed or CompilerState.Errored ? Visibility.Visible : Visibility.Collapsed)
|
||||||
.BindToStrict(this, view => view.CompilationComplete.Visibility)
|
.BindToStrict(this, view => view.CompilationComplete.Visibility)
|
||||||
.DisposeWith(disposables);
|
.DisposeWith(disposables);
|
||||||
|
|
||||||
|
@ -456,4 +456,12 @@ public class Client
|
|||||||
HttpException.ThrowOnFailure(response);
|
HttpException.ThrowOnFailure(response);
|
||||||
return await _dtos.DeserializeAsync<IndexedVirtualFile>(await response.Content.ReadAsStreamAsync(token), token);
|
return await _dtos.DeserializeAsync<IndexedVirtualFile>(await response.Content.ReadAsStreamAsync(token), token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<IReadOnlyList<string>> GetMyModlists(CancellationToken token)
|
||||||
|
{
|
||||||
|
var msg = await MakeMessage(HttpMethod.Get, new Uri($"{_configuration.BuildServerUrl}author_controls/lists"));
|
||||||
|
using var response = await _client.SendAsync(msg, token);
|
||||||
|
HttpException.ThrowOnFailure(response);
|
||||||
|
return (await _dtos.DeserializeAsync<string[]>(await response.Content.ReadAsStreamAsync(token), token))!;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user