using System.IO; using MediaBrowser.Model.IO; using SharpCompress.Archives.SevenZip; using SharpCompress.Archives.Tar; using SharpCompress.Common; using SharpCompress.Readers; using SharpCompress.Readers.GZip; using SharpCompress.Readers.Zip; namespace Emby.Server.Implementations.Archiving { /// /// Class DotNetZipClient. /// public class ZipClient : IZipClient { /// /// Extracts all. /// /// The source file. /// The target path. /// if set to true [overwrite existing files]. public void ExtractAll(string sourceFile, string targetPath, bool overwriteExistingFiles) { using (var fileStream = File.OpenRead(sourceFile)) { ExtractAll(fileStream, targetPath, overwriteExistingFiles); } } /// /// Extracts all. /// /// The source. /// The target path. /// if set to true [overwrite existing files]. public void ExtractAll(Stream source, string targetPath, bool overwriteExistingFiles) { using (var reader = ReaderFactory.Open(source)) { var options = new ExtractionOptions(); options.ExtractFullPath = true; if (overwriteExistingFiles) { options.Overwrite = true; } reader.WriteAllToDirectory(targetPath, options); } } public void ExtractAllFromZip(Stream source, string targetPath, bool overwriteExistingFiles) { using (var reader = ZipReader.Open(source)) { var options = new ExtractionOptions(); options.ExtractFullPath = true; if (overwriteExistingFiles) { options.Overwrite = true; } reader.WriteAllToDirectory(targetPath, options); } } public void ExtractAllFromGz(Stream source, string targetPath, bool overwriteExistingFiles) { using (var reader = GZipReader.Open(source)) { var options = new ExtractionOptions(); options.ExtractFullPath = true; if (overwriteExistingFiles) { options.Overwrite = true; } reader.WriteAllToDirectory(targetPath, options); } } public void ExtractFirstFileFromGz(Stream source, string targetPath, string defaultFileName) { using (var reader = GZipReader.Open(source)) { if (reader.MoveToNextEntry()) { var entry = reader.Entry; var filename = entry.Key; if (string.IsNullOrWhiteSpace(filename)) { filename = defaultFileName; } reader.WriteEntryToFile(Path.Combine(targetPath, filename)); } } } /// /// Extracts all from7z. /// /// The source file. /// The target path. /// if set to true [overwrite existing files]. public void ExtractAllFrom7z(string sourceFile, string targetPath, bool overwriteExistingFiles) { using (var fileStream = File.OpenRead(sourceFile)) { ExtractAllFrom7z(fileStream, targetPath, overwriteExistingFiles); } } /// /// Extracts all from7z. /// /// The source. /// The target path. /// if set to true [overwrite existing files]. public void ExtractAllFrom7z(Stream source, string targetPath, bool overwriteExistingFiles) { using (var archive = SevenZipArchive.Open(source)) { using (var reader = archive.ExtractAllEntries()) { var options = new ExtractionOptions(); options.ExtractFullPath = true; if (overwriteExistingFiles) { options.Overwrite = true; } reader.WriteAllToDirectory(targetPath, options); } } } /// /// Extracts all from tar. /// /// The source file. /// The target path. /// if set to true [overwrite existing files]. public void ExtractAllFromTar(string sourceFile, string targetPath, bool overwriteExistingFiles) { using (var fileStream = File.OpenRead(sourceFile)) { ExtractAllFromTar(fileStream, targetPath, overwriteExistingFiles); } } /// /// Extracts all from tar. /// /// The source. /// The target path. /// if set to true [overwrite existing files]. public void ExtractAllFromTar(Stream source, string targetPath, bool overwriteExistingFiles) { using (var archive = TarArchive.Open(source)) { using (var reader = archive.ExtractAllEntries()) { var options = new ExtractionOptions(); options.ExtractFullPath = true; if (overwriteExistingFiles) { options.Overwrite = true; } reader.WriteAllToDirectory(targetPath, options); } } } } }