mirror of
https://github.com/ZipArchive/ZipArchive.git
synced 2026-05-31 10:27:32 +00:00
173 lines
5.5 KiB
Swift
173 lines
5.5 KiB
Swift
//
|
|
// ViewController.swift
|
|
// SwiftExample_macOS
|
|
//
|
|
// Created by Antoine Cœur on 2019/4/26.
|
|
//
|
|
|
|
import Cocoa
|
|
|
|
#if UseCarthage
|
|
import ZipArchive
|
|
#else
|
|
import SSZipArchive
|
|
#endif
|
|
|
|
class ViewController: NSViewController {
|
|
|
|
@IBOutlet weak var passwordField: NSTextField!
|
|
@IBOutlet weak var zipButton: NSButton!
|
|
@IBOutlet weak var unzipButton: NSButton!
|
|
@IBOutlet weak var hasPasswordButton: NSButton!
|
|
@IBOutlet weak var resetButton: NSButton!
|
|
|
|
@IBOutlet weak var file1: NSTextField!
|
|
@IBOutlet weak var file2: NSTextField!
|
|
@IBOutlet weak var file3: NSTextField!
|
|
@IBOutlet weak var info: NSTextField!
|
|
|
|
var samplePath: String!
|
|
var zipPath: String?
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
// Do any additional setup after loading the view, typically from a nib.
|
|
|
|
samplePath = Bundle.main.bundleURL.appendingPathComponent("Contents/Resources/Sample Data").path
|
|
print("Sample path:", samplePath!)
|
|
|
|
resetPressed(resetButton)
|
|
}
|
|
|
|
override var representedObject: Any? {
|
|
didSet {
|
|
// Update the view, if already loaded.
|
|
}
|
|
}
|
|
|
|
// MARK: IBAction
|
|
|
|
@IBAction func zipPressed(_: NSButton) {
|
|
zipPath = tempZipPath()
|
|
print("Zip path:", zipPath!)
|
|
let password = passwordField.stringValue
|
|
|
|
let success = SSZipArchive.createZipFile(atPath: zipPath!,
|
|
withContentsOfDirectory: samplePath,
|
|
keepParentDirectory: false,
|
|
compressionLevel: -1,
|
|
password: !password.isEmpty ? password : nil,
|
|
aes: true,
|
|
progressHandler: nil)
|
|
if success {
|
|
print("Success zip")
|
|
info.stringValue = "Success zip"
|
|
unzipButton.isEnabled = true
|
|
hasPasswordButton.isEnabled = true
|
|
} else {
|
|
print("No success zip")
|
|
info.stringValue = "No success zip"
|
|
}
|
|
resetButton.isEnabled = true
|
|
}
|
|
|
|
@IBAction func unzipPressed(_: NSButton) {
|
|
guard let zipPath = self.zipPath else {
|
|
return
|
|
}
|
|
|
|
guard let unzipPath = tempUnzipPath() else {
|
|
return
|
|
}
|
|
print("Unzip path:", unzipPath)
|
|
|
|
let password = passwordField.stringValue
|
|
let success: Bool = SSZipArchive.unzipFile(atPath: zipPath,
|
|
toDestination: unzipPath,
|
|
preserveAttributes: true,
|
|
overwrite: true,
|
|
nestedZipLevel: 1,
|
|
password: !password.isEmpty ? password : nil,
|
|
error: nil,
|
|
delegate: nil,
|
|
progressHandler: nil,
|
|
completionHandler: nil)
|
|
if success != false {
|
|
print("Success unzip")
|
|
info.stringValue = "Success unzip"
|
|
} else {
|
|
print("No success unzip")
|
|
info.stringValue = "No success unzip"
|
|
return
|
|
}
|
|
|
|
var items: [String]
|
|
do {
|
|
items = try FileManager.default.contentsOfDirectory(atPath: unzipPath)
|
|
} catch {
|
|
return
|
|
}
|
|
|
|
for (index, item) in items.enumerated() {
|
|
switch index {
|
|
case 0:
|
|
file1.stringValue = item
|
|
case 1:
|
|
file2.stringValue = item
|
|
case 2:
|
|
file3.stringValue = item
|
|
default:
|
|
print("Went beyond index of assumed files")
|
|
}
|
|
}
|
|
|
|
unzipButton.isEnabled = false
|
|
}
|
|
|
|
@IBAction func hasPasswordPressed(_: NSButton) {
|
|
guard let zipPath = zipPath else {
|
|
return
|
|
}
|
|
let success = SSZipArchive.isFilePasswordProtected(atPath: zipPath)
|
|
if success {
|
|
print("Yes, it's password protected.")
|
|
info.stringValue = "Yes, it's password protected."
|
|
} else {
|
|
print("No, it's not password protected.")
|
|
info.stringValue = "No, it's not password protected."
|
|
}
|
|
}
|
|
|
|
@IBAction func resetPressed(_: NSButton) {
|
|
file1.stringValue = ""
|
|
file2.stringValue = ""
|
|
file3.stringValue = ""
|
|
info.stringValue = ""
|
|
zipButton.isEnabled = true
|
|
unzipButton.isEnabled = false
|
|
hasPasswordButton.isEnabled = false
|
|
resetButton.isEnabled = false
|
|
}
|
|
|
|
// MARK: Private
|
|
|
|
func tempZipPath() -> String {
|
|
var path = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0]
|
|
path += "/\(UUID().uuidString).zip"
|
|
return path
|
|
}
|
|
|
|
func tempUnzipPath() -> String? {
|
|
var path = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0]
|
|
path += "/\(UUID().uuidString)"
|
|
let url = URL(fileURLWithPath: path)
|
|
|
|
do {
|
|
try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)
|
|
} catch {
|
|
return nil
|
|
}
|
|
return url.path
|
|
}
|
|
}
|