Merge pull request #770 from Noggog/temp-folder-init

Adjusted TempFolder init concepts
This commit is contained in:
Timothy Baldridge 2020-04-28 14:51:16 -06:00 committed by GitHub
commit 690b2765e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 31 additions and 26 deletions

View File

@ -191,7 +191,7 @@ namespace Wabbajack.Test
public async Task FolderIfNotEmptyCheck_Exists()
{
var vm = new FilePickerVM();
await using (CreateSetFolder(vm))
await using (await CreateSetFolder(vm))
{
vm.PathType = FilePickerVM.PathTypeOptions.Folder;
vm.ExistCheckOption = FilePickerVM.CheckOptions.IfPathNotEmpty;
@ -220,7 +220,7 @@ namespace Wabbajack.Test
public async Task FolderOnExistsCheck_Exists()
{
var vm = new FilePickerVM();
await using (CreateSetFolder(vm))
await using (await CreateSetFolder(vm))
{
vm.PathType = FilePickerVM.PathTypeOptions.Folder;
vm.ExistCheckOption = FilePickerVM.CheckOptions.On;
@ -275,7 +275,7 @@ namespace Wabbajack.Test
public async Task FolderExistsButSetToFile()
{
var vm = new FilePickerVM();
await using (CreateSetFolder(vm))
await using (await CreateSetFolder(vm))
{
vm.PathType = FilePickerVM.PathTypeOptions.File;
vm.ExistCheckOption = FilePickerVM.CheckOptions.On;
@ -353,9 +353,9 @@ namespace Wabbajack.Test
Assert.True(string.IsNullOrEmpty(vm.ErrorTooltip));
}
private static TempFolder CreateSetFolder(FilePickerVM vm)
private static async Task<TempFolder> CreateSetFolder(FilePickerVM vm)
{
var temp = new TempFolder();
var temp = await TempFolder.Create();
vm.TargetPath = temp.Dir;
return temp;
}

View File

@ -21,7 +21,7 @@ namespace Wabbajack.BuildServer.Test
private CancellationTokenSource _token;
private Task _task;
public readonly TempFolder _severTempFolder = new TempFolder();
public readonly TempFolder _severTempFolder = TempFolder.Create().Result;
private bool _disposed = false;
public AbsolutePath ServerTempFolder => _severTempFolder.Dir;

View File

@ -15,24 +15,28 @@ namespace Wabbajack.Common
static TempFolder()
{
_cleanTask = "tmp_files".RelativeTo(AbsolutePath.EntryPoint).DeleteDirectory();
_cleanTask = Task.Run(() => "tmp_files".RelativeTo(AbsolutePath.EntryPoint).DeleteDirectory());
}
public static async Task EnsureInited()
public static void Init()
{
Utils.Log("Cleaning temp files");
await _cleanTask;
// Nothing to do, as work is done in static ctor
}
public TempFolder(bool deleteAfter = true)
private TempFolder(bool deleteAfter = true)
{
_cleanTask.Wait();
Dir = Path.Combine("tmp_files", Guid.NewGuid().ToString()).RelativeTo(AbsolutePath.EntryPoint);
if (!Dir.Exists)
Dir.CreateDirectory();
DeleteAfter = deleteAfter;
}
public static async Task<TempFolder> Create(bool deleteAfter = true)
{
await _cleanTask;
return new TempFolder(deleteAfter: deleteAfter);
}
public TempFolder(AbsolutePath dir, bool deleteAfter = true)
{
Dir = dir;
@ -42,6 +46,7 @@ namespace Wabbajack.Common
}
DeleteAfter = deleteAfter;
}
public async ValueTask DisposeAsync()
{
Utils.Log($"Deleting {Dir}");

View File

@ -102,7 +102,7 @@ namespace Wabbajack.Lib.Downloaders
try
{
using var queue = new WorkQueue();
await using var folder = new TempFolder();
await using var folder = await TempFolder.Create();
folder.Dir.Combine("tracks").CreateDirectory();
var client = new YoutubeClient(Common.Http.ClientFactory.Client);
var meta = await client.Videos.GetAsync(Key);

View File

@ -531,7 +531,7 @@ namespace Wabbajack.Test
[Fact]
public async Task TestUpgrading()
{
await using var folder = new TempFolder();
await using var folder = await TempFolder.Create();
var dest = folder.Dir.Combine("Cori.7z");
var archive = new Archive(
new NexusDownloader.State

View File

@ -12,21 +12,21 @@ namespace Wabbajack.Test
[Fact]
public async Task CheckValidInstallPath_Empty()
{
await using var tempDir = new TempFolder();
await using var tempDir = await TempFolder.Create();
Assert.True(MO2Installer.CheckValidInstallPath(tempDir.Dir, downloadFolder: null).Succeeded);
}
[Fact]
public async Task CheckValidInstallPath_DoesNotExist()
{
await using var tempDir = new TempFolder();
await using var tempDir = await TempFolder.Create();
Assert.True(MO2Installer.CheckValidInstallPath(tempDir.Dir.Combine("Subfolder"), downloadFolder: null).Succeeded);
}
[Fact]
public async Task CheckValidInstallPath_HasModlist()
{
await using var tempDir = new TempFolder();
await using var tempDir = await TempFolder.Create();
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);
@ -35,7 +35,7 @@ namespace Wabbajack.Test
[Fact]
public async Task CheckValidInstallPath_ProperOverwrite()
{
await using var tempDir = new TempFolder();
await using var tempDir = await TempFolder.Create();
await using var tmp = tempDir.Dir.Combine(Consts.ModOrganizer2Exe).Create();
Assert.True(MO2Installer.CheckValidInstallPath(tempDir.Dir, downloadFolder: null).Succeeded);
}
@ -43,7 +43,7 @@ namespace Wabbajack.Test
[Fact]
public async Task CheckValidInstallPath_ImproperOverwrite()
{
await using var tempDir = new TempFolder();
await using var tempDir = await TempFolder.Create();
await tempDir.Dir.DeleteDirectory();
tempDir.Dir.CreateDirectory();
await using var tmp = tempDir.Dir.Combine($"someFile.txt").Create();
@ -53,7 +53,7 @@ namespace Wabbajack.Test
[Fact]
public async Task CheckValidInstallPath_OverwriteFilesInDownloads()
{
await using var tempDir = new TempFolder();
await using var tempDir = await TempFolder.Create();
var downloadsFolder = tempDir.Dir.Combine("downloads");
downloadsFolder.CreateDirectory();
await using var tmp = tempDir.Dir.Combine($"downloads/someFile.txt").Create();

View File

@ -25,7 +25,7 @@ namespace Wabbajack.VirtualFileSystem
if (Consts.SupportedBSAs.Contains(source.Extension))
return await ExtractAllWithBSA(queue, source);
else if (source.Extension == Consts.OMOD)
return ExtractAllWithOMOD(source);
return await ExtractAllWithOMOD(source);
else if (source.Extension == Consts.EXE)
return await ExtractAllExe(source);
else
@ -47,7 +47,7 @@ namespace Wabbajack.VirtualFileSystem
return await ExtractAllWith7Zip(source, null);
}
var dest = new TempFolder();
var dest = await TempFolder.Create();
Utils.Log($"Extracting {(string)source.FileName}");
var process = new ProcessHelper
@ -94,9 +94,9 @@ namespace Wabbajack.VirtualFileSystem
}
}
private static ExtractedFiles ExtractAllWithOMOD(AbsolutePath source)
private static async Task<ExtractedFiles> ExtractAllWithOMOD(AbsolutePath source)
{
var dest = new TempFolder();
var dest = await TempFolder.Create();
Utils.Log($"Extracting {(string)source.FileName}");
Framework.Settings.TempPath = (string)dest.Dir;
@ -128,7 +128,7 @@ namespace Wabbajack.VirtualFileSystem
private static async Task<ExtractedFiles> ExtractAllWith7Zip(AbsolutePath source, IEnumerable<RelativePath> onlyFiles)
{
TempFile tmpFile = null;
var dest = new TempFolder();
var dest = await TempFolder.Create();
Utils.Log(new GenericInfo($"Extracting {(string)source.FileName}", $"The contents of {(string)source.FileName} are being extracted to {(string)source.FileName} using 7zip.exe"));
var process = new ProcessHelper

View File

@ -20,7 +20,6 @@ namespace Wabbajack
{
public App()
{
TempFolder.EnsureInited();
CLIOld.ParseOptions(Environment.GetCommandLineArgs());
if (CLIArguments.Help)
CLIOld.DisplayHelpText();

View File

@ -23,6 +23,7 @@ namespace Wabbajack
public MainWindow()
{
TempFolder.Init();
Helpers.Init();
// Wire any unhandled crashing exceptions to log before exiting
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>