react-native-nitro-unzip 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -49,14 +49,11 @@ class HybridUnzipTask(
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
override fun await(): Promise<UnzipResult> {
|
|
52
|
-
return Promise.async {
|
|
52
|
+
return Promise.async {
|
|
53
53
|
try {
|
|
54
|
-
|
|
55
|
-
resolve(result)
|
|
54
|
+
if (password != null) extractWithPassword() else extract()
|
|
56
55
|
} catch (e: CancellationException) {
|
|
57
|
-
|
|
58
|
-
} catch (e: Exception) {
|
|
59
|
-
reject(e)
|
|
56
|
+
throw Exception("Extraction cancelled")
|
|
60
57
|
}
|
|
61
58
|
}
|
|
62
59
|
}
|
|
@@ -46,14 +46,11 @@ class HybridZipTask(
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
override fun await(): Promise<ZipResult> {
|
|
49
|
-
return Promise.async {
|
|
49
|
+
return Promise.async {
|
|
50
50
|
try {
|
|
51
|
-
|
|
52
|
-
resolve(result)
|
|
51
|
+
compress()
|
|
53
52
|
} catch (e: CancellationException) {
|
|
54
|
-
|
|
55
|
-
} catch (e: Exception) {
|
|
56
|
-
reject(e)
|
|
53
|
+
throw Exception("Zip creation cancelled")
|
|
57
54
|
}
|
|
58
55
|
}
|
|
59
56
|
}
|
|
@@ -30,10 +30,6 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
|
|
|
30
30
|
private var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid
|
|
31
31
|
private let lock = NSLock()
|
|
32
32
|
private let progressThrottle: TimeInterval = 1.0
|
|
33
|
-
|
|
34
|
-
// Promise resolution — held until extraction completes or fails
|
|
35
|
-
private var resolvePromise: ((UnzipResult) -> Void)?
|
|
36
|
-
private var rejectPromise: ((Error) -> Void)?
|
|
37
33
|
private var hasStarted = false
|
|
38
34
|
|
|
39
35
|
init(zipPath: String, destinationPath: String, password: String? = nil) {
|
|
@@ -59,45 +55,38 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
|
|
|
59
55
|
}
|
|
60
56
|
|
|
61
57
|
func await() throws -> Promise<UnzipResult> {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
lock.lock()
|
|
59
|
+
guard !hasStarted else {
|
|
60
|
+
lock.unlock()
|
|
61
|
+
return Promise.rejected(withError: NSError(
|
|
62
|
+
domain: "NitroUnzip",
|
|
63
|
+
code: 4,
|
|
64
|
+
userInfo: [NSLocalizedDescriptionKey: "Task already started"]
|
|
65
|
+
))
|
|
66
|
+
}
|
|
67
|
+
hasStarted = true
|
|
68
|
+
lock.unlock()
|
|
66
69
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
return Promise.async {
|
|
71
|
+
try await withCheckedThrowingContinuation { continuation in
|
|
72
|
+
self.beginBackgroundTask()
|
|
73
|
+
|
|
74
|
+
DispatchQueue.global(qos: .userInitiated).async {
|
|
75
|
+
do {
|
|
76
|
+
let result = try self.extract()
|
|
77
|
+
self.endBackgroundTask()
|
|
78
|
+
continuation.resume(returning: result)
|
|
79
|
+
} catch {
|
|
80
|
+
self.endBackgroundTask()
|
|
81
|
+
continuation.resume(throwing: error)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
70
84
|
}
|
|
71
|
-
self.hasStarted = true
|
|
72
|
-
self.lock.unlock()
|
|
73
|
-
|
|
74
|
-
self.startExtraction()
|
|
75
85
|
}
|
|
76
86
|
}
|
|
77
87
|
|
|
78
88
|
// MARK: - Extraction
|
|
79
89
|
|
|
80
|
-
private func startExtraction() {
|
|
81
|
-
beginBackgroundTask()
|
|
82
|
-
|
|
83
|
-
DispatchQueue.global(qos: .userInitiated).async { [self] in
|
|
84
|
-
do {
|
|
85
|
-
let result = try self.extract()
|
|
86
|
-
self.endBackgroundTask()
|
|
87
|
-
self.lock.lock()
|
|
88
|
-
let resolve = self.resolvePromise
|
|
89
|
-
self.lock.unlock()
|
|
90
|
-
resolve?(result)
|
|
91
|
-
} catch {
|
|
92
|
-
self.endBackgroundTask()
|
|
93
|
-
self.lock.lock()
|
|
94
|
-
let reject = self.rejectPromise
|
|
95
|
-
self.lock.unlock()
|
|
96
|
-
reject?(error)
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
90
|
private func extract() throws -> UnzipResult {
|
|
102
91
|
let startTime = Date()
|
|
103
92
|
let fileManager = FileManager.default
|
|
@@ -199,7 +188,7 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
|
|
|
199
188
|
let finalCount = extractedFiles
|
|
200
189
|
let averageSpeed = duration > 0 ? Double(finalCount) / (duration / 1000) : 0
|
|
201
190
|
|
|
202
|
-
// Calculate total bytes from
|
|
191
|
+
// Calculate total bytes from zip file size
|
|
203
192
|
let totalBytes: Double
|
|
204
193
|
if let attrs = try? fileManager.attributesOfItem(atPath: cleanZip),
|
|
205
194
|
let fileSize = attrs[.size] as? UInt64 {
|
package/ios/HybridZipTask.swift
CHANGED
|
@@ -24,9 +24,6 @@ class HybridZipTask: HybridZipTaskSpec {
|
|
|
24
24
|
private var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid
|
|
25
25
|
private let lock = NSLock()
|
|
26
26
|
private let progressThrottle: TimeInterval = 1.0
|
|
27
|
-
|
|
28
|
-
private var resolvePromise: ((ZipResult) -> Void)?
|
|
29
|
-
private var rejectPromise: ((Error) -> Void)?
|
|
30
27
|
private var hasStarted = false
|
|
31
28
|
|
|
32
29
|
init(sourcePath: String, destinationZipPath: String, password: String? = nil) {
|
|
@@ -52,45 +49,38 @@ class HybridZipTask: HybridZipTaskSpec {
|
|
|
52
49
|
}
|
|
53
50
|
|
|
54
51
|
func await() throws -> Promise<ZipResult> {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
self.hasStarted = true
|
|
65
|
-
self.lock.unlock()
|
|
66
|
-
|
|
67
|
-
self.startCompression()
|
|
52
|
+
lock.lock()
|
|
53
|
+
guard !hasStarted else {
|
|
54
|
+
lock.unlock()
|
|
55
|
+
return Promise.rejected(withError: NSError(
|
|
56
|
+
domain: "NitroUnzip",
|
|
57
|
+
code: 4,
|
|
58
|
+
userInfo: [NSLocalizedDescriptionKey: "Task already started"]
|
|
59
|
+
))
|
|
68
60
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
// MARK: - Compression
|
|
61
|
+
hasStarted = true
|
|
62
|
+
lock.unlock()
|
|
72
63
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
let reject = self.rejectPromise
|
|
88
|
-
self.lock.unlock()
|
|
89
|
-
reject?(error)
|
|
64
|
+
return Promise.async {
|
|
65
|
+
try await withCheckedThrowingContinuation { continuation in
|
|
66
|
+
self.beginBackgroundTask()
|
|
67
|
+
|
|
68
|
+
DispatchQueue.global(qos: .userInitiated).async {
|
|
69
|
+
do {
|
|
70
|
+
let result = try self.compress()
|
|
71
|
+
self.endBackgroundTask()
|
|
72
|
+
continuation.resume(returning: result)
|
|
73
|
+
} catch {
|
|
74
|
+
self.endBackgroundTask()
|
|
75
|
+
continuation.resume(throwing: error)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
90
78
|
}
|
|
91
79
|
}
|
|
92
80
|
}
|
|
93
81
|
|
|
82
|
+
// MARK: - Compression
|
|
83
|
+
|
|
94
84
|
private func compress() throws -> ZipResult {
|
|
95
85
|
let startTime = Date()
|
|
96
86
|
let fileManager = FileManager.default
|
package/package.json
CHANGED