@@ -197,6 +197,9 @@ add_compress_arg (FrCommand *comm)
197197 if (is_mime_type (comm -> mime_type , "application/x-compressed-tar" ))
198198 fr_process_add_arg (comm -> process , "-z" );
199199
200+ else if (is_mime_type (comm -> mime_type , "application/x-brotli-compressed-tar" ))
201+ fr_process_add_arg (comm -> process , "--use-compress-program=brotli" );
202+
200203 else if (is_mime_type (comm -> mime_type , "application/x-bzip-compressed-tar" ))
201204 if (is_program_in_path ("lbzip2" ))
202205 fr_process_add_arg (comm -> process , "--use-compress-program=lbzip2" );
@@ -544,6 +547,25 @@ fr_command_tar_recompress (FrCommand *comm)
544547
545548 new_name = g_strconcat (c_tar -> uncomp_filename , ".gz" , NULL );
546549 }
550+ else if (is_mime_type (comm -> mime_type , "application/x-brotli-compressed-tar" )) {
551+ fr_process_begin_command (comm -> process , "brotli" );
552+ fr_process_set_begin_func (comm -> process , begin_func__recompress , comm );
553+ switch (comm -> compression ) {
554+ case FR_COMPRESSION_VERY_FAST :
555+ fr_process_add_arg (comm -> process , "-1" ); break ;
556+ case FR_COMPRESSION_FAST :
557+ fr_process_add_arg (comm -> process , "-3" ); break ;
558+ case FR_COMPRESSION_NORMAL :
559+ fr_process_add_arg (comm -> process , "-6" ); break ;
560+ case FR_COMPRESSION_MAXIMUM :
561+ fr_process_add_arg (comm -> process , "--best" ); break ; // i.e. -q 11
562+ }
563+ fr_process_add_arg (comm -> process , "-f" );
564+ fr_process_add_arg (comm -> process , c_tar -> uncomp_filename );
565+ fr_process_end_command (comm -> process );
566+
567+ new_name = g_strconcat (c_tar -> uncomp_filename , ".br" , NULL );
568+ }
547569 else if (is_mime_type (comm -> mime_type , "application/x-bzip-compressed-tar" )) {
548570 fr_process_begin_command (comm -> process , "bzip2" );
549571 fr_process_set_begin_func (comm -> process , begin_func__recompress , comm );
@@ -757,6 +779,11 @@ get_uncompressed_name (FrCommandTar *c_tar,
757779 else if (file_extension_is (e_filename , ".tar.gz" ))
758780 new_name [l - 3 ] = 0 ;
759781 }
782+ else if (is_mime_type (comm -> mime_type , "application/x-brotli-compressed-tar" )) {
783+ /* X.tar.br --> X.tar */
784+ if (file_extension_is (e_filename , ".tar.br" ))
785+ new_name [l - 3 ] = 0 ;
786+ }
760787 else if (is_mime_type (comm -> mime_type , "application/x-bzip-compressed-tar" )) {
761788 /* X.tbz2 --> X.tar
762789 * X.tar.bz2 --> X.tar */
@@ -895,6 +922,14 @@ fr_command_tar_uncompress (FrCommand *comm)
895922 fr_process_add_arg (comm -> process , tmp_name );
896923 fr_process_end_command (comm -> process );
897924 }
925+ else if (is_mime_type (comm -> mime_type , "application/x-brotli-compressed-tar" )) {
926+ fr_process_begin_command (comm -> process , "brotli" );
927+ fr_process_set_begin_func (comm -> process , begin_func__uncompress , comm );
928+ fr_process_add_arg (comm -> process , "-f" );
929+ fr_process_add_arg (comm -> process , "-d" );
930+ fr_process_add_arg (comm -> process , tmp_name );
931+ fr_process_end_command (comm -> process );
932+ }
898933 else if (is_mime_type (comm -> mime_type , "application/x-bzip-compressed-tar" )) {
899934 fr_process_begin_command (comm -> process , "bzip2" );
900935 fr_process_set_begin_func (comm -> process , begin_func__uncompress , comm );
@@ -992,6 +1027,7 @@ fr_command_tar_handle_error (FrCommand *comm,
9921027
9931028
9941029const char * tar_mime_types [] = { "application/x-compressed-tar" ,
1030+ "application/x-brotli-compressed-tar" ,
9951031 "application/x-bzip-compressed-tar" ,
9961032 "application/x-tar" ,
9971033 "application/x-7z-compressed-tar" ,
@@ -1031,6 +1067,10 @@ fr_command_tar_get_capabilities (FrCommand *comm,
10311067 if (is_program_available ("gzip" , check_command ))
10321068 capabilities |= FR_COMMAND_CAN_READ_WRITE ;
10331069 }
1070+ else if (is_mime_type (mime_type , "application/x-brotli-compressed-tar" )) {
1071+ if (is_program_available ("brotli" , check_command ))
1072+ capabilities |= FR_COMMAND_CAN_READ_WRITE ;
1073+ }
10341074 else if (is_mime_type (mime_type , "application/x-bzip-compressed-tar" )) {
10351075 if (is_program_available ("bzip2" , check_command ))
10361076 capabilities |= FR_COMMAND_CAN_READ_WRITE ;
@@ -1109,6 +1149,8 @@ fr_command_tar_get_packages (FrCommand *comm,
11091149 return PACKAGES ("tar,gzip" );
11101150 else if (is_mime_type (mime_type , "application/x-bzip-compressed-tar" ))
11111151 return PACKAGES ("tar,bzip2" );
1152+ else if (is_mime_type (mime_type , "application/x-brotli-compressed-tar" ))
1153+ return PACKAGES ("tar,brotli" );
11121154 else if (is_mime_type (mime_type , "application/x-tarz" ))
11131155 return PACKAGES ("tar,gzip,ncompress" );
11141156 else if (is_mime_type (mime_type , "application/x-lrzip-compressed-tar" ))
0 commit comments