react-native-nitro-unzip 0.2.0 → 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.
- package/android/src/main/java/com/margelo/nitro/unzip/HybridUnzipTask.kt +3 -6
- package/android/src/main/java/com/margelo/nitro/unzip/HybridZipTask.kt +3 -6
- package/ios/HybridUnzip.swift +0 -2
- package/ios/HybridUnzipTask.swift +26 -42
- package/ios/HybridZipTask.swift +26 -41
- package/package.json +2 -5
|
@@ -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
|
}
|
package/ios/HybridUnzip.swift
CHANGED
|
@@ -12,8 +12,6 @@ import NitroModules
|
|
|
12
12
|
* ```
|
|
13
13
|
*/
|
|
14
14
|
class HybridUnzip: HybridUnzipSpec {
|
|
15
|
-
var hybridContext = margelo.nitro.HybridContext()
|
|
16
|
-
var memorySize: Int { return getSizeOf(self) }
|
|
17
15
|
|
|
18
16
|
func extract(zipPath: String, destinationPath: String) throws -> any HybridUnzipTaskSpec {
|
|
19
17
|
return HybridUnzipTask(zipPath: zipPath, destinationPath: destinationPath)
|
|
@@ -16,11 +16,6 @@ import UIKit
|
|
|
16
16
|
* - Background task support for continued extraction when app is backgrounded
|
|
17
17
|
*/
|
|
18
18
|
class HybridUnzipTask: HybridUnzipTaskSpec {
|
|
19
|
-
// MARK: - HybridObject requirements
|
|
20
|
-
|
|
21
|
-
var hybridContext = margelo.nitro.HybridContext()
|
|
22
|
-
var memorySize: Int { return getSizeOf(self) }
|
|
23
|
-
|
|
24
19
|
// MARK: - Spec properties
|
|
25
20
|
|
|
26
21
|
let taskId: String
|
|
@@ -35,10 +30,6 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
|
|
|
35
30
|
private var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid
|
|
36
31
|
private let lock = NSLock()
|
|
37
32
|
private let progressThrottle: TimeInterval = 1.0
|
|
38
|
-
|
|
39
|
-
// Promise resolution — held until extraction completes or fails
|
|
40
|
-
private var resolvePromise: ((UnzipResult) -> Void)?
|
|
41
|
-
private var rejectPromise: ((Error) -> Void)?
|
|
42
33
|
private var hasStarted = false
|
|
43
34
|
|
|
44
35
|
init(zipPath: String, destinationPath: String, password: String? = nil) {
|
|
@@ -64,45 +55,38 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
|
|
|
64
55
|
}
|
|
65
56
|
|
|
66
57
|
func await() throws -> Promise<UnzipResult> {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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()
|
|
71
69
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
+
}
|
|
75
84
|
}
|
|
76
|
-
self.hasStarted = true
|
|
77
|
-
self.lock.unlock()
|
|
78
|
-
|
|
79
|
-
self.startExtraction()
|
|
80
85
|
}
|
|
81
86
|
}
|
|
82
87
|
|
|
83
88
|
// MARK: - Extraction
|
|
84
89
|
|
|
85
|
-
private func startExtraction() {
|
|
86
|
-
beginBackgroundTask()
|
|
87
|
-
|
|
88
|
-
DispatchQueue.global(qos: .userInitiated).async { [self] in
|
|
89
|
-
do {
|
|
90
|
-
let result = try self.extract()
|
|
91
|
-
self.endBackgroundTask()
|
|
92
|
-
self.lock.lock()
|
|
93
|
-
let resolve = self.resolvePromise
|
|
94
|
-
self.lock.unlock()
|
|
95
|
-
resolve?(result)
|
|
96
|
-
} catch {
|
|
97
|
-
self.endBackgroundTask()
|
|
98
|
-
self.lock.lock()
|
|
99
|
-
let reject = self.rejectPromise
|
|
100
|
-
self.lock.unlock()
|
|
101
|
-
reject?(error)
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
90
|
private func extract() throws -> UnzipResult {
|
|
107
91
|
let startTime = Date()
|
|
108
92
|
let fileManager = FileManager.default
|
|
@@ -204,7 +188,7 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
|
|
|
204
188
|
let finalCount = extractedFiles
|
|
205
189
|
let averageSpeed = duration > 0 ? Double(finalCount) / (duration / 1000) : 0
|
|
206
190
|
|
|
207
|
-
// Calculate total bytes from
|
|
191
|
+
// Calculate total bytes from zip file size
|
|
208
192
|
let totalBytes: Double
|
|
209
193
|
if let attrs = try? fileManager.attributesOfItem(atPath: cleanZip),
|
|
210
194
|
let fileSize = attrs[.size] as? UInt64 {
|
package/ios/HybridZipTask.swift
CHANGED
|
@@ -10,11 +10,6 @@ import UIKit
|
|
|
10
10
|
* The caller can observe progress, cancel, or await the result.
|
|
11
11
|
*/
|
|
12
12
|
class HybridZipTask: HybridZipTaskSpec {
|
|
13
|
-
// MARK: - HybridObject requirements
|
|
14
|
-
|
|
15
|
-
var hybridContext = margelo.nitro.HybridContext()
|
|
16
|
-
var memorySize: Int { return getSizeOf(self) }
|
|
17
|
-
|
|
18
13
|
// MARK: - Spec properties
|
|
19
14
|
|
|
20
15
|
let taskId: String
|
|
@@ -29,9 +24,6 @@ class HybridZipTask: HybridZipTaskSpec {
|
|
|
29
24
|
private var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid
|
|
30
25
|
private let lock = NSLock()
|
|
31
26
|
private let progressThrottle: TimeInterval = 1.0
|
|
32
|
-
|
|
33
|
-
private var resolvePromise: ((ZipResult) -> Void)?
|
|
34
|
-
private var rejectPromise: ((Error) -> Void)?
|
|
35
27
|
private var hasStarted = false
|
|
36
28
|
|
|
37
29
|
init(sourcePath: String, destinationZipPath: String, password: String? = nil) {
|
|
@@ -57,45 +49,38 @@ class HybridZipTask: HybridZipTaskSpec {
|
|
|
57
49
|
}
|
|
58
50
|
|
|
59
51
|
func await() throws -> Promise<ZipResult> {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
self.hasStarted = true
|
|
70
|
-
self.lock.unlock()
|
|
71
|
-
|
|
72
|
-
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
|
+
))
|
|
73
60
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
// MARK: - Compression
|
|
61
|
+
hasStarted = true
|
|
62
|
+
lock.unlock()
|
|
77
63
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
let reject = self.rejectPromise
|
|
93
|
-
self.lock.unlock()
|
|
94
|
-
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
|
+
}
|
|
95
78
|
}
|
|
96
79
|
}
|
|
97
80
|
}
|
|
98
81
|
|
|
82
|
+
// MARK: - Compression
|
|
83
|
+
|
|
99
84
|
private func compress() throws -> ZipResult {
|
|
100
85
|
let startTime = Date()
|
|
101
86
|
let fileManager = FileManager.default
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-nitro-unzip",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "High-performance ZIP extraction for React Native, powered by Nitro Modules",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -94,10 +94,7 @@
|
|
|
94
94
|
"extends": [
|
|
95
95
|
"@react-native",
|
|
96
96
|
"prettier"
|
|
97
|
-
]
|
|
98
|
-
"rules": {
|
|
99
|
-
"prettier/prettier": "warn"
|
|
100
|
-
}
|
|
97
|
+
]
|
|
101
98
|
},
|
|
102
99
|
"prettier": {
|
|
103
100
|
"semi": true,
|