add compression task to handle creating 7z file

This commit is contained in:
IsWaffle 2024-03-28 13:01:02 -04:00
parent 1b0acdc262
commit 8d62adb25e
8 changed files with 167 additions and 3 deletions

View File

@ -5,8 +5,8 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<AssemblyVersion>1.5.6</AssemblyVersion> <AssemblyVersion>1.5.7</AssemblyVersion>
<FileVersion>1.5.6</FileVersion> <FileVersion>1.5.7</FileVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -19,6 +19,7 @@
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Spectre.Console" Version="0.44.0" /> <PackageReference Include="Spectre.Console" Version="0.44.0" />
<PackageReference Include="Squid-Box.SevenZipSharp" Version="1.6.1.23" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -36,4 +37,9 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Remove="Resources\7z.dll" />
<EmbeddedResource Include="Resources\7z.dll" />
</ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,44 @@
using System.Reflection;
using Spectre.Console;
namespace EftPatchHelper.Helpers;
public class FileHelper
{
public bool StreamAssemblyResourceOut(string resourceName, string outputFilePath)
{
try
{
var assembly = Assembly.GetExecutingAssembly();
FileInfo outputFile = new FileInfo(outputFilePath);
if (outputFile.Exists)
{
outputFile.Delete();
}
if (!outputFile.Directory.Exists)
{
Directory.CreateDirectory(outputFile.Directory.FullName);
}
var resName = assembly.GetManifestResourceNames().First(x => x.EndsWith(resourceName));
using (FileStream fs = File.Create(outputFilePath))
using (Stream s = assembly.GetManifestResourceStream(resName))
{
s.CopyTo(fs);
}
outputFile.Refresh();
return outputFile.Exists;
}
catch (Exception ex)
{
AnsiConsole.WriteException(ex);
return false;
}
}
}

View File

@ -0,0 +1,45 @@
using SevenZip;
using Spectre.Console;
namespace EftPatchHelper.Helpers;
public class ZipHelper
{
public string DllPath = Path.Join(Environment.CurrentDirectory, "7z.dll");
public bool Compress(DirectoryInfo folder, FileInfo outputArchive,
IProgress<double> progress)
{
try
{
using var outputStream = outputArchive.OpenWrite();
SevenZipBase.SetLibraryPath(DllPath);
var compressor = new SevenZipCompressor()
{
CompressionLevel = CompressionLevel.Normal,
CompressionMethod = CompressionMethod.Lzma2,
ArchiveFormat = OutArchiveFormat.SevenZip
};
compressor.Compressing += (_, args) => { progress.Report(args.PercentDone); };
compressor.CompressDirectory(folder.FullName, outputStream);
outputArchive.Refresh();
if (!outputArchive.Exists)
{
AnsiConsole.MarkupLine("output archive not found");
return false;
}
return true;
}
catch (Exception ex)
{
AnsiConsole.WriteException(ex);
return false;
}
}
}

View File

@ -0,0 +1,5 @@
namespace EftPatchHelper.Interfaces;
public interface ICompressPatcherTask : ITaskable
{
}

View File

@ -92,6 +92,7 @@ namespace EftPatchHelper
services.AddTransient<IFileProcessingTasks, FileProcessingTasks>(); services.AddTransient<IFileProcessingTasks, FileProcessingTasks>();
services.AddTransient<IPatchGenTasks, PatchGenTasks>(); services.AddTransient<IPatchGenTasks, PatchGenTasks>();
services.AddTransient<IPatchTestingTasks, PatchTestingTasks>(); services.AddTransient<IPatchTestingTasks, PatchTestingTasks>();
services.AddTransient<ICompressPatcherTask, CompressPatcherTask>();
services.AddTransient<IReleaseCreator, CreateReleaseTasks>(); services.AddTransient<IReleaseCreator, CreateReleaseTasks>();
services.AddTransient<IUploadTasks, UploadTasks>(); services.AddTransient<IUploadTasks, UploadTasks>();
services.AddTransient<Program>(); services.AddTransient<Program>();

Binary file not shown.

View File

@ -0,0 +1,64 @@
using EftPatchHelper.Extensions;
using EftPatchHelper.Helpers;
using EftPatchHelper.Interfaces;
using EftPatchHelper.Model;
using Spectre.Console;
namespace EftPatchHelper.Tasks;
public class CompressPatcherTask : ICompressPatcherTask
{
private Options _options;
private FileHelper _fileHelper;
private ZipHelper _zipHelper;
public CompressPatcherTask(Options options, FileHelper fileHelper, ZipHelper zipHelper)
{
_options = options;
_fileHelper = fileHelper;
_zipHelper = zipHelper;
}
public bool CompressPatcher()
{
AnsiConsole.Progress()
.Columns(new ProgressColumn[]
{
new TaskDescriptionColumn(),
new ProgressBarColumn(),
new PercentageColumn(),
new ElapsedTimeColumn(),
new SpinnerColumn(Spinner.Known.Dots2)
})
.Start(ctx =>
{
var compressionTask = ctx.AddTask("Compressing Patcher");
compressionTask.MaxValue = 100;
if (!_fileHelper.StreamAssemblyResourceOut("7z.dll", _zipHelper.DllPath))
{
return false;
}
var patchFolder = new DirectoryInfo(_options.OutputPatchPath);
if (!patchFolder.Exists)
{
return false;
}
var patchArchiveFile = new FileInfo(_options.OutputPatchPath + ".7z");
var progress = new Progress<double>(p => { compressionTask.Increment(p - compressionTask.Percentage);});
return _zipHelper.Compress(patchFolder, patchArchiveFile, progress);
});
return false;
}
public void Run()
{
CompressPatcher().ValidateOrExit();
}
}

View File

@ -48,7 +48,6 @@ namespace EftPatchHelper.Tasks
$"OutputFolderName::{patcherOutputName}", $"OutputFolderName::{patcherOutputName}",
$"SourceFolderPath::{_options.SourceClient.PrepPath}", $"SourceFolderPath::{_options.SourceClient.PrepPath}",
$"TargetFolderPath::{_options.TargetClient.PrepPath}", $"TargetFolderPath::{_options.TargetClient.PrepPath}",
$"AutoZip::{_settings.AutoZip}",
$"AutoClose::{_settings.AutoClose}" $"AutoClose::{_settings.AutoClose}"
} }
}); });