From 129f6b4fc28af4d89f7be523d05db48844d2aafe Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Sat, 28 Mar 2020 07:33:39 -0600 Subject: [PATCH] Cleaned up a bunch of warnings and errors --- Wabbajack.Common.CSP/Channel.cs | 2 +- Wabbajack.Common.CSP/PIpelines.cs | 4 +- Wabbajack.Common.CSP/RxBuffer.cs | 12 +----- Wabbajack.Common.Test/WorkQueueTests.cs | 5 ++- Wabbajack.Common/Hash.cs | 3 +- Wabbajack.Common/KnownFolders/KnownFolders.cs | 14 ++++--- Wabbajack.Common/Metrics.cs | 4 +- Wabbajack.Common/Paths.cs | 19 +++++++++- Wabbajack.Common/ProcessHelper.cs | 15 ++++++-- Wabbajack.Common/Util/DiskSlabAllocator.cs | 7 ++-- Wabbajack.Common/Util/TempFolder.cs | 7 ++-- Wabbajack.Launcher/MainWindowVM.cs | 2 +- Wabbajack.Lib/AInstaller.cs | 30 +++++++-------- .../Downloaders/AbstractIPS4Downloader.cs | 2 +- .../Downloaders/BethesdaNetDownloader.cs | 3 +- .../Downloaders/DownloadDispatcher.cs | 2 +- .../Downloaders/YouTubeDownloader.cs | 6 +-- Wabbajack.Lib/FileUploader/AuthorAPI.cs | 2 - Wabbajack.Lib/MO2Installer.cs | 3 +- .../ModListRegistry/ModListMetadata.cs | 3 +- Wabbajack.Lib/NexusApi/NexusApi.cs | 2 - Wabbajack.Lib/VortexCompiler.cs | 4 +- Wabbajack.Lib/Wabbajack.Lib.csproj | 6 +++ Wabbajack.Test/DownloaderTests.cs | 2 +- Wabbajack.Test/FilePickerTests.cs | 2 +- Wabbajack.Test/MO2Tests.cs | 37 ++++++++++--------- Wabbajack.VirtualFileSystem/VirtualFile.cs | 2 +- 27 files changed, 111 insertions(+), 89 deletions(-) diff --git a/Wabbajack.Common.CSP/Channel.cs b/Wabbajack.Common.CSP/Channel.cs index 70b18788..eafca0ea 100644 --- a/Wabbajack.Common.CSP/Channel.cs +++ b/Wabbajack.Common.CSP/Channel.cs @@ -55,7 +55,7 @@ namespace Wabbajack.Common.CSP private static ManyToManyChannel ChannelForRxBuf(RxBuffer buf) { - return new ManyToManyChannel(null, RxBuffer.TransformAdd, RxBuffer.Finalize, buf); + return new ManyToManyChannel(null, RxBuffer.TransformAdd, (final) => ((RxBuffer)final).Dispose(), buf); } /// diff --git a/Wabbajack.Common.CSP/PIpelines.cs b/Wabbajack.Common.CSP/PIpelines.cs index ac382f84..cbfec187 100644 --- a/Wabbajack.Common.CSP/PIpelines.cs +++ b/Wabbajack.Common.CSP/PIpelines.cs @@ -151,9 +151,9 @@ namespace Wabbajack.Common.CSP var putIsOpen = await to.Put(f(job)); if (!putIsOpen) return; } - catch (Exception ex) + catch (Exception) { - + // ignored } } } diff --git a/Wabbajack.Common.CSP/RxBuffer.cs b/Wabbajack.Common.CSP/RxBuffer.cs index fcd7c058..69bfef98 100644 --- a/Wabbajack.Common.CSP/RxBuffer.cs +++ b/Wabbajack.Common.CSP/RxBuffer.cs @@ -33,19 +33,9 @@ namespace Wabbajack.Common.CSP return ((RxBuffer) buf).TransformAdd(itm); } - public void Finalize() - { - _inputSubject.OnCompleted(); - } - public void Dispose() { - throw new NotImplementedException(); - } - - public static void Finalize(IBuffer buf) - { - ((RxBuffer)buf).Finalize(); + _inputSubject.OnCompleted(); } public bool IsFull => Count >= _maxSize; diff --git a/Wabbajack.Common.Test/WorkQueueTests.cs b/Wabbajack.Common.Test/WorkQueueTests.cs index ee0a324d..3e9e34c5 100644 --- a/Wabbajack.Common.Test/WorkQueueTests.cs +++ b/Wabbajack.Common.Test/WorkQueueTests.cs @@ -46,7 +46,7 @@ namespace Wabbajack.Common.Test using (var queue = new WorkQueue(Observable.Empty())) { Assert.Equal(0, queue.DesiredNumWorkers); - Assert.Equal(0, queue._tasks.Count); + Assert.Empty(queue._tasks); } } @@ -207,6 +207,7 @@ namespace Wabbajack.Common.Test /// /// TLDR: Don't put the same work completion source to be done on the queue multiple times. /// + [Fact] public async Task ThreadCoalescenceExample() { var subj = new BehaviorSubject(Large); @@ -260,7 +261,7 @@ namespace Wabbajack.Common.Test // Show that only one job was started/worked on (by our one coalesced worker thread) lock (lockObj) { - Assert.Equal(1, secondWorkStartedArray.Where(i => i).Count()); + Assert.Single(secondWorkStartedArray.Where(i => i)); } } } diff --git a/Wabbajack.Common/Hash.cs b/Wabbajack.Common/Hash.cs index 59420d1b..5acdc7a4 100644 --- a/Wabbajack.Common/Hash.cs +++ b/Wabbajack.Common/Hash.cs @@ -1,4 +1,5 @@ -using System; +#nullable enable +using System; using System.Collections.Generic; using System.Data.HashFunction.xxHash; using System.IO; diff --git a/Wabbajack.Common/KnownFolders/KnownFolders.cs b/Wabbajack.Common/KnownFolders/KnownFolders.cs index 37ca0327..0ac603ce 100644 --- a/Wabbajack.Common/KnownFolders/KnownFolders.cs +++ b/Wabbajack.Common/KnownFolders/KnownFolders.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System.Collections.Concurrent; +using System.Collections.Generic; namespace Wabbajack.Common.IO { @@ -9,7 +10,7 @@ namespace Wabbajack.Common.IO { // ---- MEMBERS ------------------------------------------------------------------------------------------------ - private static Dictionary _knownFolderInstances; + private static ConcurrentDictionary _knownFolderInstances; // ---- PROPERTIES --------------------------------------------------------------------------------------------- @@ -660,18 +661,21 @@ namespace Wabbajack.Common.IO public static KnownFolder Windows => GetInstance(KnownFolderType.Windows); // ---- METHODS (PRIVATE) -------------------------------------------------------------------------------------- - + private static KnownFolder GetInstance(KnownFolderType type) { + // Check if the caching directory exists yet. if (_knownFolderInstances == null) - _knownFolderInstances = new Dictionary(); + _knownFolderInstances = new ConcurrentDictionary(); // Get a KnownFolder instance out of the cache dictionary or create it when not cached yet. if (!_knownFolderInstances.TryGetValue(type, out KnownFolder knownFolder)) { knownFolder = new KnownFolder(type); - _knownFolderInstances.Add(type, knownFolder); + if (_knownFolderInstances.TryAdd(type, knownFolder)) + return knownFolder; + return _knownFolderInstances[type]; } return knownFolder; } diff --git a/Wabbajack.Common/Metrics.cs b/Wabbajack.Common/Metrics.cs index 5f9c76a7..7ee74d86 100644 --- a/Wabbajack.Common/Metrics.cs +++ b/Wabbajack.Common/Metrics.cs @@ -35,9 +35,9 @@ namespace Wabbajack.Common Utils.FromEncryptedJson(Consts.MetricsKeyHeader)); await client.GetAsync($"http://build.wabbajack.org/metrics/{action}/{value}"); } - catch (Exception ex) + catch (Exception) { - + // ignored } } } diff --git a/Wabbajack.Common/Paths.cs b/Wabbajack.Common/Paths.cs index 5b56c1e8..9f24c242 100644 --- a/Wabbajack.Common/Paths.cs +++ b/Wabbajack.Common/Paths.cs @@ -142,13 +142,30 @@ namespace Wabbajack.Common public long Size => new FileInfo(_path).Length; - public DateTime LastModified => File.GetLastWriteTime(_path); + public DateTime LastModified + { + get => File.GetLastWriteTime(_path); + set => File.SetLastWriteTime(_path, value); + } + public DateTime LastModifiedUtc => File.GetLastWriteTimeUtc(_path); public AbsolutePath Parent => (AbsolutePath)Path.GetDirectoryName(_path); public RelativePath FileName => (RelativePath)Path.GetFileName(_path); public RelativePath FileNameWithoutExtension => (RelativePath)Path.GetFileNameWithoutExtension(_path); public bool IsEmptyDirectory => IsDirectory && !EnumerateFiles().Any(); + public bool IsReadOnly + { + get + { + return new FileInfo(_path).IsReadOnly; + } + set + { + new FileInfo(_path).IsReadOnly = value; + } + } + /// /// Moves this file to the specified location /// diff --git a/Wabbajack.Common/ProcessHelper.cs b/Wabbajack.Common/ProcessHelper.cs index 2d3f6ed9..7c0639b7 100644 --- a/Wabbajack.Common/ProcessHelper.cs +++ b/Wabbajack.Common/ProcessHelper.cs @@ -47,24 +47,27 @@ namespace Wabbajack.Common StartInfo = info, EnableRaisingEvents = true }; - p.Exited += (sender, args) => + EventHandler Exited = (sender, args) => { finished.SetResult(p.ExitCode); }; + p.Exited += Exited; - p.OutputDataReceived += (sender, data) => + DataReceivedEventHandler OutputDataReceived = (sender, data) => { if (string.IsNullOrEmpty(data.Data)) return; Output.OnNext((StreamType.Output, data.Data)); }; + p.OutputDataReceived += OutputDataReceived; - p.ErrorDataReceived += (sender, data) => + DataReceivedEventHandler ErrorEventHandler = (sender, data) => { if (string.IsNullOrEmpty(data.Data)) return; Output.OnNext((StreamType.Error, data.Data)); if (LogError) Utils.Log($"{AlphaPath.GetFileName(Path)} ({p.Id}) StdErr: {data.Data}"); }; + p.ErrorDataReceived += ErrorEventHandler; p.Start(); p.BeginErrorReadLine(); @@ -82,6 +85,12 @@ namespace Wabbajack.Common var result = await finished.Task; + p.CancelErrorRead(); + p.CancelOutputRead(); + p.OutputDataReceived -= OutputDataReceived; + p.ErrorDataReceived -= ErrorEventHandler; + p.Exited -= Exited; + Output.OnCompleted(); return result; } diff --git a/Wabbajack.Common/Util/DiskSlabAllocator.cs b/Wabbajack.Common/Util/DiskSlabAllocator.cs index 4e108e5e..067047fc 100644 --- a/Wabbajack.Common/Util/DiskSlabAllocator.cs +++ b/Wabbajack.Common/Util/DiskSlabAllocator.cs @@ -10,11 +10,10 @@ namespace Wabbajack.Common /// public class DiskSlabAllocator : IDisposable { - private TempFile _file; - private MemoryMappedFile _mmap; + private readonly TempFile _file; + private readonly MemoryMappedFile _mmap; private long _head = 0; - private string _name; - private FileStream _fileStream; + private readonly FileStream _fileStream; public DiskSlabAllocator(long size) { diff --git a/Wabbajack.Common/Util/TempFolder.cs b/Wabbajack.Common/Util/TempFolder.cs index caa7902f..6a7992da 100644 --- a/Wabbajack.Common/Util/TempFolder.cs +++ b/Wabbajack.Common/Util/TempFolder.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Wabbajack.Common { - public class TempFolder : IDisposable + public class TempFolder : IAsyncDisposable { public AbsolutePath Dir { get; } public bool DeleteAfter = true; @@ -29,12 +29,11 @@ namespace Wabbajack.Common } DeleteAfter = deleteAfter; } - - public void Dispose() + public async ValueTask DisposeAsync() { if (DeleteAfter && Dir.Exists) { - Utils.DeleteDirectory(Dir).Wait(); + await Utils.DeleteDirectory(Dir); } } } diff --git a/Wabbajack.Launcher/MainWindowVM.cs b/Wabbajack.Launcher/MainWindowVM.cs index 078070b4..3e961d27 100644 --- a/Wabbajack.Launcher/MainWindowVM.cs +++ b/Wabbajack.Launcher/MainWindowVM.cs @@ -61,7 +61,7 @@ namespace Wabbajack.Launcher return new Version(0, 0, 0, 0); }).FirstOrDefault(); } - catch (Exception ex) + catch (Exception) { FinishAndExit(); } diff --git a/Wabbajack.Lib/AInstaller.cs b/Wabbajack.Lib/AInstaller.cs index 21d4927e..6f20a21e 100644 --- a/Wabbajack.Lib/AInstaller.cs +++ b/Wabbajack.Lib/AInstaller.cs @@ -137,43 +137,41 @@ namespace Wabbajack.Lib Status($"Copying files for {archive.Name}"); - void CopyFile(string from, string to, bool useMove) + async ValueTask CopyFile(AbsolutePath from, AbsolutePath to, bool useMove) { - if (File.Exists(to)) + if (to.Exists) { - var fi = new FileInfo(to); - if (fi.IsReadOnly) - fi.IsReadOnly = false; - File.Delete(to); + if (to.IsReadOnly) + to.IsReadOnly = false; + to.Delete(); } - if (File.Exists(from)) + if (from.Exists) { - var fi = new FileInfo(from); - if (fi.IsReadOnly) - fi.IsReadOnly = false; + if (from.IsReadOnly) + from.IsReadOnly = false; } if (useMove) - File.Move(from, to); + from.MoveTo(to); else - File.Copy(from, to); + from.CopyTo(to); // If we don't do this, the file will use the last-modified date of the file when it was compressed // into an archive, which isn't really what we want in the case of files installed archives - File.SetLastWriteTime(to, DateTime.Now); + to.LastModified = DateTime.Now; } await vFiles.GroupBy(f => f.FromFile) - .PDoIndexed(queue, (idx, group) => + .PDoIndexed(queue, async (idx, group) => { Utils.Status("Installing files", Percent.FactoryPutInRange(idx, vFiles.Count)); var firstDest = OutputFolder.Combine(group.First().To); - group.Key.StagedPath.CopyTo(firstDest, true); + await CopyFile(group.Key.StagedPath, firstDest, true); foreach (var copy in group.Skip(1)) { - firstDest.CopyTo(OutputFolder.Combine(copy.To)); + await CopyFile(firstDest, OutputFolder.Combine(copy.To), false); } }); diff --git a/Wabbajack.Lib/Downloaders/AbstractIPS4Downloader.cs b/Wabbajack.Lib/Downloaders/AbstractIPS4Downloader.cs index ccc86f01..3f2d7172 100644 --- a/Wabbajack.Lib/Downloaders/AbstractIPS4Downloader.cs +++ b/Wabbajack.Lib/Downloaders/AbstractIPS4Downloader.cs @@ -64,7 +64,7 @@ namespace Wabbajack.Lib.Downloaders [MessagePackObject] - public class State : AbstractDownloadState, IMetaState where TDownloader : IDownloader + public class State : AbstractDownloadState, IMetaState where TStateDownloader : IDownloader { [Key(0)] public string FileID { get; set; } diff --git a/Wabbajack.Lib/Downloaders/BethesdaNetDownloader.cs b/Wabbajack.Lib/Downloaders/BethesdaNetDownloader.cs index 0128d07c..31a1d69c 100644 --- a/Wabbajack.Lib/Downloaders/BethesdaNetDownloader.cs +++ b/Wabbajack.Lib/Downloaders/BethesdaNetDownloader.cs @@ -94,7 +94,7 @@ namespace Wabbajack.Lib.Downloaders result.ToEcryptedJson(DataName); return result; } - catch (Exception _) + catch (Exception) { return null; } @@ -105,7 +105,6 @@ namespace Wabbajack.Lib.Downloaders return StateFromUrl(new Uri(url)); } - public event PropertyChangedEventHandler PropertyChanged; public ReactiveCommand TriggerLogin { get; } public ReactiveCommand ClearLogin { get; } public IObservable IsLoggedIn => Utils.HaveEncryptedJsonObservable(DataName); diff --git a/Wabbajack.Lib/Downloaders/DownloadDispatcher.cs b/Wabbajack.Lib/Downloaders/DownloadDispatcher.cs index c44629e9..e8a14249 100644 --- a/Wabbajack.Lib/Downloaders/DownloadDispatcher.cs +++ b/Wabbajack.Lib/Downloaders/DownloadDispatcher.cs @@ -151,7 +151,7 @@ namespace Wabbajack.Lib.Downloaders return false; } - catch (Exception ex) + catch (Exception) { return false; } diff --git a/Wabbajack.Lib/Downloaders/YouTubeDownloader.cs b/Wabbajack.Lib/Downloaders/YouTubeDownloader.cs index 4131c244..4538ca28 100644 --- a/Wabbajack.Lib/Downloaders/YouTubeDownloader.cs +++ b/Wabbajack.Lib/Downloaders/YouTubeDownloader.cs @@ -102,7 +102,7 @@ namespace Wabbajack.Lib.Downloaders try { using var queue = new WorkQueue(); - using var folder = new TempFolder(); + await using var folder = new TempFolder(); folder.Dir.Combine("tracks").CreateDirectory(); var client = new YoutubeClient(Common.Http.ClientFactory.Client); var meta = await client.GetVideoAsync(Key); @@ -143,7 +143,7 @@ namespace Wabbajack.Lib.Downloaders return true; } - catch (VideoUnavailableException ex) + catch (VideoUnavailableException) { return false; } @@ -240,7 +240,7 @@ namespace Wabbajack.Lib.Downloaders var video = await client.GetVideoAsync(Key); return true; } - catch (VideoUnavailableException ex) + catch (VideoUnavailableException) { return false; } diff --git a/Wabbajack.Lib/FileUploader/AuthorAPI.cs b/Wabbajack.Lib/FileUploader/AuthorAPI.cs index bb901b68..72818cba 100644 --- a/Wabbajack.Lib/FileUploader/AuthorAPI.cs +++ b/Wabbajack.Lib/FileUploader/AuthorAPI.cs @@ -68,8 +68,6 @@ namespace Wabbajack.Lib.FileUploader Interlocked.Add(ref sent, block_size); progressFn((double)sent / fsize); - int retries = 0; - await using var fs = filename.OpenRead(); fs.Position = block_offset; var data = new byte[block_size]; diff --git a/Wabbajack.Lib/MO2Installer.cs b/Wabbajack.Lib/MO2Installer.cs index 4d58bb36..bab64a5b 100644 --- a/Wabbajack.Lib/MO2Installer.cs +++ b/Wabbajack.Lib/MO2Installer.cs @@ -363,10 +363,9 @@ namespace Wabbajack.Lib if (modified) parser.WriteFile((string)file, data); } - catch (Exception ex) + catch (Exception) { Utils.Log($"Skipping screen size remap for {file} due to parse error."); - continue; } } } diff --git a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs index 3bddcfe1..bea0931b 100644 --- a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs +++ b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs @@ -76,8 +76,9 @@ namespace Wabbajack.Lib.ModListRegistry if (summaries.TryGetValue(data.Title, out var summary)) data.ValidationSummary = summary; } - catch (Exception ex) + catch (Exception) { + // ignored } return metadata.OrderBy(m => (m.ValidationSummary?.HasFailures ?? false ? 1 : 0, m.Title)).ToList(); diff --git a/Wabbajack.Lib/NexusApi/NexusApi.cs b/Wabbajack.Lib/NexusApi/NexusApi.cs index 54d75838..b68cfa44 100644 --- a/Wabbajack.Lib/NexusApi/NexusApi.cs +++ b/Wabbajack.Lib/NexusApi/NexusApi.cs @@ -22,7 +22,6 @@ namespace Wabbajack.Lib.NexusApi public class NexusApiClient : ViewModel { private static readonly string API_KEY_CACHE_FILE = "nexus.key_cache"; - private static string _additionalEntropy = "vtP2HF6ezg"; public Common.Http.Client HttpClient { get; } = new Common.Http.Client(); @@ -331,7 +330,6 @@ namespace Wabbajack.Lib.NexusApi public string URI { get; set; } } - private static bool? _useLocalCache; public static MethodInfo CacheMethod { get; set; } private static string _localCacheDir; diff --git a/Wabbajack.Lib/VortexCompiler.cs b/Wabbajack.Lib/VortexCompiler.cs index 85c80628..4ad94116 100644 --- a/Wabbajack.Lib/VortexCompiler.cs +++ b/Wabbajack.Lib/VortexCompiler.cs @@ -43,7 +43,7 @@ namespace Wabbajack.Lib public const string StagingMarkerName = "__vortex_staging_folder"; public const string DownloadMarkerName = "__vortex_downloads_folder"; - private bool _isSteamGame; + //private bool _isSteamGame = true; private SteamGame _steamGame; private bool _hasSteamWorkshopItems; @@ -71,12 +71,14 @@ namespace Wabbajack.Lib ActiveArchives = new List(); // there can be max one game after filtering + /* StoreHandler.Instance.StoreGames.Where(g => g.Game == game && g.Type == StoreType.STEAM).Do(g => { _isSteamGame = true; _steamGame = (SteamGame)g; _hasSteamWorkshopItems = _steamGame.WorkshopItems.Count > 0; }); + */ } protected override async Task _Begin(CancellationToken cancel) diff --git a/Wabbajack.Lib/Wabbajack.Lib.csproj b/Wabbajack.Lib/Wabbajack.Lib.csproj index e5461e62..d5e598a0 100644 --- a/Wabbajack.Lib/Wabbajack.Lib.csproj +++ b/Wabbajack.Lib/Wabbajack.Lib.csproj @@ -101,6 +101,12 @@ PreserveNewest + + + + + + diff --git a/Wabbajack.Test/DownloaderTests.cs b/Wabbajack.Test/DownloaderTests.cs index 0a22b66b..64a7f65b 100644 --- a/Wabbajack.Test/DownloaderTests.cs +++ b/Wabbajack.Test/DownloaderTests.cs @@ -534,7 +534,7 @@ namespace Wabbajack.Test [Fact] public async Task TestUpgrading() { - using var folder = new TempFolder(); + await using var folder = new TempFolder(); var dest = folder.Dir.Combine("Cori.7z"); var archive = new Archive { diff --git a/Wabbajack.Test/FilePickerTests.cs b/Wabbajack.Test/FilePickerTests.cs index 4980af00..6dc337a9 100644 --- a/Wabbajack.Test/FilePickerTests.cs +++ b/Wabbajack.Test/FilePickerTests.cs @@ -25,7 +25,7 @@ namespace Wabbajack.Test public static TempFolder CreateSetFolder(FilePickerVM vm) { - var temp = new TempFolder(); + await var temp = new TempFolder(); Directory.CreateDirectory(temp.Dir.FullName); vm.TargetPath = temp.Dir.FullName; return temp; diff --git a/Wabbajack.Test/MO2Tests.cs b/Wabbajack.Test/MO2Tests.cs index 59665580..c54568fc 100644 --- a/Wabbajack.Test/MO2Tests.cs +++ b/Wabbajack.Test/MO2Tests.cs @@ -1,4 +1,5 @@ using System.IO; +using System.Threading.Tasks; using Wabbajack.Common; using Wabbajack.Lib; using Xunit; @@ -9,53 +10,53 @@ namespace Wabbajack.Test { #region CheckValidInstallPath [Fact] - public void CheckValidInstallPath_Empty() + public async Task CheckValidInstallPath_Empty() { - using var tempDir = new TempFolder(); + await using var tempDir = new TempFolder(); Assert.True(MO2Installer.CheckValidInstallPath(tempDir.Dir, downloadFolder: null).Succeeded); } [Fact] - public void CheckValidInstallPath_DoesNotExist() + public async Task CheckValidInstallPath_DoesNotExist() { - using var tempDir = new TempFolder(); + await using var tempDir = new TempFolder(); Assert.True(MO2Installer.CheckValidInstallPath(tempDir.Dir.Combine("Subfolder"), downloadFolder: null).Succeeded); } [Fact] - public void CheckValidInstallPath_HasModlist() + public async Task CheckValidInstallPath_HasModlist() { - using var tempDir = new TempFolder(); - using var mo2 = tempDir.Dir.Combine("ModOrganizer.exe").Create(); - using var molist = tempDir.Dir.Combine(((RelativePath)"modlist")).WithExtension(Consts.ModListExtension).Create(); + await using var tempDir = new TempFolder(); + await using var mo2 = tempDir.Dir.Combine("ModOrganizer.exe").Create(); + await using var molist = tempDir.Dir.Combine(((RelativePath)"modlist")).WithExtension(Consts.ModListExtension).Create(); Assert.False(MO2Installer.CheckValidInstallPath(tempDir.Dir, downloadFolder: null).Succeeded); } [Fact] - public void CheckValidInstallPath_ProperOverwrite() + public async Task CheckValidInstallPath_ProperOverwrite() { - using var tempDir = new TempFolder(); - using var tmp = tempDir.Dir.Combine(Consts.ModOrganizer2Exe).Create(); + await using var tempDir = new TempFolder(); + await using var tmp = tempDir.Dir.Combine(Consts.ModOrganizer2Exe).Create(); Assert.True(MO2Installer.CheckValidInstallPath(tempDir.Dir, downloadFolder: null).Succeeded); } [Fact] - public void CheckValidInstallPath_ImproperOverwrite() + public async Task CheckValidInstallPath_ImproperOverwrite() { - using var tempDir = new TempFolder(); - tempDir.Dir.DeleteDirectory(); + await using var tempDir = new TempFolder(); + await tempDir.Dir.DeleteDirectory(); tempDir.Dir.CreateDirectory(); - using var tmp = tempDir.Dir.Combine($"someFile.txt").Create(); + await using var tmp = tempDir.Dir.Combine($"someFile.txt").Create(); Assert.False(MO2Installer.CheckValidInstallPath(tempDir.Dir, downloadFolder: null).Succeeded); } [Fact] - public void CheckValidInstallPath_OverwriteFilesInDownloads() + public async Task CheckValidInstallPath_OverwriteFilesInDownloads() { - using var tempDir = new TempFolder(); + await using var tempDir = new TempFolder(); var downloadsFolder = tempDir.Dir.Combine("downloads"); downloadsFolder.CreateDirectory(); - using var tmp = tempDir.Dir.Combine($"downloads/someFile.txt").Create(); + await using var tmp = tempDir.Dir.Combine($"downloads/someFile.txt").Create(); Assert.True(MO2Installer.CheckValidInstallPath(tempDir.Dir, downloadFolder: downloadsFolder).Succeeded); } #endregion diff --git a/Wabbajack.VirtualFileSystem/VirtualFile.cs b/Wabbajack.VirtualFileSystem/VirtualFile.cs index abee3909..8b874715 100644 --- a/Wabbajack.VirtualFileSystem/VirtualFile.cs +++ b/Wabbajack.VirtualFileSystem/VirtualFile.cs @@ -235,7 +235,7 @@ namespace Wabbajack.VirtualFileSystem return stream.FromJSON(); } } - catch (Exception ex) + catch (Exception) { return null; }