39 lines
1.4 KiB
C#
39 lines
1.4 KiB
C#
using LootDumpProcessor.Logger;
|
|
using SevenZip;
|
|
using SevenZip.Sdk.Compression.Lzma;
|
|
|
|
namespace LootDumpProcessor.Process.Reader.PreProcess;
|
|
|
|
public class SevenZipPreProcessReader : AbstractPreProcessReader
|
|
{
|
|
public override string GetHandleExtension() => "7z";
|
|
|
|
static SevenZipPreProcessReader()
|
|
{
|
|
SevenZipBase.SetLibraryPath("./x64/7z.dll");
|
|
}
|
|
|
|
public override bool TryPreProcess(string file, out List<string> files, out List<string> directories)
|
|
{
|
|
Decoder decoder = new Decoder();
|
|
|
|
var fileRaw = Path.GetFileNameWithoutExtension(file);
|
|
// SevenZip library doesnt like forward slashes for some reason
|
|
var outPath = $"{_tempFolder}\\{fileRaw}".Replace("/", "\\");
|
|
LoggerFactory.GetInstance().Log(
|
|
$"Unzipping {file} into temp path {outPath}, this may take a while...",
|
|
LogLevel.Info);
|
|
var extractor = new SevenZipExtractor(file);
|
|
extractor.Extracting += (sender, args) =>
|
|
{
|
|
if (args.PercentDone % 10 == 0)
|
|
LoggerFactory.GetInstance().Log($"Unzip progress: {args.PercentDone}%", LogLevel.Info);
|
|
};
|
|
extractor.ExtractArchive(outPath);
|
|
LoggerFactory.GetInstance().Log($"Finished unzipping {file} into temp path {outPath}", LogLevel.Info);
|
|
|
|
files = Directory.GetFiles(outPath).ToList();
|
|
directories = Directory.GetDirectories(outPath).ToList();
|
|
return true;
|
|
}
|
|
} |