diff --git a/EftPatchHelper/EftPatchHelper/EftPatchHelper.csproj b/EftPatchHelper/EftPatchHelper/EftPatchHelper.csproj index 5804d1d..b7ceda2 100644 --- a/EftPatchHelper/EftPatchHelper/EftPatchHelper.csproj +++ b/EftPatchHelper/EftPatchHelper/EftPatchHelper.csproj @@ -5,8 +5,8 @@ net8.0 enable enable - 1.5.6 - 1.5.6 + 1.5.8 + 1.5.8 @@ -19,6 +19,7 @@ + @@ -36,4 +37,9 @@ + + + + + diff --git a/EftPatchHelper/EftPatchHelper/Helpers/FileHelper.cs b/EftPatchHelper/EftPatchHelper/Helpers/FileHelper.cs new file mode 100644 index 0000000..d91af5c --- /dev/null +++ b/EftPatchHelper/EftPatchHelper/Helpers/FileHelper.cs @@ -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; + } + } + +} \ No newline at end of file diff --git a/EftPatchHelper/EftPatchHelper/Helpers/ZipHelper.cs b/EftPatchHelper/EftPatchHelper/Helpers/ZipHelper.cs new file mode 100644 index 0000000..664d68c --- /dev/null +++ b/EftPatchHelper/EftPatchHelper/Helpers/ZipHelper.cs @@ -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 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; + } + } +} \ No newline at end of file diff --git a/EftPatchHelper/EftPatchHelper/Interfaces/ICompressPatcherTasks.cs b/EftPatchHelper/EftPatchHelper/Interfaces/ICompressPatcherTasks.cs new file mode 100644 index 0000000..e06b9dd --- /dev/null +++ b/EftPatchHelper/EftPatchHelper/Interfaces/ICompressPatcherTasks.cs @@ -0,0 +1,5 @@ +namespace EftPatchHelper.Interfaces; + +public interface ICompressPatcherTasks : ITaskable +{ +} \ No newline at end of file diff --git a/EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs b/EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs index 3ec7941..887480c 100644 --- a/EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs +++ b/EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs @@ -30,7 +30,7 @@ namespace EftPatchHelper.Model _folderId = folderId; UploadFileInfo = file; ServiceName = "GoFile"; - DisplayName = $"{ServiceName} Upload: {UploadFileInfo.Name}"; + DisplayName = $"{ServiceName} Upload"; HubEntryText = $"Download from {ServiceName}"; AddHubEntry = true; } diff --git a/EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs b/EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs index 87583d2..2109377 100644 --- a/EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs +++ b/EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs @@ -27,7 +27,7 @@ namespace EftPatchHelper.Model _email = email; _password = password; ServiceName = "Mega"; - DisplayName = $"{ServiceName} Upload: {UploadFileInfo.Name}"; + DisplayName = $"{ServiceName} Upload"; HubEntryText = $"Download from {ServiceName}"; AddHubEntry = true; } diff --git a/EftPatchHelper/EftPatchHelper/Model/SftpUpload.cs b/EftPatchHelper/EftPatchHelper/Model/SftpUpload.cs index 696716f..5e063da 100644 --- a/EftPatchHelper/EftPatchHelper/Model/SftpUpload.cs +++ b/EftPatchHelper/EftPatchHelper/Model/SftpUpload.cs @@ -30,7 +30,7 @@ public class SftpUpload : IFileUpload }; ServiceName = _sftpInfo.Hostname; - DisplayName = $"{ServiceName} Upload: {UploadFileInfo.Name}"; + DisplayName = $"{ServiceName} Upload"; HubEntryText = $"Download from {ServiceName}"; AddHubEntry = false; } diff --git a/EftPatchHelper/EftPatchHelper/Program.cs b/EftPatchHelper/EftPatchHelper/Program.cs index 2c4aac3..0df99de 100644 --- a/EftPatchHelper/EftPatchHelper/Program.cs +++ b/EftPatchHelper/EftPatchHelper/Program.cs @@ -20,6 +20,7 @@ namespace EftPatchHelper ITaskable _fileProcessingTasks; ITaskable _patchGenTasks; ITaskable _patchTestingTasks; + private ITaskable _compressPatcherTasks; ITaskable _createReleaseTasks; ITaskable _uploadTasks; @@ -45,6 +46,7 @@ namespace EftPatchHelper IFileProcessingTasks fileProcessingTasks, IPatchGenTasks patchGenTasks, IPatchTestingTasks patchTestingTasks, + ICompressPatcherTasks compressPatcherTasks, IUploadTasks uploadTasks, IReleaseCreator createReleaseTasks ) @@ -55,6 +57,7 @@ namespace EftPatchHelper _fileProcessingTasks = fileProcessingTasks; _patchGenTasks = patchGenTasks; _patchTestingTasks = patchTestingTasks; + _compressPatcherTasks = compressPatcherTasks; _createReleaseTasks = createReleaseTasks; _uploadTasks = uploadTasks; } @@ -67,6 +70,7 @@ namespace EftPatchHelper _fileProcessingTasks.Run(); _patchGenTasks.Run(); _patchTestingTasks.Run(); + _compressPatcherTasks.Run(); _uploadTasks.Run(); _createReleaseTasks.Run(); } @@ -84,6 +88,9 @@ namespace EftPatchHelper return settings; }); + services.AddSingleton(); + services.AddSingleton(); + services.AddScoped(); services.AddTransient(); @@ -92,6 +99,7 @@ namespace EftPatchHelper services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/EftPatchHelper/EftPatchHelper/Resources/7z.dll b/EftPatchHelper/EftPatchHelper/Resources/7z.dll new file mode 100644 index 0000000..2ba9f27 Binary files /dev/null and b/EftPatchHelper/EftPatchHelper/Resources/7z.dll differ diff --git a/EftPatchHelper/EftPatchHelper/Tasks/CompressPatcherTasks.cs b/EftPatchHelper/EftPatchHelper/Tasks/CompressPatcherTasks.cs new file mode 100644 index 0000000..b4b1ab3 --- /dev/null +++ b/EftPatchHelper/EftPatchHelper/Tasks/CompressPatcherTasks.cs @@ -0,0 +1,63 @@ +using EftPatchHelper.Extensions; +using EftPatchHelper.Helpers; +using EftPatchHelper.Interfaces; +using EftPatchHelper.Model; +using Spectre.Console; + +namespace EftPatchHelper.Tasks; + +public class CompressPatcherTasks : ICompressPatcherTasks +{ + private Options _options; + private FileHelper _fileHelper; + private ZipHelper _zipHelper; + + public CompressPatcherTasks(Options options, FileHelper fileHelper, ZipHelper zipHelper) + { + _options = options; + _fileHelper = fileHelper; + _zipHelper = zipHelper; + } + + public bool CompressPatcher() + { + return 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); + + var patchArchiveFile = new FileInfo(_options.OutputPatchPath + ".7z"); + + if (!patchFolder.Exists) + { + return false; + } + + var progress = new Progress(p => { compressionTask.Increment(p - compressionTask.Percentage);}); + + return _zipHelper.Compress(patchFolder, patchArchiveFile, progress); + }); + } + + public void Run() + { + CompressPatcher().ValidateOrExit(); + } +} \ No newline at end of file diff --git a/EftPatchHelper/EftPatchHelper/Tasks/PatchGenTasks.cs b/EftPatchHelper/EftPatchHelper/Tasks/PatchGenTasks.cs index 250904d..87ab931 100644 --- a/EftPatchHelper/EftPatchHelper/Tasks/PatchGenTasks.cs +++ b/EftPatchHelper/EftPatchHelper/Tasks/PatchGenTasks.cs @@ -48,7 +48,7 @@ namespace EftPatchHelper.Tasks $"OutputFolderName::{patcherOutputName}", $"SourceFolderPath::{_options.SourceClient.PrepPath}", $"TargetFolderPath::{_options.TargetClient.PrepPath}", - $"AutoZip::{_settings.AutoZip}", + $"AutoZip::false", $"AutoClose::{_settings.AutoClose}" } }); diff --git a/EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs b/EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs index 04ca816..fae6559 100644 --- a/EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs +++ b/EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs @@ -45,7 +45,7 @@ namespace EftPatchHelper.Tasks { var gofile = new GoFileUpload(patcherFile, _settings.GoFileApiKey, _settings.GoFileFolderId); _fileUploads.Add(gofile); - AnsiConsole.WriteLine("Added MEGA"); + AnsiConsole.WriteLine("Added GoFile"); } if (_settings.SftpUploads.Count > 0 && _options.UploadToSftpSites) @@ -134,6 +134,8 @@ namespace EftPatchHelper.Tasks { return false; } + + AnsiConsole.MarkupLine($"[blue]Starting {_fileUploads[0].UploadFileInfo.Name} uploads ...[/]"); var succeeded = await AnsiConsole.Progress().Columns( new TaskDescriptionColumn() { Alignment = Justify.Left},