using SevenZip; using SPTInstaller.Models; namespace SPTInstaller.Helpers; public static class ZipHelper { public static Result Decompress(FileInfo archiveFile, DirectoryInfo outputDirectory, IProgress progress = null) { try { using var archiveStream = archiveFile.OpenRead(); var dllPath = Path.Join(DownloadCacheHelper.CachePath, "7z.dll"); SevenZipBase.SetLibraryPath(dllPath); var extractor = new SevenZipExtractor(archiveStream); extractor.Extracting += (_, args) => { progress.Report(args.PercentDone); }; extractor.ExtractArchive(outputDirectory.FullName); outputDirectory.Refresh(); if (!outputDirectory.Exists) { return Result.FromError($"Failed to extract files: {archiveFile.Name}"); } return Result.FromSuccess(); } catch (Exception ex) { return Result.FromError(ex.Message); } } }