mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Temp files now implement IAsyncDisposable instead of IDisposable and use AbsolutePath.DeleteAsync
This commit is contained in:
parent
90d7d3b15c
commit
ea76d88012
@ -37,7 +37,7 @@ namespace Compression.BSA
|
|||||||
|
|
||||||
public async ValueTask DisposeAsync()
|
public async ValueTask DisposeAsync()
|
||||||
{
|
{
|
||||||
_slab.Dispose();
|
await _slab.DisposeAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddFile(FileStateObject state, Stream src)
|
public async Task AddFile(FileStateObject state, Stream src)
|
||||||
|
@ -78,7 +78,7 @@ namespace Compression.BSA
|
|||||||
|
|
||||||
public async ValueTask DisposeAsync()
|
public async ValueTask DisposeAsync()
|
||||||
{
|
{
|
||||||
_slab.Dispose();
|
await _slab.DisposeAsync();
|
||||||
}
|
}
|
||||||
public async Task AddFile(FileStateObject state, Stream src)
|
public async Task AddFile(FileStateObject state, Stream src)
|
||||||
{
|
{
|
||||||
|
@ -47,7 +47,7 @@ namespace Wabbajack.Test
|
|||||||
public async Task FileNoExistsCheck_Exists()
|
public async Task FileNoExistsCheck_Exists()
|
||||||
{
|
{
|
||||||
var vm = new FilePickerVM();
|
var vm = new FilePickerVM();
|
||||||
using (CreateSetFile(vm))
|
await using (CreateSetFile(vm))
|
||||||
{
|
{
|
||||||
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
||||||
vm.ExistCheckOption = FilePickerVM.CheckOptions.Off;
|
vm.ExistCheckOption = FilePickerVM.CheckOptions.Off;
|
||||||
@ -76,7 +76,7 @@ namespace Wabbajack.Test
|
|||||||
public async Task ExistCheckTypeOff_Exists()
|
public async Task ExistCheckTypeOff_Exists()
|
||||||
{
|
{
|
||||||
var vm = new FilePickerVM();
|
var vm = new FilePickerVM();
|
||||||
using (CreateSetFile(vm))
|
await using (CreateSetFile(vm))
|
||||||
{
|
{
|
||||||
vm.PathType = FilePickerVM.PathTypeOptions.Off;
|
vm.PathType = FilePickerVM.PathTypeOptions.Off;
|
||||||
vm.ExistCheckOption = FilePickerVM.CheckOptions.On;
|
vm.ExistCheckOption = FilePickerVM.CheckOptions.On;
|
||||||
@ -119,7 +119,7 @@ namespace Wabbajack.Test
|
|||||||
public async Task FileIfNotEmptyCheck_Exists()
|
public async Task FileIfNotEmptyCheck_Exists()
|
||||||
{
|
{
|
||||||
var vm = new FilePickerVM();
|
var vm = new FilePickerVM();
|
||||||
using (CreateSetFile(vm))
|
await using (CreateSetFile(vm))
|
||||||
{
|
{
|
||||||
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
||||||
vm.ExistCheckOption = FilePickerVM.CheckOptions.IfPathNotEmpty;
|
vm.ExistCheckOption = FilePickerVM.CheckOptions.IfPathNotEmpty;
|
||||||
@ -148,7 +148,7 @@ namespace Wabbajack.Test
|
|||||||
public async Task FileOnExistsCheck_Exists()
|
public async Task FileOnExistsCheck_Exists()
|
||||||
{
|
{
|
||||||
var vm = new FilePickerVM();
|
var vm = new FilePickerVM();
|
||||||
using (CreateSetFile(vm))
|
await using (CreateSetFile(vm))
|
||||||
{
|
{
|
||||||
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
||||||
vm.ExistCheckOption = FilePickerVM.CheckOptions.On;
|
vm.ExistCheckOption = FilePickerVM.CheckOptions.On;
|
||||||
@ -259,7 +259,7 @@ namespace Wabbajack.Test
|
|||||||
public async Task FileExistsButSetToFolder()
|
public async Task FileExistsButSetToFolder()
|
||||||
{
|
{
|
||||||
var vm = new FilePickerVM();
|
var vm = new FilePickerVM();
|
||||||
using (CreateSetFile(vm))
|
await using (CreateSetFile(vm))
|
||||||
{
|
{
|
||||||
vm.PathType = FilePickerVM.PathTypeOptions.Folder;
|
vm.PathType = FilePickerVM.PathTypeOptions.Folder;
|
||||||
vm.ExistCheckOption = FilePickerVM.CheckOptions.On;
|
vm.ExistCheckOption = FilePickerVM.CheckOptions.On;
|
||||||
@ -291,7 +291,7 @@ namespace Wabbajack.Test
|
|||||||
public async Task FileWithFilters_Passes()
|
public async Task FileWithFilters_Passes()
|
||||||
{
|
{
|
||||||
var vm = new FilePickerVM();
|
var vm = new FilePickerVM();
|
||||||
using (CreateSetFile(vm))
|
await using (CreateSetFile(vm))
|
||||||
{
|
{
|
||||||
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
||||||
vm.ExistCheckOption = FilePickerVM.CheckOptions.Off;
|
vm.ExistCheckOption = FilePickerVM.CheckOptions.Off;
|
||||||
@ -308,7 +308,7 @@ namespace Wabbajack.Test
|
|||||||
public async Task FileWithFilters_ExistsButFails()
|
public async Task FileWithFilters_ExistsButFails()
|
||||||
{
|
{
|
||||||
var vm = new FilePickerVM();
|
var vm = new FilePickerVM();
|
||||||
using (CreateSetFile(vm))
|
await using (CreateSetFile(vm))
|
||||||
{
|
{
|
||||||
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
vm.PathType = FilePickerVM.PathTypeOptions.File;
|
||||||
vm.ExistCheckOption = FilePickerVM.CheckOptions.Off;
|
vm.ExistCheckOption = FilePickerVM.CheckOptions.Off;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.IO.MemoryMappedFiles;
|
using System.IO.MemoryMappedFiles;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Wabbajack.Common
|
namespace Wabbajack.Common
|
||||||
{
|
{
|
||||||
@ -9,13 +10,13 @@ namespace Wabbajack.Common
|
|||||||
/// Memory allocator that stores data via memory mapping to a on-disk file. Disposing of this object
|
/// Memory allocator that stores data via memory mapping to a on-disk file. Disposing of this object
|
||||||
/// deletes the memory mapped file
|
/// deletes the memory mapped file
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class DiskSlabAllocator : IDisposable
|
public class DiskSlabAllocator : IAsyncDisposable
|
||||||
{
|
{
|
||||||
private readonly TempFile _file;
|
private readonly TempFile _file;
|
||||||
private readonly MemoryMappedFile _mmap;
|
private readonly MemoryMappedFile _mmap;
|
||||||
private long _head = 0;
|
private long _head = 0;
|
||||||
private readonly FileStream _fileStream;
|
private readonly FileStream _fileStream;
|
||||||
private List<IDisposable> _allocated = new List<IDisposable>();
|
private List<IAsyncDisposable> _allocated = new List<IAsyncDisposable>();
|
||||||
private long _size;
|
private long _size;
|
||||||
|
|
||||||
public DiskSlabAllocator(long size)
|
public DiskSlabAllocator(long size)
|
||||||
@ -44,12 +45,13 @@ namespace Wabbajack.Common
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public async ValueTask DisposeAsync()
|
||||||
{
|
{
|
||||||
_allocated.Do(s => s.Dispose());
|
foreach (var allocated in _allocated)
|
||||||
|
await allocated.DisposeAsync();
|
||||||
_mmap.Dispose();
|
_mmap.Dispose();
|
||||||
_fileStream.Dispose();
|
await _fileStream.DisposeAsync();
|
||||||
_file.Dispose();
|
await _file.DisposeAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ using AlphaPath = Alphaleonis.Win32.Filesystem.Path;
|
|||||||
|
|
||||||
namespace Wabbajack.Common
|
namespace Wabbajack.Common
|
||||||
{
|
{
|
||||||
public class TempFile : IDisposable
|
public class TempFile : IAsyncDisposable
|
||||||
{
|
{
|
||||||
public FileInfo File { get; private set; }
|
public FileInfo File { get; private set; }
|
||||||
public AbsolutePath Path => (AbsolutePath)File.FullName;
|
public AbsolutePath Path => (AbsolutePath)File.FullName;
|
||||||
@ -35,12 +35,11 @@ namespace Wabbajack.Common
|
|||||||
}
|
}
|
||||||
this.DeleteAfter = deleteAfter;
|
this.DeleteAfter = deleteAfter;
|
||||||
}
|
}
|
||||||
|
public async ValueTask DisposeAsync()
|
||||||
public void Dispose()
|
|
||||||
{
|
{
|
||||||
if (DeleteAfter)
|
if (DeleteAfter)
|
||||||
{
|
{
|
||||||
this.File.Delete();
|
await Path.DeleteAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,13 +21,13 @@ namespace Wabbajack.Common
|
|||||||
protected override void Dispose(bool disposing)
|
protected override void Dispose(bool disposing)
|
||||||
{
|
{
|
||||||
base.Dispose(disposing);
|
base.Dispose(disposing);
|
||||||
_file.Dispose();
|
_file.DisposeAsync().AsTask().Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async ValueTask DisposeAsync()
|
public override async ValueTask DisposeAsync()
|
||||||
{
|
{
|
||||||
await base.DisposeAsync();
|
await base.DisposeAsync();
|
||||||
_file.Dispose();
|
await _file.DisposeAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ namespace Wabbajack.Lib.Downloaders
|
|||||||
public override async Task<bool> Download(Archive a, AbsolutePath destination)
|
public override async Task<bool> Download(Archive a, AbsolutePath destination)
|
||||||
{
|
{
|
||||||
var (client, info, collected) = await ResolveDownloadInfo();
|
var (client, info, collected) = await ResolveDownloadInfo();
|
||||||
using var tf = new TempFile();
|
await using var tf = new TempFile();
|
||||||
await using var file = tf.File.Create();
|
await using var file = tf.File.Create();
|
||||||
var max_chunks = info.depot_list[0].file_list[0].chunk_count;
|
var max_chunks = info.depot_list[0].file_list[0].chunk_count;
|
||||||
foreach (var chunk in info.depot_list[0].file_list[0].chunk_list.OrderBy(c => c.index))
|
foreach (var chunk in info.depot_list[0].file_list[0].chunk_list.OrderBy(c => c.index))
|
||||||
|
@ -16,8 +16,8 @@ namespace Wabbajack.BuildServer.Test
|
|||||||
public async Task CanIngestFiles()
|
public async Task CanIngestFiles()
|
||||||
{
|
{
|
||||||
var maintainer = Fixture.GetService<ArchiveMaintainer>();
|
var maintainer = Fixture.GetService<ArchiveMaintainer>();
|
||||||
using var tf = new TempFile();
|
await using var tf = new TempFile();
|
||||||
using var tf2 = new TempFile();
|
await using var tf2 = new TempFile();
|
||||||
|
|
||||||
await tf.Path.WriteAllBytesAsync(RandomData(1024));
|
await tf.Path.WriteAllBytesAsync(RandomData(1024));
|
||||||
await tf.Path.CopyToAsync(tf2.Path);
|
await tf.Path.CopyToAsync(tf2.Path);
|
||||||
@ -35,7 +35,7 @@ namespace Wabbajack.BuildServer.Test
|
|||||||
public async Task IngestsExistingFiles()
|
public async Task IngestsExistingFiles()
|
||||||
{
|
{
|
||||||
var maintainer = Fixture.GetService<ArchiveMaintainer>();
|
var maintainer = Fixture.GetService<ArchiveMaintainer>();
|
||||||
using var tf = new TempFile();
|
await using var tf = new TempFile();
|
||||||
|
|
||||||
await tf.Path.WriteAllBytesAsync(RandomData(1024));
|
await tf.Path.WriteAllBytesAsync(RandomData(1024));
|
||||||
var hash = await tf.Path.FileHashAsync();
|
var hash = await tf.Path.FileHashAsync();
|
||||||
|
@ -20,7 +20,7 @@ namespace Wabbajack.BuildServer.Test
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task CanUploadDownloadAndDeleteAuthoredFiles()
|
public async Task CanUploadDownloadAndDeleteAuthoredFiles()
|
||||||
{
|
{
|
||||||
using var file = new TempFile();
|
await using var file = new TempFile();
|
||||||
await file.Path.WriteAllBytesAsync(RandomData(Consts.UPLOADED_FILE_BLOCK_SIZE * 4 + Consts.UPLOADED_FILE_BLOCK_SIZE / 3));
|
await file.Path.WriteAllBytesAsync(RandomData(Consts.UPLOADED_FILE_BLOCK_SIZE * 4 + Consts.UPLOADED_FILE_BLOCK_SIZE / 3));
|
||||||
var originalHash = await file.Path.FileHashAsync();
|
var originalHash = await file.Path.FileHashAsync();
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ namespace Wabbajack.Server.Test
|
|||||||
await"TestEndToEndArchiveUpdating.txt".RelativeTo(Fixture.ServerPublicFolder).WriteAllBytesAsync(newFileData);
|
await"TestEndToEndArchiveUpdating.txt".RelativeTo(Fixture.ServerPublicFolder).WriteAllBytesAsync(newFileData);
|
||||||
|
|
||||||
|
|
||||||
using var tempFile = new TempFile();
|
await using var tempFile = new TempFile();
|
||||||
var pendingRequest = DownloadDispatcher.DownloadWithPossibleUpgrade(oldArchive, tempFile.Path);
|
var pendingRequest = DownloadDispatcher.DownloadWithPossibleUpgrade(oldArchive, tempFile.Path);
|
||||||
|
|
||||||
for (var times = 0; await downloader.Execute() == 0 && times < 40; times ++)
|
for (var times = 0; await downloader.Execute() == 0 && times < 40; times ++)
|
||||||
@ -124,7 +124,7 @@ namespace Wabbajack.Server.Test
|
|||||||
|
|
||||||
private async Task IngestData(ArchiveMaintainer am, byte[] data)
|
private async Task IngestData(ArchiveMaintainer am, byte[] data)
|
||||||
{
|
{
|
||||||
using var f = new TempFile();
|
await using var f = new TempFile();
|
||||||
await f.Path.WriteAllBytesAsync(data);
|
await f.Path.WriteAllBytesAsync(data);
|
||||||
await am.Ingest(f.Path);
|
await am.Ingest(f.Path);
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ namespace Wabbajack.Server.Services
|
|||||||
_logger.Log(LogLevel.Information, $"Downloading {nextDownload.Archive.State.PrimaryKeyString}");
|
_logger.Log(LogLevel.Information, $"Downloading {nextDownload.Archive.State.PrimaryKeyString}");
|
||||||
await DownloadDispatcher.PrepareAll(new[] {nextDownload.Archive.State});
|
await DownloadDispatcher.PrepareAll(new[] {nextDownload.Archive.State});
|
||||||
|
|
||||||
using var tempPath = new TempFile();
|
await using var tempPath = new TempFile();
|
||||||
await nextDownload.Archive.State.Download(nextDownload.Archive, tempPath.Path);
|
await nextDownload.Archive.State.Download(nextDownload.Archive, tempPath.Path);
|
||||||
|
|
||||||
var hash = await tempPath.Path.FileHashAsync();
|
var hash = await tempPath.Path.FileHashAsync();
|
||||||
|
@ -184,7 +184,7 @@ namespace Wabbajack.Server.Services
|
|||||||
_logger.Log(LogLevel.Information, $"Enqueued Patch from {srcDownload.Archive.Hash} to {destDownload.Archive.Hash}");
|
_logger.Log(LogLevel.Information, $"Enqueued Patch from {srcDownload.Archive.Hash} to {destDownload.Archive.Hash}");
|
||||||
await _discord.Send(Channel.Spam, new DiscordMessage { Content = $"Enqueued Patch from {srcDownload.Archive.Hash} to {destDownload.Archive.Hash}" });
|
await _discord.Send(Channel.Spam, new DiscordMessage { Content = $"Enqueued Patch from {srcDownload.Archive.Hash} to {destDownload.Archive.Hash}" });
|
||||||
|
|
||||||
upgrade.NewFile.Dispose();
|
await upgrade.NewFile.DisposeAsync();
|
||||||
|
|
||||||
return (archive, ArchiveStatus.Updating);
|
return (archive, ArchiveStatus.Updating);
|
||||||
}
|
}
|
||||||
|
@ -68,8 +68,8 @@ namespace Wabbajack.Server.Services
|
|||||||
|
|
||||||
var patchName = $"{Consts.ArchiveUpdatesCDNFolder}\\{patch.Src.Archive.Hash.ToHex()}_{patch.Dest.Archive.Hash.ToHex()}";
|
var patchName = $"{Consts.ArchiveUpdatesCDNFolder}\\{patch.Src.Archive.Hash.ToHex()}_{patch.Dest.Archive.Hash.ToHex()}";
|
||||||
|
|
||||||
using var sigFile = new TempFile();
|
await using var sigFile = new TempFile();
|
||||||
using var patchFile = new TempFile();
|
await using var patchFile = new TempFile();
|
||||||
await using var srcStream = await srcPath.OpenShared();
|
await using var srcStream = await srcPath.OpenShared();
|
||||||
await using var destStream = await destPath.OpenShared();
|
await using var destStream = await destPath.OpenShared();
|
||||||
await using var sigStream = await sigFile.Path.Create();
|
await using var sigStream = await sigFile.Path.Create();
|
||||||
|
@ -69,7 +69,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!){Size = 20}));
|
Assert.True(await converted.Verify(new Archive(state: null!){Size = 20}));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist {AllowedPrefixes = new List<string>{"https://mega.nz/#!CsMSFaaJ!-uziC4mbJPRy2e4pPk8Gjb3oDT_38Be9fzZ6Ld4NL-k" } }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist {AllowedPrefixes = new List<string>{"https://mega.nz/#!CsMSFaaJ!-uziC4mbJPRy2e4pPk8Gjb3oDT_38Be9fzZ6Ld4NL-k" } }));
|
||||||
Assert.False(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>{ "blerg" }}));
|
Assert.False(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>{ "blerg" }}));
|
||||||
@ -99,7 +99,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!){Size = 20}));
|
Assert.True(await converted.Verify(new Archive(state: null!){Size = 20}));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string> { "https://www.dropbox.com/s/5hov3m2pboppoc2/WABBAJACK_TEST_FILE.txt?" } }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string> { "https://www.dropbox.com/s/5hov3m2pboppoc2/WABBAJACK_TEST_FILE.txt?" } }));
|
||||||
Assert.False(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string> { "blerg" } }));
|
Assert.False(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string> { "blerg" } }));
|
||||||
@ -129,7 +129,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { GoogleIDs = new List<string> { "1grLRTrpHxlg7VPxATTFNfq2OkU_Plvh_" } }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { GoogleIDs = new List<string> { "1grLRTrpHxlg7VPxATTFNfq2OkU_Plvh_" } }));
|
||||||
Assert.False(converted.IsWhitelisted(new ServerWhitelist { GoogleIDs = new List<string>()}));
|
Assert.False(converted.IsWhitelisted(new ServerWhitelist { GoogleIDs = new List<string>()}));
|
||||||
@ -158,7 +158,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string> { "http://build.wabbajack.org/" } }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string> { "http://build.wabbajack.org/" } }));
|
||||||
Assert.False(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
Assert.False(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
||||||
@ -182,7 +182,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string> { "http://build.wabbajack.org/" } }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string> { "http://build.wabbajack.org/" } }));
|
||||||
|
|
||||||
@ -212,7 +212,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20 }));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20 }));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist
|
||||||
{AllowedPrefixes = new List<string> {"http://www.mediafire.com/file/agiqzm1xwebczpx/"}}));
|
{AllowedPrefixes = new List<string> {"http://www.mediafire.com/file/agiqzm1xwebczpx/"}}));
|
||||||
@ -241,7 +241,7 @@ namespace Wabbajack.Test
|
|||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20 }));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20 }));
|
||||||
// Exercise the cache code
|
// Exercise the cache code
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20 }));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20 }));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
||||||
|
|
||||||
@ -300,7 +300,7 @@ namespace Wabbajack.Test
|
|||||||
Assert.False(await converted.Verify(new Archive(state: null!) { Size = 15}));
|
Assert.False(await converted.Verify(new Archive(state: null!) { Size = 15}));
|
||||||
|
|
||||||
|
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
||||||
|
|
||||||
await converted.Download(new Archive(state: null!) { Name = "LoversLab Test.txt" }, filename.Path);
|
await converted.Download(new Archive(state: null!) { Name = "LoversLab Test.txt" }, filename.Path);
|
||||||
@ -327,7 +327,7 @@ namespace Wabbajack.Test
|
|||||||
*/
|
*/
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
||||||
|
|
||||||
@ -352,7 +352,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
||||||
|
|
||||||
@ -404,7 +404,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
var converted = RoundTripState(state);
|
var converted = RoundTripState(state);
|
||||||
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
Assert.True(await converted.Verify(new Archive(state: null!) { Size = 20}));
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
||||||
|
|
||||||
@ -425,7 +425,7 @@ namespace Wabbajack.Test
|
|||||||
var ini = $@"[General]
|
var ini = $@"[General]
|
||||||
directURL=https://bethesda.net/en/mods/skyrim/mod-detail/4145641";
|
directURL=https://bethesda.net/en/mods/skyrim/mod-detail/4145641";
|
||||||
|
|
||||||
using var filename = new TempFile();
|
await using var filename = new TempFile();
|
||||||
var state = (AbstractDownloadState)await DownloadDispatcher.ResolveArchive(ini.LoadIniString());
|
var state = (AbstractDownloadState)await DownloadDispatcher.ResolveArchive(ini.LoadIniString());
|
||||||
Assert.NotNull(state);
|
Assert.NotNull(state);
|
||||||
|
|
||||||
@ -463,7 +463,7 @@ namespace Wabbajack.Test
|
|||||||
|
|
||||||
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
Assert.True(converted.IsWhitelisted(new ServerWhitelist { AllowedPrefixes = new List<string>() }));
|
||||||
|
|
||||||
using var tempFile = new TempFile();
|
await using var tempFile = new TempFile();
|
||||||
await converted.Download(new Archive(state: null!) { Name = "yt_test.zip"}, tempFile.Path);
|
await converted.Download(new Archive(state: null!) { Name = "yt_test.zip"}, tempFile.Path);
|
||||||
Assert.Equal(Hash.FromBase64("kD36zbA2X9Q="), await tempFile.Path.FileHashAsync());
|
Assert.Equal(Hash.FromBase64("kD36zbA2X9Q="), await tempFile.Path.FileHashAsync());
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ namespace Wabbajack.Test
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task DownloadResume()
|
public async Task DownloadResume()
|
||||||
{
|
{
|
||||||
using var testFile = new TempFile();
|
await using var testFile = new TempFile();
|
||||||
using var server = new CrappyRandomServer();
|
using var server = new CrappyRandomServer();
|
||||||
var state = new HTTPDownloader.State($"http://localhost:{server.Port}/foo");
|
var state = new HTTPDownloader.State($"http://localhost:{server.Port}/foo");
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ namespace Wabbajack.Test
|
|||||||
await utils.Configure();
|
await utils.Configure();
|
||||||
|
|
||||||
|
|
||||||
using var tempFile = new TempFile();
|
await using var tempFile = new TempFile();
|
||||||
var bsaState = new BSAStateObject
|
var bsaState = new BSAStateObject
|
||||||
{
|
{
|
||||||
Magic = "BSA\0", Version = 0x69, ArchiveFlags = 0x107, FileFlags = 0x0,
|
Magic = "BSA\0", Version = 0x69, ArchiveFlags = 0x107, FileFlags = 0x0,
|
||||||
@ -307,7 +307,7 @@ namespace Wabbajack.Test
|
|||||||
await utils.Configure();
|
await utils.Configure();
|
||||||
|
|
||||||
|
|
||||||
using var tempFile = new TempFile();
|
await using var tempFile = new TempFile();
|
||||||
var bsaState = new BSAStateObject
|
var bsaState = new BSAStateObject
|
||||||
{
|
{
|
||||||
Magic = "BSA\0", Version = 0x69, ArchiveFlags = 0x107, FileFlags = 0x0,
|
Magic = "BSA\0", Version = 0x69, ArchiveFlags = 0x107, FileFlags = 0x0,
|
||||||
@ -348,7 +348,7 @@ namespace Wabbajack.Test
|
|||||||
await utils.Configure();
|
await utils.Configure();
|
||||||
|
|
||||||
|
|
||||||
using var tempFile = new TempFile();
|
await using var tempFile = new TempFile();
|
||||||
var bsaState = new BSAStateObject
|
var bsaState = new BSAStateObject
|
||||||
{
|
{
|
||||||
Magic = "BSA\0", Version = 0x69, ArchiveFlags = 0x107, FileFlags = 0x0,
|
Magic = "BSA\0", Version = 0x69, ArchiveFlags = 0x107, FileFlags = 0x0,
|
||||||
@ -389,7 +389,7 @@ namespace Wabbajack.Test
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create the download
|
// Create the download
|
||||||
using var tempFile = new TempFile();
|
await using var tempFile = new TempFile();
|
||||||
await using (var bsa = bsaState.MakeBuilder(1024 * 1024))
|
await using (var bsa = bsaState.MakeBuilder(1024 * 1024))
|
||||||
{
|
{
|
||||||
await bsa.AddFile(new BSAFileStateObject
|
await bsa.AddFile(new BSAFileStateObject
|
||||||
|
@ -184,7 +184,11 @@ namespace Wabbajack.VirtualFileSystem
|
|||||||
Utils.Status($"Extracting {source.FileName} - done", Percent.One, alsoLog: true);
|
Utils.Status($"Extracting {source.FileName} - done", Percent.One, alsoLog: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpFile?.Dispose();
|
if (tmpFile != null)
|
||||||
|
{
|
||||||
|
await tmpFile.DisposeAsync();
|
||||||
|
}
|
||||||
|
|
||||||
return new ExtractedFiles(dest);
|
return new ExtractedFiles(dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user