@@ -283,39 +283,37 @@ public void run() {
283283 }
284284
285285 @ ReactMethod
286- public void zipFiles (final ReadableArray files , final String destDirectory , final Promise promise ) {
287- zip (files .toArrayList (), destDirectory , promise );
286+ public void zipFiles (final ReadableArray files , final String destDirectory , final double compressionLevel , final Promise promise ) {
287+ zip (files .toArrayList (), destDirectory , compressionLevel , promise );
288288 }
289289
290290 @ ReactMethod
291- public void zipFolder (final String folder , final String destFile , final Promise promise ) {
291+ public void zipFolder (final String folder , final String destFile , final double compressionLevel , final Promise promise ) {
292292 ArrayList <Object > folderAsArrayList = new ArrayList <>();
293293 folderAsArrayList .add (folder );
294- zip (folderAsArrayList , destFile , promise );
294+ zip (folderAsArrayList , destFile , compressionLevel , promise );
295295 }
296296
297297 @ ReactMethod
298298 public void zipFilesWithPassword (final ReadableArray files , final String destFile , final String password ,
299- String encryptionMethod , Promise promise ) {
300- zipWithPassword (files .toArrayList (), destFile , password , encryptionMethod , promise );
299+ String encryptionMethod , final double compressionLevel , Promise promise ) {
300+ zipWithPassword (files .toArrayList (), destFile , password , encryptionMethod , compressionLevel , promise );
301301 }
302302
303-
304303 @ ReactMethod
305304 public void zipFolderWithPassword (final String folder , final String destFile , final String password ,
306- String encryptionMethod , Promise promise ) {
305+ String encryptionMethod , final double compressionLevel , Promise promise ) {
307306 ArrayList <Object > folderAsArrayList = new ArrayList <>();
308307 folderAsArrayList .add (folder );
309- zipWithPassword (folderAsArrayList , destFile , password , encryptionMethod , promise );
308+ zipWithPassword (folderAsArrayList , destFile , password , encryptionMethod , compressionLevel , promise );
310309 }
311310
312311 private void zipWithPassword (final ArrayList <Object > filesOrDirectory , final String destFile , final String password ,
313- String encryptionMethod , Promise promise ) {
312+ String encryptionMethod , final double compressionLevel , Promise promise ) {
314313 try {
315-
316314 ZipParameters parameters = new ZipParameters ();
317315 parameters .setCompressionMethod (CompressionMethod .DEFLATE );
318- parameters .setCompressionLevel (CompressionLevel . NORMAL );
316+ parameters .setCompressionLevel (getCompressionLevel ( compressionLevel ) );
319317
320318 String encParts [] = encryptionMethod .split ("-" );
321319
@@ -347,15 +345,13 @@ private void zipWithPassword(final ArrayList<Object> filesOrDirectory, final Str
347345 promise .reject ("RNZipArchiveError" , ex .getMessage ());
348346 return ;
349347 }
350-
351348 }
352349
353- private void zip (final ArrayList <Object > filesOrDirectory , final String destFile , final Promise promise ) {
350+ private void zip (final ArrayList <Object > filesOrDirectory , final String destFile , final double compressionLevel , final Promise promise ) {
354351 try {
355-
356352 ZipParameters parameters = new ZipParameters ();
357353 parameters .setCompressionMethod (CompressionMethod .DEFLATE );
358- parameters .setCompressionLevel (CompressionLevel . NORMAL );
354+ parameters .setCompressionLevel (getCompressionLevel ( compressionLevel ) );
359355
360356 processZip (filesOrDirectory , destFile , parameters , promise , null );
361357
@@ -473,6 +469,36 @@ private long getUncompressedSize(String zipFilePath, String charset) {
473469 return totalSize ;
474470 }
475471
472+ private static CompressionLevel getCompressionLevel (double compressionLevel ) {
473+ switch (compressionLevel ) {
474+ case -1 :
475+ return CompressionLevel .NORMAL ;
476+ case 0 :
477+ return CompressionLevel .NO_COMPRESSION ;
478+ case 1 :
479+ return CompressionLevel .FASTEST ;
480+ case 2 :
481+ return CompressionLevel .FASTER ;
482+ case 3 :
483+ return CompressionLevel .FAST ;
484+ case 4 :
485+ return CompressionLevel .MEDIUM_FAST ;
486+ case 5 :
487+ return CompressionLevel .NORMAL ;
488+ case 6 :
489+ return CompressionLevel .HIGHER ;
490+ case 7 :
491+ return CompressionLevel .MAXIMUM ;
492+ case 8 :
493+ return CompressionLevel .PRE_ULTRA ;
494+ case 9 :
495+ return CompressionLevel .ULTRA ;
496+ default :
497+ Log .w (TAG , "Unsupported compression level: " + compressionLevel + ", defaulting to NORMAL (5)" );
498+ return CompressionLevel .NORMAL ;
499+ }
500+ }
501+
476502 /**
477503 * Returns the exception stack trace as a string
478504 */
@@ -492,5 +518,4 @@ public void addListener(String eventName) {
492518 public void removeListeners (Integer count ) {
493519 // Keep: Required for RN built in Event Emitter Calls.
494520 }
495-
496521}
0 commit comments