Merge pull request #2179 from wabbajack-tools/install-webview

Install WebView2 after updating Wabbajack
This commit is contained in:
Timothy Baldridge 2022-11-11 22:29:00 -07:00 committed by GitHub
commit e130f381c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 65 additions and 22 deletions

View File

@ -24,7 +24,6 @@ using Wabbajack.Paths.IO;
using Wabbajack.Services.OSIntegrated;
using Wabbajack.UserIntervention;
using Wabbajack.Util;
using WebView2.Runtime.AutoInstaller;
using Ext = Wabbajack.Common.Ext;
namespace Wabbajack
@ -51,8 +50,6 @@ namespace Wabbajack
}
}
WebView2AutoInstaller.CheckAndInstallAsync(false, false).Wait();
RxApp.MainThreadScheduler = new DispatcherScheduler(Dispatcher.CurrentDispatcher);
_host = Host.CreateDefaultBuilder(Array.Empty<string>())
.ConfigureLogging(AddLogging)

View File

@ -100,7 +100,6 @@
<PackageReference Include="ReactiveUI.WPF" Version="18.3.1" />
<PackageReference Include="Silk.NET.DXGI" Version="2.16.0" />
<PackageReference Include="System.Reactive" Version="5.0.0" />
<PackageReference Include="WebView2.Runtime.AutoInstaller" Version="1.0.0" />
<PackageReference Include="WPFThemes.DarkBlend" Version="1.0.8" />
</ItemGroup>
@ -120,7 +119,7 @@
<EmbeddedResource Include="LoginManagers\Icons\lovers_lab.png" />
<None Remove="LoginManagers\Icons\vector_plexus.png" />
<EmbeddedResource Include="LoginManagers\Icons\vector_plexus.png" />
</ItemGroup>
<ItemGroup>

View File

@ -9,8 +9,10 @@ using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using MessageBox.Avalonia.DTO;
using ReactiveUI.Fody.Helpers;
using Wabbajack.Common;
using Wabbajack.Compression.Zip;
using Wabbajack.Downloaders.Http;
using Wabbajack.DTOs;
@ -49,7 +51,7 @@ public class MainWindowViewModel : ViewModelBase
private async Task CheckForUpdates()
{
await VerifyCurrentLocation();
_client.Headers.Add("user-agent", "Wabbajack Launcher");
Status = "Selecting Release";
@ -103,7 +105,7 @@ public class MainWindowViewModel : ViewModelBase
Size = _version.Size,
State = new Http {Url = uri}
};
await using var stream = await _downloader.GetChunkedSeekableStream(archive, CancellationToken.None);
var rdr = new ZipReader(stream, true);
var entries = (await rdr.GetFiles()).OrderBy(d => d.FileOffset).ToArray();
@ -115,14 +117,14 @@ public class MainWindowViewModel : ViewModelBase
var outPath = baseFolder.Combine(relPath);
if (!outPath.Parent.DirectoryExists())
outPath.Parent.CreateDirectory();
await using var of = outPath.Open(FileMode.Create, FileAccess.Write, FileShare.None);
await rdr.Extract(file, of, CancellationToken.None);
}*/
var wc = new WebClient();
wc.DownloadProgressChanged += UpdateProgress;
wc.DownloadProgressChanged += (sender, args) => UpdateProgress($"{_version.Version}", sender, args);
Status = $"Downloading {_version.Version} ...";
byte[] data;
try
@ -166,10 +168,53 @@ public class MainWindowViewModel : ViewModelBase
{
_errors.Add(ex.Message);
}
finally
try
{
await FinishAndExit();
await InstallWebView();
}
catch (Exception e)
{
_errors.Add(e.Message);
}
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,
Arguments = new []{"/silent /install"}
};
await process.Start();
}
private async Task VerifyCurrentLocation()
@ -211,6 +256,7 @@ public class MainWindowViewModel : ViewModelBase
}
}
[ContractAnnotation("=> halt")]
private async Task FinishAndExit()
{
try
@ -275,16 +321,16 @@ 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)
{
var releases = await GetGithubReleases();
var version = releases.Select(r =>
{
if (r.Tag.Split(".").Length == 4 && Version.TryParse(r.Tag, out var v))
@ -293,7 +339,7 @@ public class MainWindowViewModel : ViewModelBase
})
.OrderByDescending(r => r.Item1)
.FirstOrDefault();
var asset = version.r.Assets.FirstOrDefault(a => a.Name == version.Item1 + ".zip");
if (asset == null)
{
@ -303,7 +349,7 @@ public class MainWindowViewModel : ViewModelBase
return (version.Item1, asset.Size, async () => asset!.BrowserDownloadUrl);
}
private async Task<Release[]> GetGithubReleases()
{
Status = "Checking GitHub Repository";
@ -311,13 +357,13 @@ public class MainWindowViewModel : ViewModelBase
Status = "Parsing Response";
return JsonSerializer.Deserialize<Release[]>(data)!;
}
private async Task<(Version Version, long Size, Func<Task<Uri>> uri)> GetNexusReleases(CancellationToken token)
{
Status = "Checking Nexus for updates";
if (!await _nexusApi.IsPremium(token))
return default;
var data = await _nexusApi.ModFiles("site", 403, token);
Status = "Parsing Response";
//return JsonSerializer.Deserialize<Release[]>(data)!;
@ -351,7 +397,7 @@ public class MainWindowViewModel : ViewModelBase
[JsonPropertyName("name")] public string Name { get; set; }
[JsonPropertyName("size")] public long Size { get; set; }
}
}
}

View File

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