Install WebView2 after updating Wabbajack

This commit is contained in:
erri120
2022-11-06 12:33:52 +01:00
parent 3eb6b8c20b
commit 8475f61585
2 changed files with 63 additions and 17 deletions

View File

@ -9,8 +9,10 @@ using System.Text.Json;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations;
using MessageBox.Avalonia.DTO; using MessageBox.Avalonia.DTO;
using ReactiveUI.Fody.Helpers; using ReactiveUI.Fody.Helpers;
using Wabbajack.Common;
using Wabbajack.Compression.Zip; using Wabbajack.Compression.Zip;
using Wabbajack.Downloaders.Http; using Wabbajack.Downloaders.Http;
using Wabbajack.DTOs; using Wabbajack.DTOs;
@ -122,7 +124,7 @@ public class MainWindowViewModel : ViewModelBase
var wc = new WebClient(); var wc = new WebClient();
wc.DownloadProgressChanged += UpdateProgress; wc.DownloadProgressChanged += (sender, args) => UpdateProgress($"{_version.Version}", sender, args);
Status = $"Downloading {_version.Version} ..."; Status = $"Downloading {_version.Version} ...";
byte[] data; byte[] data;
try try
@ -166,10 +168,52 @@ public class MainWindowViewModel : ViewModelBase
{ {
_errors.Add(ex.Message); _errors.Add(ex.Message);
} }
finally
try
{ {
await InstallWebView();
}
catch (Exception e)
{
_errors.Add(e.Message);
}
await FinishAndExit(); await FinishAndExit();
} }
[UriString]
private const string WebViewDownloadLink = "https://go.microsoft.com/fwlink/p/?LinkId=2124703";
private async Task InstallWebView(CancellationToken cancellationToken = default)
{
var setupPath = KnownFolders.WabbajackAppLocal.Combine("MicrosoftEdgeWebview2Setup.exe");
if (setupPath.FileExists()) return;
var wc = new WebClient();
wc.DownloadProgressChanged += (sender, args) => UpdateProgress("WebView2", sender, args);
Status = "Downloading WebView2 Runtime";
byte[] data;
try
{
data = await wc.DownloadDataTaskAsync(WebViewDownloadLink);
}
catch (Exception ex)
{
_errors.Add(ex.Message);
await FinishAndExit();
throw;
}
await setupPath.WriteAllBytesAsync(new Memory<byte>(data), cancellationToken);
var process = new ProcessHelper
{
Path = setupPath
};
await process.Start();
} }
private async Task VerifyCurrentLocation() private async Task VerifyCurrentLocation()
@ -211,6 +255,7 @@ public class MainWindowViewModel : ViewModelBase
} }
} }
[ContractAnnotation("=> halt")]
private async Task FinishAndExit() private async Task FinishAndExit()
{ {
try try
@ -275,9 +320,9 @@ public class MainWindowViewModel : ViewModelBase
} }
} }
private void UpdateProgress(object sender, DownloadProgressChangedEventArgs e) private void UpdateProgress(string what, object sender, DownloadProgressChangedEventArgs e)
{ {
Status = $"Downloading {_version.Version} ({e.ProgressPercentage}%)..."; Status = $"Downloading {what} ({e.ProgressPercentage}%)...";
} }
private async Task<(Version Version, long Size, Func<Task<Uri>> Uri)> GetGithubRelease(CancellationToken token) private async Task<(Version Version, long Size, Func<Task<Uri>> Uri)> GetGithubRelease(CancellationToken token)

View File

@ -27,6 +27,7 @@
<PackageReference Include="Avalonia.Desktop" Version="11.0.0-preview3" /> <PackageReference Include="Avalonia.Desktop" Version="11.0.0-preview3" />
<PackageReference Include="Avalonia.Diagnostics" Version="11.0.0-preview3" /> <PackageReference Include="Avalonia.Diagnostics" Version="11.0.0-preview3" />
<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.0-preview3" /> <PackageReference Include="Avalonia.ReactiveUI" Version="11.0.0-preview3" />
<PackageReference Include="JetBrains.Annotations" Version="2022.1.0" />
<PackageReference Include="MessageBox.Avalonia" Version="2.3.1-prev2" /> <PackageReference Include="MessageBox.Avalonia" Version="2.3.1-prev2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.0-rc.2.22472.3" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.0-rc.2.22472.3" />
<PackageReference Include="ReactiveUI.Fody" Version="18.3.1" /> <PackageReference Include="ReactiveUI.Fody" Version="18.3.1" />