mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			158 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
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
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Class DotNetZipClient.
 | 
						|
    /// </summary>
 | 
						|
    public class ZipClient : IZipClient
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Extracts all.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sourceFile">The source file.</param>
 | 
						|
        /// <param name="targetPath">The target path.</param>
 | 
						|
        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
 | 
						|
        public void ExtractAll(string sourceFile, string targetPath, bool overwriteExistingFiles)
 | 
						|
        {
 | 
						|
            using var fileStream = File.OpenRead(sourceFile);
 | 
						|
            ExtractAll(fileStream, targetPath, overwriteExistingFiles);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Extracts all.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="source">The source.</param>
 | 
						|
        /// <param name="targetPath">The target path.</param>
 | 
						|
        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
 | 
						|
        public void ExtractAll(Stream source, string targetPath, bool overwriteExistingFiles)
 | 
						|
        {
 | 
						|
            using var reader = ReaderFactory.Open(source);
 | 
						|
            var options = new ExtractionOptions
 | 
						|
            {
 | 
						|
                ExtractFullPath = true
 | 
						|
            };
 | 
						|
 | 
						|
            if (overwriteExistingFiles)
 | 
						|
            {
 | 
						|
                options.Overwrite = true;
 | 
						|
            }
 | 
						|
 | 
						|
            reader.WriteAllToDirectory(targetPath, options);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <inheritdoc />
 | 
						|
        public void ExtractAllFromZip(Stream source, string targetPath, bool overwriteExistingFiles)
 | 
						|
        {
 | 
						|
            using var reader = ZipReader.Open(source);
 | 
						|
            var options = new ExtractionOptions
 | 
						|
            {
 | 
						|
                ExtractFullPath = true,
 | 
						|
                Overwrite = overwriteExistingFiles
 | 
						|
            };
 | 
						|
 | 
						|
            reader.WriteAllToDirectory(targetPath, options);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <inheritdoc />
 | 
						|
        public void ExtractAllFromGz(Stream source, string targetPath, bool overwriteExistingFiles)
 | 
						|
        {
 | 
						|
            using var reader = GZipReader.Open(source);
 | 
						|
            var options = new ExtractionOptions
 | 
						|
            {
 | 
						|
                ExtractFullPath = true,
 | 
						|
                Overwrite = overwriteExistingFiles
 | 
						|
            };
 | 
						|
 | 
						|
            reader.WriteAllToDirectory(targetPath, options);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <inheritdoc />
 | 
						|
        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));
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Extracts all from7z.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sourceFile">The source file.</param>
 | 
						|
        /// <param name="targetPath">The target path.</param>
 | 
						|
        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
 | 
						|
        public void ExtractAllFrom7z(string sourceFile, string targetPath, bool overwriteExistingFiles)
 | 
						|
        {
 | 
						|
            using var fileStream = File.OpenRead(sourceFile);
 | 
						|
            ExtractAllFrom7z(fileStream, targetPath, overwriteExistingFiles);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Extracts all from7z.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="source">The source.</param>
 | 
						|
        /// <param name="targetPath">The target path.</param>
 | 
						|
        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
 | 
						|
        public void ExtractAllFrom7z(Stream source, string targetPath, bool overwriteExistingFiles)
 | 
						|
        {
 | 
						|
            using var archive = SevenZipArchive.Open(source);
 | 
						|
            using var reader = archive.ExtractAllEntries();
 | 
						|
            var options = new ExtractionOptions
 | 
						|
            {
 | 
						|
                ExtractFullPath = true,
 | 
						|
                Overwrite = overwriteExistingFiles
 | 
						|
            };
 | 
						|
 | 
						|
            reader.WriteAllToDirectory(targetPath, options);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Extracts all from tar.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sourceFile">The source file.</param>
 | 
						|
        /// <param name="targetPath">The target path.</param>
 | 
						|
        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
 | 
						|
        public void ExtractAllFromTar(string sourceFile, string targetPath, bool overwriteExistingFiles)
 | 
						|
        {
 | 
						|
            using var fileStream = File.OpenRead(sourceFile);
 | 
						|
            ExtractAllFromTar(fileStream, targetPath, overwriteExistingFiles);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Extracts all from tar.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="source">The source.</param>
 | 
						|
        /// <param name="targetPath">The target path.</param>
 | 
						|
        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
 | 
						|
        public void ExtractAllFromTar(Stream source, string targetPath, bool overwriteExistingFiles)
 | 
						|
        {
 | 
						|
            using var archive = TarArchive.Open(source);
 | 
						|
            using var reader = archive.ExtractAllEntries();
 | 
						|
            var options = new ExtractionOptions
 | 
						|
            {
 | 
						|
                ExtractFullPath = true,
 | 
						|
                Overwrite = overwriteExistingFiles
 | 
						|
            };
 | 
						|
 | 
						|
            reader.WriteAllToDirectory(targetPath, options);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |