react-native-compressor 1.7.0 → 1.7.1
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/README.md +36 -16
- package/android/src/main/java/com/reactnativecompressor/CompressorModule.java +31 -22
- package/android/src/main/java/com/reactnativecompressor/Image/ImageCompressor.java +28 -16
- package/android/src/main/java/com/reactnativecompressor/Image/utils/ImageCompressorOptions.java +4 -0
- package/android/src/main/java/com/reactnativecompressor/Utils/MediaCache.java +65 -0
- package/android/src/main/java/com/reactnativecompressor/Utils/Utils.java +161 -2
- package/android/src/main/java/com/reactnativecompressor/Video/VideoModule.java +3 -16
- package/android/src/oldarch/CompressorSpec.java +13 -7
- package/ios/Compressor-Bridging-Header.h +1 -0
- package/ios/Compressor.h +3 -2
- package/ios/Compressor.mm +56 -24
- package/ios/Image/ImageCompressor.h +12 -7
- package/ios/Image/ImageCompressor.m +164 -67
- package/ios/Image/ImageCompressorOptions.h +1 -0
- package/ios/Image/ImageCompressorOptions.m +5 -1
- package/ios/Utils/Downloader.h +16 -0
- package/ios/Utils/Downloader.m +150 -0
- package/ios/Utils/MediaCache.h +11 -0
- package/ios/Utils/MediaCache.m +51 -0
- package/ios/Video/VideoCompressor.swift +12 -3
- package/lib/commonjs/Image/index.js +25 -3
- package/lib/commonjs/Image/index.js.map +1 -1
- package/lib/commonjs/Spec/NativeCompressor.js.map +1 -1
- package/lib/commonjs/Video/index.js +14 -1
- package/lib/commonjs/Video/index.js.map +1 -1
- package/lib/module/Image/index.js +25 -3
- package/lib/module/Image/index.js.map +1 -1
- package/lib/module/Spec/NativeCompressor.js.map +1 -1
- package/lib/module/Video/index.js +14 -1
- package/lib/module/Video/index.js.map +1 -1
- package/lib/typescript/Image/index.d.ts +4 -0
- package/lib/typescript/Image/index.d.ts.map +1 -1
- package/lib/typescript/Spec/NativeCompressor.d.ts +2 -0
- package/lib/typescript/Spec/NativeCompressor.d.ts.map +1 -1
- package/lib/typescript/Video/index.d.ts +1 -0
- package/lib/typescript/Video/index.d.ts.map +1 -1
- package/package.json +4 -2
- package/src/Image/index.tsx +36 -3
- package/src/Spec/NativeCompressor.ts +2 -0
- package/src/Video/index.tsx +23 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#import "MediaCache.h"
|
|
2
|
+
|
|
3
|
+
@implementation MediaCache
|
|
4
|
+
NSMutableArray<NSString *> *completedImagePaths;
|
|
5
|
+
|
|
6
|
+
+ (void)addCompletedImagePath:(NSString *)imagePath {
|
|
7
|
+
if (imagePath) {
|
|
8
|
+
[completedImagePaths addObject:imagePath];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
+ (void)removeCompletedImagePath:(NSString *)imagePath {
|
|
13
|
+
if (imagePath) {
|
|
14
|
+
[completedImagePaths removeObject:imagePath];
|
|
15
|
+
NSURL *fileURL = [NSURL URLWithString:imagePath];
|
|
16
|
+
NSString *fileSystemPath = [fileURL path];
|
|
17
|
+
|
|
18
|
+
NSFileManager *fileManager = [NSFileManager defaultManager];
|
|
19
|
+
NSError *error = nil;
|
|
20
|
+
|
|
21
|
+
if ([fileManager fileExistsAtPath:fileSystemPath isDirectory:nil]) {
|
|
22
|
+
[fileManager removeItemAtPath:fileSystemPath error:&error];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (error) {
|
|
26
|
+
NSLog(@"Error deleting image at path: %@", fileSystemPath);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
+ (void)cleanupCache {
|
|
32
|
+
NSFileManager *fileManager = [NSFileManager defaultManager];
|
|
33
|
+
NSString *cacheDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
|
|
34
|
+
|
|
35
|
+
for (NSString *imagePath in completedImagePaths) {
|
|
36
|
+
NSString *absoluteImagePath = [cacheDirectory stringByAppendingPathComponent:imagePath];
|
|
37
|
+
NSError *error = nil;
|
|
38
|
+
|
|
39
|
+
if ([fileManager fileExistsAtPath:absoluteImagePath]) {
|
|
40
|
+
[fileManager removeItemAtPath:absoluteImagePath error:&error];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (error) {
|
|
44
|
+
NSLog(@"Error deleting image at path: %@", absoluteImagePath);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
[completedImagePaths removeAllObjects];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@end
|
|
@@ -37,12 +37,17 @@ class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
|
|
|
37
37
|
var uploadRejectors: [String: RCTPromiseRejectBlock] = [:]
|
|
38
38
|
var compressorExports: [String: NextLevelSessionExporter] = [:]
|
|
39
39
|
let videoCompressionThreshold:Int=7
|
|
40
|
-
|
|
40
|
+
|
|
41
|
+
override init() {
|
|
42
|
+
super.init()
|
|
43
|
+
ImageCompressor.initVideoCompressorInstance(self)
|
|
44
|
+
}
|
|
41
45
|
|
|
42
46
|
override static func requiresMainQueueSetup() -> Bool {
|
|
43
47
|
return false
|
|
44
48
|
}
|
|
45
49
|
|
|
50
|
+
|
|
46
51
|
@objc(activateBackgroundTask:withResolver:withRejecter:)
|
|
47
52
|
func activateBackgroundTask(options: [String: Any], resolve:@escaping RCTPromiseResolveBlock, reject:@escaping RCTPromiseRejectBlock) -> Void {
|
|
48
53
|
guard backgroundTaskId == .invalid else {
|
|
@@ -173,7 +178,7 @@ func makeValidUri(filePath: String) -> String {
|
|
|
173
178
|
}
|
|
174
179
|
|
|
175
180
|
override func supportedEvents() -> [String]! {
|
|
176
|
-
return ["videoCompressProgress", "VideoCompressorProgress", "backgroundTaskExpired"]
|
|
181
|
+
return ["videoCompressProgress", "VideoCompressorProgress", "backgroundTaskExpired","downloadProgress"]
|
|
177
182
|
}
|
|
178
183
|
|
|
179
184
|
override func stopObserving() -> Void {
|
|
@@ -206,7 +211,9 @@ func makeValidUri(filePath: String) -> String {
|
|
|
206
211
|
|
|
207
212
|
|
|
208
213
|
func compressVideo(url: URL, options: [String: Any], onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
|
|
209
|
-
|
|
214
|
+
let uuid:String = options["uuid"] as! String
|
|
215
|
+
|
|
216
|
+
ImageCompressor.getAbsoluteVideoPath(url.absoluteString, uuid: uuid) { absoluteVideoPath in
|
|
210
217
|
var minimumFileSizeForCompress:Double=0.0;
|
|
211
218
|
let videoURL = URL(string: absoluteVideoPath!)
|
|
212
219
|
let fileSize=self.getfileSize(forURL: videoURL!);
|
|
@@ -221,6 +228,7 @@ func makeValidUri(filePath: String) -> String {
|
|
|
221
228
|
self.autoCompressionHelper(url: videoURL!, options:options) { progress in
|
|
222
229
|
onProgress(progress)
|
|
223
230
|
} onCompletion: { outputURL in
|
|
231
|
+
MediaCache.removeCompletedImagePath(absoluteVideoPath);
|
|
224
232
|
onCompletion(outputURL)
|
|
225
233
|
} onFailure: { error in
|
|
226
234
|
onFailure(error)
|
|
@@ -231,6 +239,7 @@ func makeValidUri(filePath: String) -> String {
|
|
|
231
239
|
self.manualCompressionHelper(url: videoURL!, options:options) { progress in
|
|
232
240
|
onProgress(progress)
|
|
233
241
|
} onCompletion: { outputURL in
|
|
242
|
+
MediaCache.removeCompletedImagePath(absoluteVideoPath);
|
|
234
243
|
onCompletion(outputURL)
|
|
235
244
|
} onFailure: { error in
|
|
236
245
|
onFailure(error)
|
|
@@ -5,15 +5,37 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _Main = require("../Main");
|
|
8
|
+
var _utils = require("../utils");
|
|
9
|
+
var _reactNative = require("react-native");
|
|
8
10
|
const base64UrlRegex = /^data:image\/.*;(?:charset=.{3,5};)?base64,/;
|
|
11
|
+
const ImageCompressEventEmitter = new _reactNative.NativeEventEmitter(_Main.Compressor);
|
|
9
12
|
const NativeImage = _Main.Compressor;
|
|
10
13
|
const Image = {
|
|
11
|
-
compress: (value
|
|
14
|
+
compress: async function (value) {
|
|
15
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
12
16
|
if (!value) {
|
|
13
17
|
throw new Error('Compression value is empty, please provide a value for compression.');
|
|
14
18
|
}
|
|
15
|
-
const
|
|
16
|
-
|
|
19
|
+
const uuid = (0, _utils.uuidv4)();
|
|
20
|
+
let subscription;
|
|
21
|
+
try {
|
|
22
|
+
if (options !== null && options !== void 0 && options.downloadProgress) {
|
|
23
|
+
//@ts-ignore
|
|
24
|
+
options.uuid = uuid;
|
|
25
|
+
subscription = ImageCompressEventEmitter.addListener('downloadProgress', event => {
|
|
26
|
+
if (event.uuid === uuid) {
|
|
27
|
+
options.downloadProgress && options.downloadProgress(event.data.progress);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const cleanData = value.replace(base64UrlRegex, '');
|
|
32
|
+
return await NativeImage.image_compress(cleanData, options);
|
|
33
|
+
} finally {
|
|
34
|
+
// @ts-ignore
|
|
35
|
+
if (subscription) {
|
|
36
|
+
subscription.remove();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
17
39
|
}
|
|
18
40
|
};
|
|
19
41
|
var _default = Image;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_Main","require","base64UrlRegex","
|
|
1
|
+
{"version":3,"names":["_Main","require","_utils","_reactNative","base64UrlRegex","ImageCompressEventEmitter","NativeEventEmitter","Compressor","NativeImage","Image","compress","value","options","arguments","length","undefined","Error","uuid","uuidv4","subscription","downloadProgress","addListener","event","data","progress","cleanData","replace","image_compress","remove","_default","exports","default"],"sourceRoot":"../../../src","sources":["Image/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAGA,IAAAE,YAAA,GAAAF,OAAA;AAFA,MAAMG,cAAc,GAAG,6CAA6C;AA+CpE,MAAMC,yBAAyB,GAAG,IAAIC,+BAAkB,CAACC,gBAAU,CAAC;AAEpE,MAAMC,WAAW,GAAGD,gBAAU;AAM9B,MAAME,KAAgB,GAAG;EACvBC,QAAQ,EAAE,eAAAA,CAAOC,KAAK,EAAmB;IAAA,IAAjBC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAClC,IAAI,CAACF,KAAK,EAAE;MACV,MAAM,IAAIK,KAAK,CACb,qEACF,CAAC;IACH;IAEA,MAAMC,IAAI,GAAG,IAAAC,aAAM,EAAC,CAAC;IACrB,IAAIC,YAAqC;IACzC,IAAI;MACF,IAAIP,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEQ,gBAAgB,EAAE;QAC7B;QACAR,OAAO,CAACK,IAAI,GAAGA,IAAI;QACnBE,YAAY,GAAGd,yBAAyB,CAACgB,WAAW,CAClD,kBAAkB,EACjBC,KAAU,IAAK;UACd,IAAIA,KAAK,CAACL,IAAI,KAAKA,IAAI,EAAE;YACvBL,OAAO,CAACQ,gBAAgB,IACtBR,OAAO,CAACQ,gBAAgB,CAACE,KAAK,CAACC,IAAI,CAACC,QAAQ,CAAC;UACjD;QACF,CACF,CAAC;MACH;MAEA,MAAMC,SAAS,GAAGd,KAAK,CAACe,OAAO,CAACtB,cAAc,EAAE,EAAE,CAAC;MACnD,OAAO,MAAMI,WAAW,CAACmB,cAAc,CAACF,SAAS,EAAEb,OAAO,CAAC;IAC7D,CAAC,SAAS;MACR;MACA,IAAIO,YAAY,EAAE;QAChBA,YAAY,CAACS,MAAM,CAAC,CAAC;MACvB;IACF;EACF;AACF,CAAC;AAAC,IAAAC,QAAA,GAEapB,KAAK;AAAAqB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","getEnforcing","exports","default"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","getEnforcing","exports","default"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAapCC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAJ,QAAA"}
|
|
@@ -46,6 +46,7 @@ const Video = {
|
|
|
46
46
|
compress: async (fileUrl, options, onProgress) => {
|
|
47
47
|
const uuid = (0, _utils.uuidv4)();
|
|
48
48
|
let subscription;
|
|
49
|
+
let subscription2;
|
|
49
50
|
try {
|
|
50
51
|
if (onProgress) {
|
|
51
52
|
subscription = VideoCompressEventEmitter.addListener('videoCompressProgress', event => {
|
|
@@ -54,6 +55,14 @@ const Video = {
|
|
|
54
55
|
}
|
|
55
56
|
});
|
|
56
57
|
}
|
|
58
|
+
if (options !== null && options !== void 0 && options.downloadProgress) {
|
|
59
|
+
//@ts-ignore
|
|
60
|
+
subscription2 = VideoCompressEventEmitter.addListener('downloadProgress', event => {
|
|
61
|
+
if (event.uuid === uuid) {
|
|
62
|
+
options.downloadProgress && options.downloadProgress(event.data.progress);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
57
66
|
const modifiedOptions = {
|
|
58
67
|
uuid
|
|
59
68
|
};
|
|
@@ -61,7 +70,7 @@ const Video = {
|
|
|
61
70
|
if (options !== null && options !== void 0 && options.compressionMethod) {
|
|
62
71
|
modifiedOptions.compressionMethod = options === null || options === void 0 ? void 0 : options.compressionMethod;
|
|
63
72
|
} else {
|
|
64
|
-
modifiedOptions.compressionMethod = '
|
|
73
|
+
modifiedOptions.compressionMethod = 'auto';
|
|
65
74
|
}
|
|
66
75
|
if (options !== null && options !== void 0 && options.maxSize) {
|
|
67
76
|
modifiedOptions.maxSize = options === null || options === void 0 ? void 0 : options.maxSize;
|
|
@@ -81,6 +90,10 @@ const Video = {
|
|
|
81
90
|
if (subscription) {
|
|
82
91
|
subscription.remove();
|
|
83
92
|
}
|
|
93
|
+
//@ts-ignore
|
|
94
|
+
if (subscription2) {
|
|
95
|
+
subscription2.remove();
|
|
96
|
+
}
|
|
84
97
|
}
|
|
85
98
|
},
|
|
86
99
|
backgroundUpload,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_Main","_utils","VideoCompressEventEmitter","NativeEventEmitter","VideoCompressor","NativeVideoCompressor","backgroundUpload","url","fileUrl","options","onProgress","uuid","uuidv4","subscription","addListener","event","data","written","total","Platform","OS","includes","replace","result","upload","method","httpMethod","headers","remove","exports","cancelCompression","cancellationId","Video","compress","progress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","undefined","getCancellationId","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners","_default","default"],"sourceRoot":"../../../src","sources":["Video/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_Main","_utils","VideoCompressEventEmitter","NativeEventEmitter","VideoCompressor","NativeVideoCompressor","backgroundUpload","url","fileUrl","options","onProgress","uuid","uuidv4","subscription","addListener","event","data","written","total","Platform","OS","includes","replace","result","upload","method","httpMethod","headers","remove","exports","cancelCompression","cancellationId","Video","compress","subscription2","progress","downloadProgress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","undefined","getCancellationId","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners","_default","default"],"sourceRoot":"../../../src","sources":["Video/index.tsx"],"mappings":"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"}
|
|
@@ -1,13 +1,35 @@
|
|
|
1
1
|
import { Compressor } from '../Main';
|
|
2
|
+
import { uuidv4 } from '../utils';
|
|
2
3
|
const base64UrlRegex = /^data:image\/.*;(?:charset=.{3,5};)?base64,/;
|
|
4
|
+
import { NativeEventEmitter } from 'react-native';
|
|
5
|
+
const ImageCompressEventEmitter = new NativeEventEmitter(Compressor);
|
|
3
6
|
const NativeImage = Compressor;
|
|
4
7
|
const Image = {
|
|
5
|
-
compress: (value
|
|
8
|
+
compress: async function (value) {
|
|
9
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
6
10
|
if (!value) {
|
|
7
11
|
throw new Error('Compression value is empty, please provide a value for compression.');
|
|
8
12
|
}
|
|
9
|
-
const
|
|
10
|
-
|
|
13
|
+
const uuid = uuidv4();
|
|
14
|
+
let subscription;
|
|
15
|
+
try {
|
|
16
|
+
if (options !== null && options !== void 0 && options.downloadProgress) {
|
|
17
|
+
//@ts-ignore
|
|
18
|
+
options.uuid = uuid;
|
|
19
|
+
subscription = ImageCompressEventEmitter.addListener('downloadProgress', event => {
|
|
20
|
+
if (event.uuid === uuid) {
|
|
21
|
+
options.downloadProgress && options.downloadProgress(event.data.progress);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
const cleanData = value.replace(base64UrlRegex, '');
|
|
26
|
+
return await NativeImage.image_compress(cleanData, options);
|
|
27
|
+
} finally {
|
|
28
|
+
// @ts-ignore
|
|
29
|
+
if (subscription) {
|
|
30
|
+
subscription.remove();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
11
33
|
}
|
|
12
34
|
};
|
|
13
35
|
export default Image;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Compressor","base64UrlRegex","NativeImage","Image","compress","value","options","Error","cleanData","replace","image_compress"],"sourceRoot":"../../../src","sources":["Image/index.tsx"],"mappings":"AAAA,SAASA,UAAU,QAAQ,SAAS;AACpC,MAAMC,cAAc,GAAG,6CAA6C;
|
|
1
|
+
{"version":3,"names":["Compressor","uuidv4","base64UrlRegex","NativeEventEmitter","ImageCompressEventEmitter","NativeImage","Image","compress","value","options","arguments","length","undefined","Error","uuid","subscription","downloadProgress","addListener","event","data","progress","cleanData","replace","image_compress","remove"],"sourceRoot":"../../../src","sources":["Image/index.tsx"],"mappings":"AAAA,SAASA,UAAU,QAAQ,SAAS;AACpC,SAASC,MAAM,QAAQ,UAAU;AACjC,MAAMC,cAAc,GAAG,6CAA6C;AAEpE,SAASC,kBAAkB,QAAQ,cAAc;AA6CjD,MAAMC,yBAAyB,GAAG,IAAID,kBAAkB,CAACH,UAAU,CAAC;AAEpE,MAAMK,WAAW,GAAGL,UAAU;AAM9B,MAAMM,KAAgB,GAAG;EACvBC,QAAQ,EAAE,eAAAA,CAAOC,KAAK,EAAmB;IAAA,IAAjBC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAClC,IAAI,CAACF,KAAK,EAAE;MACV,MAAM,IAAIK,KAAK,CACb,qEACF,CAAC;IACH;IAEA,MAAMC,IAAI,GAAGb,MAAM,CAAC,CAAC;IACrB,IAAIc,YAAqC;IACzC,IAAI;MACF,IAAIN,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEO,gBAAgB,EAAE;QAC7B;QACAP,OAAO,CAACK,IAAI,GAAGA,IAAI;QACnBC,YAAY,GAAGX,yBAAyB,CAACa,WAAW,CAClD,kBAAkB,EACjBC,KAAU,IAAK;UACd,IAAIA,KAAK,CAACJ,IAAI,KAAKA,IAAI,EAAE;YACvBL,OAAO,CAACO,gBAAgB,IACtBP,OAAO,CAACO,gBAAgB,CAACE,KAAK,CAACC,IAAI,CAACC,QAAQ,CAAC;UACjD;QACF,CACF,CAAC;MACH;MAEA,MAAMC,SAAS,GAAGb,KAAK,CAACc,OAAO,CAACpB,cAAc,EAAE,EAAE,CAAC;MACnD,OAAO,MAAMG,WAAW,CAACkB,cAAc,CAACF,SAAS,EAAEZ,OAAO,CAAC;IAC7D,CAAC,SAAS;MACR;MACA,IAAIM,YAAY,EAAE;QAChBA,YAAY,CAACS,MAAM,CAAC,CAAC;MACvB;IACF;EACF;AACF,CAAC;AAED,eAAelB,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AAalD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC"}
|
|
@@ -38,6 +38,7 @@ const Video = {
|
|
|
38
38
|
compress: async (fileUrl, options, onProgress) => {
|
|
39
39
|
const uuid = uuidv4();
|
|
40
40
|
let subscription;
|
|
41
|
+
let subscription2;
|
|
41
42
|
try {
|
|
42
43
|
if (onProgress) {
|
|
43
44
|
subscription = VideoCompressEventEmitter.addListener('videoCompressProgress', event => {
|
|
@@ -46,6 +47,14 @@ const Video = {
|
|
|
46
47
|
}
|
|
47
48
|
});
|
|
48
49
|
}
|
|
50
|
+
if (options !== null && options !== void 0 && options.downloadProgress) {
|
|
51
|
+
//@ts-ignore
|
|
52
|
+
subscription2 = VideoCompressEventEmitter.addListener('downloadProgress', event => {
|
|
53
|
+
if (event.uuid === uuid) {
|
|
54
|
+
options.downloadProgress && options.downloadProgress(event.data.progress);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
49
58
|
const modifiedOptions = {
|
|
50
59
|
uuid
|
|
51
60
|
};
|
|
@@ -53,7 +62,7 @@ const Video = {
|
|
|
53
62
|
if (options !== null && options !== void 0 && options.compressionMethod) {
|
|
54
63
|
modifiedOptions.compressionMethod = options === null || options === void 0 ? void 0 : options.compressionMethod;
|
|
55
64
|
} else {
|
|
56
|
-
modifiedOptions.compressionMethod = '
|
|
65
|
+
modifiedOptions.compressionMethod = 'auto';
|
|
57
66
|
}
|
|
58
67
|
if (options !== null && options !== void 0 && options.maxSize) {
|
|
59
68
|
modifiedOptions.maxSize = options === null || options === void 0 ? void 0 : options.maxSize;
|
|
@@ -73,6 +82,10 @@ const Video = {
|
|
|
73
82
|
if (subscription) {
|
|
74
83
|
subscription.remove();
|
|
75
84
|
}
|
|
85
|
+
//@ts-ignore
|
|
86
|
+
if (subscription2) {
|
|
87
|
+
subscription2.remove();
|
|
88
|
+
}
|
|
76
89
|
}
|
|
77
90
|
},
|
|
78
91
|
backgroundUpload,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeEventEmitter","Platform","VideoCompressor","uuidv4","VideoCompressEventEmitter","NativeVideoCompressor","backgroundUpload","url","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","written","total","OS","includes","replace","result","upload","method","httpMethod","headers","remove","cancelCompression","cancellationId","Video","compress","progress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","undefined","getCancellationId","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners"],"sourceRoot":"../../../src","sources":["Video/index.tsx"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,QAAQ,QAAQ,cAAc;AAE3D,SAASC,eAAe,QAAQ,SAAS;AACzC,SAASC,MAAM,QAAQ,UAAU;
|
|
1
|
+
{"version":3,"names":["NativeEventEmitter","Platform","VideoCompressor","uuidv4","VideoCompressEventEmitter","NativeVideoCompressor","backgroundUpload","url","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","written","total","OS","includes","replace","result","upload","method","httpMethod","headers","remove","cancelCompression","cancellationId","Video","compress","subscription2","progress","downloadProgress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","undefined","getCancellationId","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners"],"sourceRoot":"../../../src","sources":["Video/index.tsx"],"mappings":"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"}
|
|
@@ -31,6 +31,10 @@ export type CompressorOptions = {
|
|
|
31
31
|
* The output that will return to user.
|
|
32
32
|
*/
|
|
33
33
|
returnableOutputType?: ReturnableOutputType;
|
|
34
|
+
/***
|
|
35
|
+
* it is callback, only trigger when we pass image url from server
|
|
36
|
+
*/
|
|
37
|
+
downloadProgress?: (progress: number) => void;
|
|
34
38
|
};
|
|
35
39
|
type ImageType = {
|
|
36
40
|
compress(value: string, options?: CompressorOptions): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Image/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Image/index.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;AAEvC,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElD,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;OAEG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAMF,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvE,CAAC;AAEF,QAAA,MAAM,KAAK,EAAE,SAkCZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -6,6 +6,8 @@ export interface Spec extends TurboModule {
|
|
|
6
6
|
getRealPath(path: string, type: string): Promise<string>;
|
|
7
7
|
getVideoMetaData(filePath: string): Promise<string>;
|
|
8
8
|
getFileSize(filePath: string): Promise<string>;
|
|
9
|
+
addListener(eventName: string): void;
|
|
10
|
+
removeListeners(count: number): void;
|
|
9
11
|
}
|
|
10
12
|
declare const _default: Spec;
|
|
11
13
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeCompressor.d.ts","sourceRoot":"","sources":["../../../src/Spec/NativeCompressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"NativeCompressor.d.ts","sourceRoot":"","sources":["../../../src/Spec/NativeCompressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;;AAED,wBAAoE"}
|
|
@@ -10,6 +10,7 @@ type videoCompresssionType = {
|
|
|
10
10
|
compressionMethod?: compressionMethod;
|
|
11
11
|
minimumFileSizeForCompress?: number;
|
|
12
12
|
getCancellationId?: (cancellationId: string) => void;
|
|
13
|
+
downloadProgress?: (progress: number) => void;
|
|
13
14
|
};
|
|
14
15
|
export declare enum FileSystemSessionType {
|
|
15
16
|
BACKGROUND = 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Video/index.tsx"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,MAAM,oBAAoB;IACtC,cAAc,IAAI;IAClB,SAAS,IAAI;CACd;AAED,MAAM,CAAC,OAAO,MAAM,kCAAkC,GAClD,MAAM,GACN,KAAK,GACL,OAAO,CAAC;AACZ,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAClD,KAAK,qBAAqB,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Video/index.tsx"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,MAAM,oBAAoB;IACtC,cAAc,IAAI;IAClB,SAAS,IAAI;CACd;AAED,MAAM,CAAC,OAAO,MAAM,kCAAkC,GAClD,MAAM,GACN,KAAK,GACL,OAAO,CAAC;AACZ,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAClD,KAAK,qBAAqB,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,CAAC,OAAO,MAAM,qBAAqB;IACvC,UAAU,IAAI;IACd,UAAU,IAAI;CACf;AAED,MAAM,CAAC,OAAO,MAAM,YAAY,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,CAAC,OAAO,MAAM,uBAAuB,GAAG,CAC1C;IACE,UAAU,CAAC,EAAE,oBAAoB,CAAC,cAAc,CAAC;CAClD,GACD;IACE,UAAU,EAAE,oBAAoB,CAAC,SAAS,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CACJ,GAAG;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,kCAAkC,CAAC;IAChD,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CACN,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,qBAAqB,EAC/B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,gBAAgB,CACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,uBAAuB,EAChC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACpD,OAAO,CAAC,GAAG,CAAC,CAAC;IAChB,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACtE,wBAAwB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;CAC1C,CAAC;AAMF,eAAO,MAAM,gBAAgB,QACtB,MAAM,WACF,MAAM,WACN,uBAAuB,0BACT,MAAM,SAAS,MAAM,KAAK,IAAI,kBACpD,QAAQ,GAAG,CA8Bb,CAAC;AAEF,eAAO,MAAM,iBAAiB,mBAAoB,MAAM,QAEvD,CAAC;AAEF,QAAA,MAAM,KAAK,EAAE,mBAkGW,CAAC;AAEzB,eAAe,KAAK,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-compressor",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"description": "This library compress image, video and audio",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -53,7 +53,9 @@
|
|
|
53
53
|
"compress-videos",
|
|
54
54
|
"react-native-compress",
|
|
55
55
|
"react-native-compressor",
|
|
56
|
-
"compress-audio"
|
|
56
|
+
"compress-audio",
|
|
57
|
+
"whatsapp",
|
|
58
|
+
"compressor"
|
|
57
59
|
],
|
|
58
60
|
"repository": "https://github.com/numandev1/react-native-compressor",
|
|
59
61
|
"author": "numandev1 <muhammadnuman70@gmail.com> (https://github.com/numandev1)",
|
package/src/Image/index.tsx
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { Compressor } from '../Main';
|
|
2
|
+
import { uuidv4 } from '../utils';
|
|
2
3
|
const base64UrlRegex = /^data:image\/.*;(?:charset=.{3,5};)?base64,/;
|
|
4
|
+
import type { NativeEventSubscription } from 'react-native';
|
|
5
|
+
import { NativeEventEmitter } from 'react-native';
|
|
3
6
|
|
|
4
7
|
export type InputType = 'base64' | 'uri';
|
|
5
8
|
|
|
@@ -38,8 +41,14 @@ export type CompressorOptions = {
|
|
|
38
41
|
* The output that will return to user.
|
|
39
42
|
*/
|
|
40
43
|
returnableOutputType?: ReturnableOutputType;
|
|
44
|
+
/***
|
|
45
|
+
* it is callback, only trigger when we pass image url from server
|
|
46
|
+
*/
|
|
47
|
+
downloadProgress?: (progress: number) => void;
|
|
41
48
|
};
|
|
42
49
|
|
|
50
|
+
const ImageCompressEventEmitter = new NativeEventEmitter(Compressor);
|
|
51
|
+
|
|
43
52
|
const NativeImage = Compressor;
|
|
44
53
|
|
|
45
54
|
type ImageType = {
|
|
@@ -47,14 +56,38 @@ type ImageType = {
|
|
|
47
56
|
};
|
|
48
57
|
|
|
49
58
|
const Image: ImageType = {
|
|
50
|
-
compress: (value, options) => {
|
|
59
|
+
compress: async (value, options = {}) => {
|
|
51
60
|
if (!value) {
|
|
52
61
|
throw new Error(
|
|
53
62
|
'Compression value is empty, please provide a value for compression.'
|
|
54
63
|
);
|
|
55
64
|
}
|
|
56
|
-
|
|
57
|
-
|
|
65
|
+
|
|
66
|
+
const uuid = uuidv4();
|
|
67
|
+
let subscription: NativeEventSubscription;
|
|
68
|
+
try {
|
|
69
|
+
if (options?.downloadProgress) {
|
|
70
|
+
//@ts-ignore
|
|
71
|
+
options.uuid = uuid;
|
|
72
|
+
subscription = ImageCompressEventEmitter.addListener(
|
|
73
|
+
'downloadProgress',
|
|
74
|
+
(event: any) => {
|
|
75
|
+
if (event.uuid === uuid) {
|
|
76
|
+
options.downloadProgress &&
|
|
77
|
+
options.downloadProgress(event.data.progress);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const cleanData = value.replace(base64UrlRegex, '');
|
|
84
|
+
return await NativeImage.image_compress(cleanData, options);
|
|
85
|
+
} finally {
|
|
86
|
+
// @ts-ignore
|
|
87
|
+
if (subscription) {
|
|
88
|
+
subscription.remove();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
58
91
|
},
|
|
59
92
|
};
|
|
60
93
|
|
|
@@ -8,6 +8,8 @@ export interface Spec extends TurboModule {
|
|
|
8
8
|
getRealPath(path: string, type: string): Promise<string>;
|
|
9
9
|
getVideoMetaData(filePath: string): Promise<string>;
|
|
10
10
|
getFileSize(filePath: string): Promise<string>;
|
|
11
|
+
addListener(eventName: string): void;
|
|
12
|
+
removeListeners(count: number): void;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
export default TurboModuleRegistry.getEnforcing<Spec>('Compressor');
|
package/src/Video/index.tsx
CHANGED
|
@@ -19,6 +19,7 @@ type videoCompresssionType = {
|
|
|
19
19
|
compressionMethod?: compressionMethod;
|
|
20
20
|
minimumFileSizeForCompress?: number;
|
|
21
21
|
getCancellationId?: (cancellationId: string) => void;
|
|
22
|
+
downloadProgress?: (progress: number) => void;
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
export declare enum FileSystemSessionType {
|
|
@@ -118,6 +119,8 @@ const Video: VideoCompressorType = {
|
|
|
118
119
|
) => {
|
|
119
120
|
const uuid = uuidv4();
|
|
120
121
|
let subscription: NativeEventSubscription;
|
|
122
|
+
let subscription2: NativeEventSubscription;
|
|
123
|
+
|
|
121
124
|
try {
|
|
122
125
|
if (onProgress) {
|
|
123
126
|
subscription = VideoCompressEventEmitter.addListener(
|
|
@@ -129,6 +132,20 @@ const Video: VideoCompressorType = {
|
|
|
129
132
|
}
|
|
130
133
|
);
|
|
131
134
|
}
|
|
135
|
+
|
|
136
|
+
if (options?.downloadProgress) {
|
|
137
|
+
//@ts-ignore
|
|
138
|
+
subscription2 = VideoCompressEventEmitter.addListener(
|
|
139
|
+
'downloadProgress',
|
|
140
|
+
(event: any) => {
|
|
141
|
+
if (event.uuid === uuid) {
|
|
142
|
+
options.downloadProgress &&
|
|
143
|
+
options.downloadProgress(event.data.progress);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
132
149
|
const modifiedOptions: {
|
|
133
150
|
uuid: string;
|
|
134
151
|
bitrate?: number;
|
|
@@ -140,7 +157,7 @@ const Video: VideoCompressorType = {
|
|
|
140
157
|
if (options?.compressionMethod) {
|
|
141
158
|
modifiedOptions.compressionMethod = options?.compressionMethod;
|
|
142
159
|
} else {
|
|
143
|
-
modifiedOptions.compressionMethod = '
|
|
160
|
+
modifiedOptions.compressionMethod = 'auto';
|
|
144
161
|
}
|
|
145
162
|
if (options?.maxSize) {
|
|
146
163
|
modifiedOptions.maxSize = options?.maxSize;
|
|
@@ -154,6 +171,7 @@ const Video: VideoCompressorType = {
|
|
|
154
171
|
if (options?.getCancellationId) {
|
|
155
172
|
options?.getCancellationId(uuid);
|
|
156
173
|
}
|
|
174
|
+
|
|
157
175
|
const result = await NativeVideoCompressor.compress(
|
|
158
176
|
fileUrl,
|
|
159
177
|
modifiedOptions
|
|
@@ -164,6 +182,10 @@ const Video: VideoCompressorType = {
|
|
|
164
182
|
if (subscription) {
|
|
165
183
|
subscription.remove();
|
|
166
184
|
}
|
|
185
|
+
//@ts-ignore
|
|
186
|
+
if (subscription2) {
|
|
187
|
+
subscription2.remove();
|
|
188
|
+
}
|
|
167
189
|
}
|
|
168
190
|
},
|
|
169
191
|
backgroundUpload,
|