diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 05a2264f..d114fb6b 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -7,7 +7,7 @@ on: branches: [ main ] env: - VERSION: 3.0.6.2 + VERSION: 3.4.1.0 jobs: build: @@ -71,6 +71,7 @@ jobs: - Wabbajack.Compiler - Wabbajack.Compression.BSA - Wabbajack.Compression.Zip + - Wabbajack.Configuration - Wabbajack.Downloaders.Bethesda - Wabbajack.Downloaders.Dispatcher - Wabbajack.Downloaders.GameFile @@ -109,10 +110,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Setup .NET Core SDK 6.0.x + - name: Setup .NET Core SDK 8.0.x uses: actions/setup-dotnet@v1 with: - dotnet-version: '7.0.x' + dotnet-version: '8.0.x' include-prerelease: true - name: Restore diff --git a/CHANGELOG.md b/CHANGELOG.md index 623fa999..9d1e4b92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ ### Changelog -#### Version - 3.3.1.0 - TBA +#### Version - 3.4.1.0 - 12/21/2023 +* Added Support for Final Fantasy 7: Remake Intergrade +* Update CLI to .NET 8.0 (was missed in the last update) +* Added Support for Baldur's Gate 3 + * Very Work in Progress + * **NOT** Plug and Play for compiling and installing! + +#### Version - 3.4.0.0 - 11/19/2023 * Fixed `--outputPath` not being used for the CLI `compile` (thanks to @majcosta for fixing that) * Improved Log message for cases where low storage on the drive Wabbajack is installed on causes compiles to fail * **To list authors still compiling on Wabbajack 3.0.5.0:** @@ -11,6 +18,8 @@ * Updated Dependencies * LZ4 to version 1.3.7-beta * SharpZipLib to version 1.4.2 +* Fully upgraded to .NET 8.0 +* Fixed the WebView2 based browser window to no longer crash the application when closed #### Version - 3.3.0.1 - (Was only a Pre-Release) * Fixed Manual Downloading on NexusMods being blocked by a hidden cookie consent banner diff --git a/Wabbajack.App.Wpf/UserIntervention/ManualDownloadHandler.cs b/Wabbajack.App.Wpf/UserIntervention/ManualDownloadHandler.cs index 8ed363ce..2c21a320 100644 --- a/Wabbajack.App.Wpf/UserIntervention/ManualDownloadHandler.cs +++ b/Wabbajack.App.Wpf/UserIntervention/ManualDownloadHandler.cs @@ -27,5 +27,6 @@ public class ManualDownloadHandler : BrowserWindowViewModel var uri = await task; Intervention.Finish(uri); + await Task.Delay(5000, CancellationToken.None); } } \ No newline at end of file diff --git a/Wabbajack.App.Wpf/View Models/BrowserWindowViewModel.cs b/Wabbajack.App.Wpf/View Models/BrowserWindowViewModel.cs index d0aa4a4c..5daee154 100644 --- a/Wabbajack.App.Wpf/View Models/BrowserWindowViewModel.cs +++ b/Wabbajack.App.Wpf/View Models/BrowserWindowViewModel.cs @@ -120,20 +120,27 @@ public abstract class BrowserWindowViewModel : ViewModel while (_browser.CoreWebView2 == null) await Task.Delay(10, token); - _browser.CoreWebView2.DownloadStarting += (sender, args) => + EventHandler handler = null!; + + handler = (_, args) => { try { source.SetResult(new Uri(args.DownloadOperation.Uri)); + _browser.CoreWebView2.DownloadStarting -= handler; } catch (Exception) { - source.SetCanceled(); + source.SetCanceled(token); + _browser.CoreWebView2.DownloadStarting -= handler; } args.Cancel = true; args.Handled = true; }; + + _browser.CoreWebView2.DownloadStarting += handler; + Uri uri; while (true) @@ -184,7 +191,7 @@ public abstract class BrowserWindowViewModel : ViewModel catch (Exception) { source.SetCanceled(); - } + } }; await source.Task; diff --git a/Wabbajack.App.Wpf/Views/BrowserView.xaml.cs b/Wabbajack.App.Wpf/Views/BrowserView.xaml.cs index 3a88cb24..52a68d52 100644 --- a/Wabbajack.App.Wpf/Views/BrowserView.xaml.cs +++ b/Wabbajack.App.Wpf/Views/BrowserView.xaml.cs @@ -1,4 +1,6 @@ +using System; using System.Windows.Controls; +using Microsoft.Web.WebView2.WinForms; using ReactiveUI; namespace Wabbajack.Views; diff --git a/Wabbajack.App.Wpf/Views/BrowserWindow.xaml.cs b/Wabbajack.App.Wpf/Views/BrowserWindow.xaml.cs index 267de3b9..175de016 100644 --- a/Wabbajack.App.Wpf/Views/BrowserWindow.xaml.cs +++ b/Wabbajack.App.Wpf/Views/BrowserWindow.xaml.cs @@ -2,6 +2,7 @@ using System; using System.Reactive.Disposables; using System.Reactive.Linq; using System.Threading; +using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using MahApps.Metro.Controls; @@ -57,7 +58,6 @@ public partial class BrowserWindow : MetroWindow .ContinueWith(_ => Dispatcher.Invoke(() => { Close(); - Browser.Dispose(); Browser = null; })); } diff --git a/Wabbajack.App.Wpf/Wabbajack.App.Wpf.csproj b/Wabbajack.App.Wpf/Wabbajack.App.Wpf.csproj index 7c708116..c926c24a 100644 --- a/Wabbajack.App.Wpf/Wabbajack.App.Wpf.csproj +++ b/Wabbajack.App.Wpf/Wabbajack.App.Wpf.csproj @@ -74,8 +74,8 @@ - - + + NU1701 @@ -84,22 +84,22 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + - - - - + + + + - + diff --git a/Wabbajack.CLI.Builder/Wabbajack.CLI.Builder.csproj b/Wabbajack.CLI.Builder/Wabbajack.CLI.Builder.csproj index 2e823132..cc83b43a 100644 --- a/Wabbajack.CLI.Builder/Wabbajack.CLI.Builder.csproj +++ b/Wabbajack.CLI.Builder/Wabbajack.CLI.Builder.csproj @@ -7,11 +7,11 @@ - - - - - + + + + + diff --git a/Wabbajack.CLI/Verbs/ModlistReport.cs b/Wabbajack.CLI/Verbs/ModlistReport.cs index dd9fdd96..81e4e9f7 100644 --- a/Wabbajack.CLI/Verbs/ModlistReport.cs +++ b/Wabbajack.CLI/Verbs/ModlistReport.cs @@ -7,6 +7,7 @@ using System.IO.Compression; using System.Linq; using System.Reflection; using System.Text; +using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Nettle; @@ -41,7 +42,7 @@ public class ModlistReport { var data = await (typeof(ModlistReport).Assembly.GetManifestResourceStream("Wabbajack.CLI.Resources.ModlistReport.html")!).ReadAllAsync(); var func = NettleEngine.GetCompiler().Compile(Encoding.UTF8.GetString(data)); - return func(o); + return await func(o, CancellationToken.None); } public async Task Run(AbsolutePath input) diff --git a/Wabbajack.CLI/Wabbajack.CLI.csproj b/Wabbajack.CLI/Wabbajack.CLI.csproj index 21553404..7fc4af60 100644 --- a/Wabbajack.CLI/Wabbajack.CLI.csproj +++ b/Wabbajack.CLI/Wabbajack.CLI.csproj @@ -2,8 +2,8 @@ Exe - net6.0-windows - net6.0 + net8.0-windows + net8.0 enable GPL-3.0-or-later $(VERSION) @@ -13,19 +13,18 @@ CS8600 CS8601 CS8618 - net8.0 true - - - - - - - - + + + + + + + + diff --git a/Wabbajack.Common/Wabbajack.Common.csproj b/Wabbajack.Common/Wabbajack.Common.csproj index 0f0a7737..79a52ad7 100644 --- a/Wabbajack.Common/Wabbajack.Common.csproj +++ b/Wabbajack.Common/Wabbajack.Common.csproj @@ -33,7 +33,7 @@ - + diff --git a/Wabbajack.Compiler.Test/Wabbajack.Compiler.Test.csproj b/Wabbajack.Compiler.Test/Wabbajack.Compiler.Test.csproj index ac61b703..6ebdfd2d 100644 --- a/Wabbajack.Compiler.Test/Wabbajack.Compiler.Test.csproj +++ b/Wabbajack.Compiler.Test/Wabbajack.Compiler.Test.csproj @@ -9,18 +9,18 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Compiler/Wabbajack.Compiler.csproj b/Wabbajack.Compiler/Wabbajack.Compiler.csproj index 09c34ed7..31f8aa74 100644 --- a/Wabbajack.Compiler/Wabbajack.Compiler.csproj +++ b/Wabbajack.Compiler/Wabbajack.Compiler.csproj @@ -18,7 +18,7 @@ - + diff --git a/Wabbajack.Compression.BSA.Test/Wabbajack.Compression.BSA.Test.csproj b/Wabbajack.Compression.BSA.Test/Wabbajack.Compression.BSA.Test.csproj index 7e05fc46..ac73483d 100644 --- a/Wabbajack.Compression.BSA.Test/Wabbajack.Compression.BSA.Test.csproj +++ b/Wabbajack.Compression.BSA.Test/Wabbajack.Compression.BSA.Test.csproj @@ -7,20 +7,20 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - - + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Compression.Zip.Test/Wabbajack.Compression.Zip.Test.csproj b/Wabbajack.Compression.Zip.Test/Wabbajack.Compression.Zip.Test.csproj index db8aa67d..a6a91a3a 100644 --- a/Wabbajack.Compression.Zip.Test/Wabbajack.Compression.Zip.Test.csproj +++ b/Wabbajack.Compression.Zip.Test/Wabbajack.Compression.Zip.Test.csproj @@ -8,17 +8,17 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.DTOs.Test/Wabbajack.DTOs.Test.csproj b/Wabbajack.DTOs.Test/Wabbajack.DTOs.Test.csproj index b0eeac6f..0c8a40eb 100644 --- a/Wabbajack.DTOs.Test/Wabbajack.DTOs.Test.csproj +++ b/Wabbajack.DTOs.Test/Wabbajack.DTOs.Test.csproj @@ -7,23 +7,22 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/Wabbajack.DTOs/Game/Game.cs b/Wabbajack.DTOs/Game/Game.cs index 82dfafc7..c99153ef 100644 --- a/Wabbajack.DTOs/Game/Game.cs +++ b/Wabbajack.DTOs/Game/Game.cs @@ -52,4 +52,7 @@ public enum Game [Description("Mount & Blade II: Bannerlord")] MountAndBlade2Bannerlord, [Description("Valheim")]Valheim, [Description("Modding Tools")] ModdingTools, + + [Description("Final Fantasy VII Remake")] FinalFantasy7Remake, + [Description("Baldur's Gate 3")] BadlursGate3 } diff --git a/Wabbajack.DTOs/Game/GameRegistry.cs b/Wabbajack.DTOs/Game/GameRegistry.cs index 4bf839a3..e3310ebb 100644 --- a/Wabbajack.DTOs/Game/GameRegistry.cs +++ b/Wabbajack.DTOs/Game/GameRegistry.cs @@ -534,6 +534,41 @@ public static class GameRegistry MainExecutable = @"bin\Win64_Shipping_Client\Bannerlord.exe".ToRelativePath() } }, + { + Game.FinalFantasy7Remake, new GameMetaData + { + Game = Game.FinalFantasy7Remake, + NexusName = "finalfantasy7remake", + NexusGameId = 4202, + MO2Name = "FINAL FANTASY VII REMAKE", + MO2ArchiveName = "finalfantasy7remake", + SteamIDs = new[] { 1462040 }, + IsGenericMO2Plugin = true, + RequiredFiles = new [] + { + @"ff7remake.exe".ToRelativePath() + }, + MainExecutable = @"ff7remake.exe".ToRelativePath() + } + }, + { + Game.BadlursGate3, new GameMetaData + { + Game = Game.BadlursGate3, + NexusName = "baldursgate3", + NexusGameId = 3474, + MO2Name = "Baldur's Gate 3", + MO2ArchiveName = "baldursgate3", + SteamIDs = [1086940], + GOGIDs = [1456460669], + IsGenericMO2Plugin = true, + RequiredFiles = new [] + { + @"bin/bg3.exe".ToRelativePath() + }, + MainExecutable = @"bin/bg3.exe".ToRelativePath() + } + }, { Game.ModdingTools, new GameMetaData { diff --git a/Wabbajack.DTOs/Wabbajack.DTOs.csproj b/Wabbajack.DTOs/Wabbajack.DTOs.csproj index ad79c9a1..0a74521b 100644 --- a/Wabbajack.DTOs/Wabbajack.DTOs.csproj +++ b/Wabbajack.DTOs/Wabbajack.DTOs.csproj @@ -12,7 +12,7 @@ - + diff --git a/Wabbajack.Downloaders.Bethesda/Wabbajack.Downloaders.Bethesda.csproj b/Wabbajack.Downloaders.Bethesda/Wabbajack.Downloaders.Bethesda.csproj index 1030ef69..7ba4c931 100644 --- a/Wabbajack.Downloaders.Bethesda/Wabbajack.Downloaders.Bethesda.csproj +++ b/Wabbajack.Downloaders.Bethesda/Wabbajack.Downloaders.Bethesda.csproj @@ -14,7 +14,7 @@ - + diff --git a/Wabbajack.Downloaders.Dispatcher.Test/Wabbajack.Downloaders.Dispatcher.Test.csproj b/Wabbajack.Downloaders.Dispatcher.Test/Wabbajack.Downloaders.Dispatcher.Test.csproj index 85f9a56f..1be48650 100644 --- a/Wabbajack.Downloaders.Dispatcher.Test/Wabbajack.Downloaders.Dispatcher.Test.csproj +++ b/Wabbajack.Downloaders.Dispatcher.Test/Wabbajack.Downloaders.Dispatcher.Test.csproj @@ -7,19 +7,19 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Downloaders.Dispatcher/Wabbajack.Downloaders.Dispatcher.csproj b/Wabbajack.Downloaders.Dispatcher/Wabbajack.Downloaders.Dispatcher.csproj index 5dc9ecb4..42fb60bb 100644 --- a/Wabbajack.Downloaders.Dispatcher/Wabbajack.Downloaders.Dispatcher.csproj +++ b/Wabbajack.Downloaders.Dispatcher/Wabbajack.Downloaders.Dispatcher.csproj @@ -25,7 +25,7 @@ - + diff --git a/Wabbajack.Downloaders.GoogleDrive/Wabbajack.Downloaders.GoogleDrive.csproj b/Wabbajack.Downloaders.GoogleDrive/Wabbajack.Downloaders.GoogleDrive.csproj index c22e139b..4e52d17a 100644 --- a/Wabbajack.Downloaders.GoogleDrive/Wabbajack.Downloaders.GoogleDrive.csproj +++ b/Wabbajack.Downloaders.GoogleDrive/Wabbajack.Downloaders.GoogleDrive.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/Wabbajack.Downloaders.Http/Wabbajack.Downloaders.Http.csproj b/Wabbajack.Downloaders.Http/Wabbajack.Downloaders.Http.csproj index 00088175..b0ccd294 100644 --- a/Wabbajack.Downloaders.Http/Wabbajack.Downloaders.Http.csproj +++ b/Wabbajack.Downloaders.Http/Wabbajack.Downloaders.Http.csproj @@ -17,7 +17,7 @@ - + diff --git a/Wabbajack.Downloaders.IPS4OAuth2Downloader/Wabbajack.Downloaders.IPS4OAuth2Downloader.csproj b/Wabbajack.Downloaders.IPS4OAuth2Downloader/Wabbajack.Downloaders.IPS4OAuth2Downloader.csproj index 90fc1e29..9cd4b885 100644 --- a/Wabbajack.Downloaders.IPS4OAuth2Downloader/Wabbajack.Downloaders.IPS4OAuth2Downloader.csproj +++ b/Wabbajack.Downloaders.IPS4OAuth2Downloader/Wabbajack.Downloaders.IPS4OAuth2Downloader.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/Wabbajack.Downloaders.Manual/Wabbajack.Downloaders.Manual.csproj b/Wabbajack.Downloaders.Manual/Wabbajack.Downloaders.Manual.csproj index 6eabc26a..2c5974a8 100644 --- a/Wabbajack.Downloaders.Manual/Wabbajack.Downloaders.Manual.csproj +++ b/Wabbajack.Downloaders.Manual/Wabbajack.Downloaders.Manual.csproj @@ -12,7 +12,7 @@ - + diff --git a/Wabbajack.Downloaders.MediaFire/Wabbajack.Downloaders.MediaFire.csproj b/Wabbajack.Downloaders.MediaFire/Wabbajack.Downloaders.MediaFire.csproj index e30a6781..d4384934 100644 --- a/Wabbajack.Downloaders.MediaFire/Wabbajack.Downloaders.MediaFire.csproj +++ b/Wabbajack.Downloaders.MediaFire/Wabbajack.Downloaders.MediaFire.csproj @@ -6,9 +6,9 @@ - - - + + + diff --git a/Wabbajack.Downloaders.Mega/Wabbajack.Downloaders.Mega.csproj b/Wabbajack.Downloaders.Mega/Wabbajack.Downloaders.Mega.csproj index 3c995fe8..811dd5cc 100644 --- a/Wabbajack.Downloaders.Mega/Wabbajack.Downloaders.Mega.csproj +++ b/Wabbajack.Downloaders.Mega/Wabbajack.Downloaders.Mega.csproj @@ -13,7 +13,7 @@ - + diff --git a/Wabbajack.Downloaders.ModDB/Wabbajack.Downloaders.ModDB.csproj b/Wabbajack.Downloaders.ModDB/Wabbajack.Downloaders.ModDB.csproj index 56aa86c5..13ad8a23 100644 --- a/Wabbajack.Downloaders.ModDB/Wabbajack.Downloaders.ModDB.csproj +++ b/Wabbajack.Downloaders.ModDB/Wabbajack.Downloaders.ModDB.csproj @@ -13,9 +13,9 @@ - + - + diff --git a/Wabbajack.Downloaders.VerificationCache/Wabbajack.Downloaders.VerificationCache.csproj b/Wabbajack.Downloaders.VerificationCache/Wabbajack.Downloaders.VerificationCache.csproj index 8be4fe8f..5c9e610b 100644 --- a/Wabbajack.Downloaders.VerificationCache/Wabbajack.Downloaders.VerificationCache.csproj +++ b/Wabbajack.Downloaders.VerificationCache/Wabbajack.Downloaders.VerificationCache.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/Wabbajack.Downloaders.WabbajackCDN/Wabbajack.Downloaders.WabbajackCDN.csproj b/Wabbajack.Downloaders.WabbajackCDN/Wabbajack.Downloaders.WabbajackCDN.csproj index f0dd21e1..e7b56569 100644 --- a/Wabbajack.Downloaders.WabbajackCDN/Wabbajack.Downloaders.WabbajackCDN.csproj +++ b/Wabbajack.Downloaders.WabbajackCDN/Wabbajack.Downloaders.WabbajackCDN.csproj @@ -15,7 +15,7 @@ - + diff --git a/Wabbajack.FileExtractor.Test/Wabbajack.FileExtractor.Test.csproj b/Wabbajack.FileExtractor.Test/Wabbajack.FileExtractor.Test.csproj index 55d9b16f..49ef9159 100644 --- a/Wabbajack.FileExtractor.Test/Wabbajack.FileExtractor.Test.csproj +++ b/Wabbajack.FileExtractor.Test/Wabbajack.FileExtractor.Test.csproj @@ -7,21 +7,21 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - - - + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.FileExtractor/Wabbajack.FileExtractor.csproj b/Wabbajack.FileExtractor/Wabbajack.FileExtractor.csproj index 0874c803..41c1a236 100644 --- a/Wabbajack.FileExtractor/Wabbajack.FileExtractor.csproj +++ b/Wabbajack.FileExtractor/Wabbajack.FileExtractor.csproj @@ -29,7 +29,7 @@ - + diff --git a/Wabbajack.Hashing.PHash.Test/Wabbajack.Hashing.PHash.Test.csproj b/Wabbajack.Hashing.PHash.Test/Wabbajack.Hashing.PHash.Test.csproj index 290a02ed..da6b6c5c 100644 --- a/Wabbajack.Hashing.PHash.Test/Wabbajack.Hashing.PHash.Test.csproj +++ b/Wabbajack.Hashing.PHash.Test/Wabbajack.Hashing.PHash.Test.csproj @@ -7,20 +7,20 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Hashing.xxHash64.Benchmark/Wabbajack.Hashing.xxHash64.Benchmark.csproj b/Wabbajack.Hashing.xxHash64.Benchmark/Wabbajack.Hashing.xxHash64.Benchmark.csproj index ecd4d5b6..9881b56c 100644 --- a/Wabbajack.Hashing.xxHash64.Benchmark/Wabbajack.Hashing.xxHash64.Benchmark.csproj +++ b/Wabbajack.Hashing.xxHash64.Benchmark/Wabbajack.Hashing.xxHash64.Benchmark.csproj @@ -8,7 +8,7 @@ - + diff --git a/Wabbajack.Hashing.xxHash64.Test/HashTests.cs b/Wabbajack.Hashing.xxHash64.Test/HashTests.cs index 630a1646..ea382ce3 100644 --- a/Wabbajack.Hashing.xxHash64.Test/HashTests.cs +++ b/Wabbajack.Hashing.xxHash64.Test/HashTests.cs @@ -1,6 +1,5 @@ using System; using System.Data.HashFunction.xxHash; -using FsCheck.Xunit; using Xunit; namespace Wabbajack.Hashing.xxHash64.Test; @@ -11,32 +10,7 @@ public class HashTests private static readonly Hash Hash1a = new(1); private static readonly Hash Hash2 = new(2); - [Property(MaxTest = 1024)] - public void CompareResults(byte[] data) - { - var hash = new xxHashAlgorithm(0); - Assert.Equal(HashOld(data), hash.HashBytes(data)); - } - - [Property(MaxTest = 1024 * 1024)] - public void ToFromBase64(ulong hash) - { - var a = new Hash(hash); - var b = Hash.FromBase64(a.ToBase64()); - Assert.Equal(a, b); - } - - [Property(MaxTest = 1024 * 1024)] - public void ToFromBase64Span(ulong hash) - { - hash = ulong.MaxValue - hash; - Span data = stackalloc byte[12]; - var a = new Hash(hash); - a.ToBase64(data); - var b = Hash.FromBase64(data); - Assert.Equal(a, b); - } - + private ulong HashOld(byte[] data) { var config = new xxHashConfig {HashSizeInBits = 64}; diff --git a/Wabbajack.Hashing.xxHash64.Test/Wabbajack.Hashing.xxHash64.Test.csproj b/Wabbajack.Hashing.xxHash64.Test/Wabbajack.Hashing.xxHash64.Test.csproj index 3bd30960..dc9a44c5 100644 --- a/Wabbajack.Hashing.xxHash64.Test/Wabbajack.Hashing.xxHash64.Test.csproj +++ b/Wabbajack.Hashing.xxHash64.Test/Wabbajack.Hashing.xxHash64.Test.csproj @@ -7,20 +7,18 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Hashing.xxHash64/HashRelativePath.cs b/Wabbajack.Hashing.xxHash64/HashRelativePath.cs index b09d0141..3d8aab27 100644 --- a/Wabbajack.Hashing.xxHash64/HashRelativePath.cs +++ b/Wabbajack.Hashing.xxHash64/HashRelativePath.cs @@ -31,7 +31,7 @@ public readonly struct HashRelativePath : IPath, IEquatable, I public override bool Equals(object? obj) { - return obj is FullPath path && Equals(path); + return obj is HashRelativePath path && Equals(path); } public override int GetHashCode() diff --git a/Wabbajack.Installer.Test/Wabbajack.Installer.Test.csproj b/Wabbajack.Installer.Test/Wabbajack.Installer.Test.csproj index 6d27a0ff..414f2d25 100644 --- a/Wabbajack.Installer.Test/Wabbajack.Installer.Test.csproj +++ b/Wabbajack.Installer.Test/Wabbajack.Installer.Test.csproj @@ -7,18 +7,18 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Installer/Wabbajack.Installer.csproj b/Wabbajack.Installer/Wabbajack.Installer.csproj index d76063bb..7f636eeb 100644 --- a/Wabbajack.Installer/Wabbajack.Installer.csproj +++ b/Wabbajack.Installer/Wabbajack.Installer.csproj @@ -24,7 +24,7 @@ - + diff --git a/Wabbajack.Launcher/App.axaml b/Wabbajack.Launcher/App.axaml index e9f4b8c4..27a45638 100644 --- a/Wabbajack.Launcher/App.axaml +++ b/Wabbajack.Launcher/App.axaml @@ -7,6 +7,6 @@ - + \ No newline at end of file diff --git a/Wabbajack.Launcher/Program.cs b/Wabbajack.Launcher/Program.cs index f2dab596..04674ce9 100644 --- a/Wabbajack.Launcher/Program.cs +++ b/Wabbajack.Launcher/Program.cs @@ -1,11 +1,14 @@ using System; using System.Net.Http; using System.Runtime.InteropServices; +using System.Threading.Tasks; using Avalonia; using Avalonia.ReactiveUI; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Wabbajack.Common; +using Wabbajack.Configuration; using Wabbajack.Downloaders.Http; using Wabbajack.DTOs; using Wabbajack.DTOs.JsonConverters; @@ -16,7 +19,9 @@ using Wabbajack.Networking.Http; using Wabbajack.Networking.Http.Interfaces; using Wabbajack.Networking.NexusApi; using Wabbajack.Paths; +using Wabbajack.Paths.IO; using Wabbajack.RateLimiter; +using Wabbajack.Services.OSIntegrated; using Wabbajack.Services.OSIntegrated.TokenProviders; namespace Wabbajack.Launcher; @@ -36,6 +41,20 @@ internal class Program services.AddNexusApi(); services.AddDTOConverters(); services.AddDTOSerializer(); + + services.AddSingleton(s => new Services.OSIntegrated.Configuration + { + EncryptedDataLocation = KnownFolders.WabbajackAppLocal.Combine("encrypted"), + ModListsDownloadLocation = KnownFolders.EntryPoint.Combine("downloaded_mod_lists"), + SavedSettingsLocation = KnownFolders.WabbajackAppLocal.Combine("saved_settings"), + LogLocation = KnownFolders.LauncherAwarePath.Combine("logs"), + ImageCacheLocation = KnownFolders.WabbajackAppLocal.Combine("image_cache") + }); + + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(s => GetAppSettings(s, MainSettings.SettingsFileName)); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton, NexusApiTokenProvider>(); @@ -62,6 +81,19 @@ internal class Program BuildAvaloniaApp() .StartWithClassicDesktopLifetime(args); } + + private static MainSettings GetAppSettings(IServiceProvider provider, string name) + { + var settingsManager = provider.GetRequiredService(); + var settings = Task.Run(() => settingsManager.Load(name)).Result; + if (settings.Upgrade()) + { + settingsManager.Save(MainSettings.SettingsFileName, settings).FireAndForget(); + } + + return settings; + } + public static IServiceProvider Services { get; set; } // Avalonia configuration, don't remove; also used by visual designer. diff --git a/Wabbajack.Launcher/ViewLocator.cs b/Wabbajack.Launcher/ViewLocator.cs index f81f112a..093f6a36 100644 --- a/Wabbajack.Launcher/ViewLocator.cs +++ b/Wabbajack.Launcher/ViewLocator.cs @@ -9,7 +9,7 @@ public class ViewLocator : IDataTemplate { public bool SupportsRecycling => false; - public IControl Build(object? data) + public Control Build(object? data) { var name = data!.GetType().FullName!.Replace("ViewModel", "View"); var type = Type.GetType(name); diff --git a/Wabbajack.Launcher/ViewModels/MainWindowViewModel.cs b/Wabbajack.Launcher/ViewModels/MainWindowViewModel.cs index 75472aa3..47e16982 100644 --- a/Wabbajack.Launcher/ViewModels/MainWindowViewModel.cs +++ b/Wabbajack.Launcher/ViewModels/MainWindowViewModel.cs @@ -10,13 +10,10 @@ using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; -using MessageBox.Avalonia.DTO; +using MsBox.Avalonia.Dto; using ReactiveUI.Fody.Helpers; using Wabbajack.Common; -using Wabbajack.Compression.Zip; using Wabbajack.Downloaders.Http; -using Wabbajack.DTOs; -using Wabbajack.DTOs.DownloadStates; using Wabbajack.DTOs.Logins; using Wabbajack.Networking.Http.Interfaces; using Wabbajack.Networking.NexusApi; @@ -224,8 +221,8 @@ public class MainWindowViewModel : ViewModelBase var entryPoint = KnownFolders.EntryPoint; if (KnownFolders.IsInSpecialFolder(entryPoint) || entryPoint.Depth <= 1) { - var msg = MessageBox.Avalonia.MessageBoxManager - .GetMessageBoxStandardWindow(new MessageBoxStandardParams() + var msg = MsBox.Avalonia.MessageBoxManager + .GetMessageBoxStandard(new MessageBoxStandardParams() { Topmost = true, ShowInCenter = true, @@ -233,22 +230,22 @@ public class MainWindowViewModel : ViewModelBase ContentMessage = "Cannot start in the root of a drive, or protected folder locations such as Downloads, Desktop etc.\nPlease move Wabbajack to another folder, creating a new folder if necessary ( example : C:\\Wabbajack\\), outside of these locations." }); - var result = await msg.Show(); + var result = await msg.ShowAsync(); Environment.Exit(1); } } catch (Exception ex) { Status = ex.Message; - var msg = MessageBox.Avalonia.MessageBoxManager - .GetMessageBoxStandardWindow(new MessageBoxStandardParams() + var msg = MsBox.Avalonia.MessageBoxManager + .GetMessageBoxStandard(new MessageBoxStandardParams() { Topmost = true, ShowInCenter = true, ContentTitle = "Wabbajack Launcher: Error", ContentMessage = ex.ToString() }); - var result = await msg.Show(); + var result = await msg.ShowAsync(); Environment.Exit(1); } } diff --git a/Wabbajack.Launcher/Views/MainWindow.axaml.cs b/Wabbajack.Launcher/Views/MainWindow.axaml.cs index 0456089a..70d06b5b 100644 --- a/Wabbajack.Launcher/Views/MainWindow.axaml.cs +++ b/Wabbajack.Launcher/Views/MainWindow.axaml.cs @@ -4,7 +4,7 @@ using Avalonia.Markup.Xaml; namespace Wabbajack.Launcher.Views; -public class MainWindow : Window +public partial class MainWindow : Window { public MainWindow() { diff --git a/Wabbajack.Launcher/Wabbajack.Launcher.csproj b/Wabbajack.Launcher/Wabbajack.Launcher.csproj index 5336e142..a4ad667a 100644 --- a/Wabbajack.Launcher/Wabbajack.Launcher.csproj +++ b/Wabbajack.Launcher/Wabbajack.Launcher.csproj @@ -19,20 +19,20 @@ net8.0-windows - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - + + + + + + + - + diff --git a/Wabbajack.Networking.Discord/Wabbajack.Networking.Discord.csproj b/Wabbajack.Networking.Discord/Wabbajack.Networking.Discord.csproj index c05b4024..fbfff7f5 100644 --- a/Wabbajack.Networking.Discord/Wabbajack.Networking.Discord.csproj +++ b/Wabbajack.Networking.Discord/Wabbajack.Networking.Discord.csproj @@ -16,7 +16,7 @@ - + diff --git a/Wabbajack.Networking.GitHub/Wabbajack.Networking.GitHub.csproj b/Wabbajack.Networking.GitHub/Wabbajack.Networking.GitHub.csproj index ebb07835..14c2284e 100644 --- a/Wabbajack.Networking.GitHub/Wabbajack.Networking.GitHub.csproj +++ b/Wabbajack.Networking.GitHub/Wabbajack.Networking.GitHub.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/Wabbajack.Networking.Http.Test/Wabbajack.Networking.Http.Test.csproj b/Wabbajack.Networking.Http.Test/Wabbajack.Networking.Http.Test.csproj index f0762e54..59940fe7 100644 --- a/Wabbajack.Networking.Http.Test/Wabbajack.Networking.Http.Test.csproj +++ b/Wabbajack.Networking.Http.Test/Wabbajack.Networking.Http.Test.csproj @@ -8,17 +8,17 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Networking.Http/Wabbajack.Networking.Http.csproj b/Wabbajack.Networking.Http/Wabbajack.Networking.Http.csproj index eb64f515..68fd756d 100644 --- a/Wabbajack.Networking.Http/Wabbajack.Networking.Http.csproj +++ b/Wabbajack.Networking.Http/Wabbajack.Networking.Http.csproj @@ -9,7 +9,7 @@ - + diff --git a/Wabbajack.Networking.NexusApi.Test/Wabbajack.Networking.NexusApi.Test.csproj b/Wabbajack.Networking.NexusApi.Test/Wabbajack.Networking.NexusApi.Test.csproj index 3b8e6b96..816b1b47 100644 --- a/Wabbajack.Networking.NexusApi.Test/Wabbajack.Networking.NexusApi.Test.csproj +++ b/Wabbajack.Networking.NexusApi.Test/Wabbajack.Networking.NexusApi.Test.csproj @@ -7,19 +7,19 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Networking.NexusApi/Wabbajack.Networking.NexusApi.csproj b/Wabbajack.Networking.NexusApi/Wabbajack.Networking.NexusApi.csproj index e2de94ee..03ec81c8 100644 --- a/Wabbajack.Networking.NexusApi/Wabbajack.Networking.NexusApi.csproj +++ b/Wabbajack.Networking.NexusApi/Wabbajack.Networking.NexusApi.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/Wabbajack.Networking.Steam.Test/Wabbajack.Networking.Steam.Test.csproj b/Wabbajack.Networking.Steam.Test/Wabbajack.Networking.Steam.Test.csproj index 67e78994..8994fc07 100644 --- a/Wabbajack.Networking.Steam.Test/Wabbajack.Networking.Steam.Test.csproj +++ b/Wabbajack.Networking.Steam.Test/Wabbajack.Networking.Steam.Test.csproj @@ -8,20 +8,20 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - - + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Networking.Steam/Wabbajack.Networking.Steam.csproj b/Wabbajack.Networking.Steam/Wabbajack.Networking.Steam.csproj index 2a505ddb..66761175 100644 --- a/Wabbajack.Networking.Steam/Wabbajack.Networking.Steam.csproj +++ b/Wabbajack.Networking.Steam/Wabbajack.Networking.Steam.csproj @@ -11,8 +11,8 @@ - - + + diff --git a/Wabbajack.Networking.WabbajackClientApi/Wabbajack.Networking.WabbajackClientApi.csproj b/Wabbajack.Networking.WabbajackClientApi/Wabbajack.Networking.WabbajackClientApi.csproj index 8aaefb95..8a1328a9 100644 --- a/Wabbajack.Networking.WabbajackClientApi/Wabbajack.Networking.WabbajackClientApi.csproj +++ b/Wabbajack.Networking.WabbajackClientApi/Wabbajack.Networking.WabbajackClientApi.csproj @@ -12,9 +12,9 @@ - - - + + + diff --git a/Wabbajack.Paths.IO.Test/AbsolutePathTests.cs b/Wabbajack.Paths.IO.Test/AbsolutePathTests.cs index a43f6de6..0bf26be9 100644 --- a/Wabbajack.Paths.IO.Test/AbsolutePathTests.cs +++ b/Wabbajack.Paths.IO.Test/AbsolutePathTests.cs @@ -29,7 +29,7 @@ public class AbsolutePathTests } [Fact] - public async ValueTask CanReadAndWriteFilesAsync() + public async Task CanReadAndWriteFilesAsync() { var data = "This is a test"; var file = GetTempFile(); diff --git a/Wabbajack.Paths.IO.Test/Wabbajack.Paths.IO.Test.csproj b/Wabbajack.Paths.IO.Test/Wabbajack.Paths.IO.Test.csproj index 9283f503..87291b33 100644 --- a/Wabbajack.Paths.IO.Test/Wabbajack.Paths.IO.Test.csproj +++ b/Wabbajack.Paths.IO.Test/Wabbajack.Paths.IO.Test.csproj @@ -7,18 +7,18 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Paths.Test/Wabbajack.Paths.Test.csproj b/Wabbajack.Paths.Test/Wabbajack.Paths.Test.csproj index 71630d2e..165c0bc8 100644 --- a/Wabbajack.Paths.Test/Wabbajack.Paths.Test.csproj +++ b/Wabbajack.Paths.Test/Wabbajack.Paths.Test.csproj @@ -7,17 +7,17 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.RateLimiter.Test/Wabbajack.RateLimiter.Test.csproj b/Wabbajack.RateLimiter.Test/Wabbajack.RateLimiter.Test.csproj index d09b9b77..41192da1 100644 --- a/Wabbajack.RateLimiter.Test/Wabbajack.RateLimiter.Test.csproj +++ b/Wabbajack.RateLimiter.Test/Wabbajack.RateLimiter.Test.csproj @@ -8,17 +8,17 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.Server.Lib/Wabbajack.Server.Lib.csproj b/Wabbajack.Server.Lib/Wabbajack.Server.Lib.csproj index 351f19c5..526026ec 100644 --- a/Wabbajack.Server.Lib/Wabbajack.Server.Lib.csproj +++ b/Wabbajack.Server.Lib/Wabbajack.Server.Lib.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/Wabbajack.Services.OSIntegrated/Wabbajack.Services.OSIntegrated.csproj b/Wabbajack.Services.OSIntegrated/Wabbajack.Services.OSIntegrated.csproj index 0a61e5a8..703cdb3e 100644 --- a/Wabbajack.Services.OSIntegrated/Wabbajack.Services.OSIntegrated.csproj +++ b/Wabbajack.Services.OSIntegrated/Wabbajack.Services.OSIntegrated.csproj @@ -12,12 +12,12 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/Wabbajack.VFS.Test/Wabbajack.VFS.Test.csproj b/Wabbajack.VFS.Test/Wabbajack.VFS.Test.csproj index 9a11a2dd..7d79ece1 100644 --- a/Wabbajack.VFS.Test/Wabbajack.VFS.Test.csproj +++ b/Wabbajack.VFS.Test/Wabbajack.VFS.Test.csproj @@ -7,25 +7,25 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - + + + + + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Wabbajack.VFS/Wabbajack.VFS.csproj b/Wabbajack.VFS/Wabbajack.VFS.csproj index 50dd72e6..0631cd8f 100644 --- a/Wabbajack.VFS/Wabbajack.VFS.csproj +++ b/Wabbajack.VFS/Wabbajack.VFS.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/buildall.bat b/buildall.bat index f587ea41..182fc790 100644 --- a/buildall.bat +++ b/buildall.bat @@ -6,10 +6,9 @@ SET /p VERSION=