diff --git a/Zip/Zip.swift b/Zip/Zip.swift index cd3a395077743eb210db29c117aae10635f753bc..cd8da5e0e771163e93d404c87ae4fa2e9b002877 100644 --- a/Zip/Zip.swift +++ b/Zip/Zip.swift @@ -28,6 +28,26 @@ public enum ZipError: Error { } } +public enum ZipCompression: Int { + case NoCompression + case BestSpeed + case DefaultCompression + case BestCompression + + internal var minizipCompression: Int32 { + switch self { + case .NoCompression: + return Z_NO_COMPRESSION + case .BestSpeed: + return Z_BEST_SPEED + case .DefaultCompression: + return Z_DEFAULT_COMPRESSION + case .BestCompression: + return Z_BEST_COMPRESSION + } + } +} + /// Zip class public class Zip { @@ -197,19 +217,21 @@ public class Zip { // MARK: Zip + /** Zip files. - parameter paths: Array of NSURL filepaths. - parameter zipFilePath: Destination NSURL, should lead to a .zip filepath. - parameter password: Password string. Optional. + - parameter compression: Compression strategy - parameter progress: A progress closure called after unzipping each file in the archive. Double value betweem 0 and 1. - throws: Error if zipping fails. - notes: Supports implicit progress composition */ - public class func zipFiles(_ paths: [URL], zipFilePath: URL, password: String?, progress: ((_ progress: Double) -> ())?) throws { + public class func zipFiles(paths: [URL], zipFilePath: URL, password: String?, compression: ZipCompression = .DefaultCompression, progress: ((_ progress: Double) -> ())?) throws { // File manager let fileManager = FileManager.default @@ -275,10 +297,10 @@ public class Zip { catch {} let buffer = malloc(chunkSize) if let password = password, let fileName = fileName { - zipOpenNewFileInZip3(zip, fileName, &zipInfo, nil, 0, nil, 0, nil,Z_DEFLATED, Z_DEFAULT_COMPRESSION, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, password, 0) + zipOpenNewFileInZip3(zip, fileName, &zipInfo, nil, 0, nil, 0, nil,Z_DEFLATED, compression.minizipCompression, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, password, 0) } else if let fileName = fileName { - zipOpenNewFileInZip3(zip, fileName, &zipInfo, nil, 0, nil, 0, nil,Z_DEFLATED, Z_DEFAULT_COMPRESSION, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, nil, 0) + zipOpenNewFileInZip3(zip, fileName, &zipInfo, nil, 0, nil, 0, nil,Z_DEFLATED, compression.minizipCompression, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, nil, 0) } else { throw ZipError.zipFail