From ab92f0bcda946a7e7b5523a5fe26181927357cf0 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 30 Jun 2019 14:04:23 -0500 Subject: [PATCH] initial support for Archive API for 7z files --- .../ListArchiver/DownloadList.cs | 13 +++------- .../ListArchiver/StreamExtensions.cs | 24 +++++++------------ 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/FilterLists.Agent/ListArchiver/DownloadList.cs b/src/FilterLists.Agent/ListArchiver/DownloadList.cs index 4cb10fa04..4b49e81e6 100644 --- a/src/FilterLists.Agent/ListArchiver/DownloadList.cs +++ b/src/FilterLists.Agent/ListArchiver/DownloadList.cs @@ -64,11 +64,6 @@ public Handler(AgentHttpClient httpClient) } protected override async Task Handle(Command request, CancellationToken cancellationToken) - { - await DownloadByFileExtension(request, cancellationToken); - } - - private async Task DownloadByFileExtension(Command request, CancellationToken cancellationToken) { using (var response = await _httpClient.GetAsync(request.ListInfo.ViewUrl, cancellationToken)) { @@ -77,14 +72,12 @@ private async Task DownloadByFileExtension(Command request, CancellationToken ca { var sourceExtension = Path.GetExtension(request.ListInfo.ViewUrl.AbsolutePath); string destinationExtension; - if (string.IsNullOrEmpty(sourceExtension) || sourceExtension == ".zip" || - sourceExtension == ".7z") + if (string.IsNullOrEmpty(sourceExtension) || sourceExtension == ".zip" || sourceExtension == ".7z") destinationExtension = ".txt"; else destinationExtension = sourceExtension; - using (var output = File.OpenWrite(Path.Combine("archives", - $"{request.ListInfo.Id}{destinationExtension}"))) + using (var output = File.OpenWrite(Path.Combine("archives", $"{request.ListInfo.Id}{destinationExtension}"))) { switch (DownloadRequestsByFileExtension[sourceExtension]) { @@ -95,7 +88,7 @@ private async Task DownloadByFileExtension(Command request, CancellationToken ca await input.CopyToWithCompressedReaderApi(output, cancellationToken); break; case FileType.NonForwardOnlyCompressed: - await input.CopyToWithCompressedArchiveApi(output, cancellationToken); + input.CopyToWithCompressedArchiveApi(output); break; default: throw new NotImplementedException(); diff --git a/src/FilterLists.Agent/ListArchiver/StreamExtensions.cs b/src/FilterLists.Agent/ListArchiver/StreamExtensions.cs index 17cd9280c..68ca53856 100644 --- a/src/FilterLists.Agent/ListArchiver/StreamExtensions.cs +++ b/src/FilterLists.Agent/ListArchiver/StreamExtensions.cs @@ -1,9 +1,8 @@ -using System; -using System.IO; +using System.IO; using System.Threading; using System.Threading.Tasks; using SharpCompress.Archives; -using SharpCompress.Common; +using SharpCompress.Archives.SevenZip; using SharpCompress.Readers; namespace FilterLists.Agent.ListArchiver @@ -34,19 +33,14 @@ public static async Task CopyToWithCompressedReaderApi(this Stream input, Stream /// e.g. 7zip /// https://github.com/adamhathcock/sharpcompress/blob/master/FORMATS.md /// - public static async Task CopyToWithCompressedArchiveApi(this Stream input, Stream output, - CancellationToken cancellationToken) + public static void CopyToWithCompressedArchiveApi(this Stream input, Stream output) { - //var archive = ArchiveFactory.Open(@"C:\Code\sharpcompress\TestArchives\sharpcompress.zip"); - //foreach (var entry in archive.Entries) - // if (!entry.IsDirectory) - // { - // Console.WriteLine(entry.Key); - // entry.WriteToDirectory(@"C:\temp", - // new ExtractionOptions {ExtractFullPath = true, Overwrite = true}); - // } - - throw new NotImplementedException(); + using (var archive = SevenZipArchive.Open(input)) + { + foreach (var entry in archive.Entries) + if (!entry.IsDirectory) + entry.WriteTo(output); + } } } } \ No newline at end of file