Skip to content

Commit fa96f93

Browse files
committed
Added support for brotli (*.tar.br) compressed tar archives
1 parent f06c216 commit fa96f93

6 files changed

Lines changed: 52 additions & 5 deletions

File tree

README

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
* uncompressed (.tar)
3636
or compressed with:
3737
* gzip (.tar.gz , .tgz)
38+
* brotli (.tar.br)
3839
* bzip (.tar.bz , .tbz)
3940
* bzip2 (.tar.bz2 , .tbz2)
4041
* compress (.tar.Z , .taz)
@@ -47,8 +48,8 @@
4748
* ZIP Archive (.zip)
4849
* ZIP Archived Comic Book (.cbz)
4950
* ZOO Compressed Archive File (.zoo)
50-
* Single files compressed with gzip, brotli (.br), bzip, bzip2, compress, lrzip, lzip,
51-
lzop, rzip, xz.
51+
* Single files compressed with gzip (.gz), brotli (.br), bzip (.bz), bzip2 (.bz2), compress (.Z),
52+
lrzip (.lrz), lzip (.lz), lzop (.lzo), rzip(.rz), xz (.xz).
5253

5354
* Home Page
5455

caja/caja-engrampa.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ static struct {
160160
{ "application/x-ar", TRUE },
161161
{ "application/x-arj", TRUE },
162162
{ "application/x-brotli", TRUE },
163+
{ "application/x-brotli-compressed-tar", TRUE },
163164
{ "application/x-bzip", TRUE },
164165
{ "application/x-bzip-compressed-tar", TRUE },
165166
{ "application/x-bzip1", TRUE },

data/engrampa.appdata.xml.in

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,15 @@
3333
<li>WinRAR Compressed Archive (.rar)</li>
3434
<li>RAR Archived Comic Book (.cbr)</li>
3535
<li>RPM Linux Package (.rpm) [Read-only mode]</li>
36-
<li>Tape Archive File uncompressed (.tar) or compressed with: gzip (.tar.gz, .tgz), brotli (.br), bzip (.tar.bz, .tbz), bzip2 (.tar.bz2, .tbz2),
36+
<li>Tape Archive File uncompressed (.tar) or compressed with: gzip (.tar.gz, .tgz), brotli (.tar.br), bzip (.tar.bz, .tbz), bzip2 (.tar.bz2, .tbz2),
3737
compress (.tar.Z, .taz), lrzip (.tar.lrz, .tlrz), lzip (.tar.lz, .tlz), lzop (.tar.lzo, .tzo), 7zip (.tar.7z), xz (.tar.xz)
3838
</li>
3939
<li>Stuffit Archives (.bin, .sit)</li>
4040
<li>ZIP Archive (.zip)</li>
4141
<li>ZIP Archived Comic Book (.cbz)</li>
4242
<li>ZOO Compressed Archive File (.zoo)</li>
43-
<li>Single files compressed with gzip, bzip, bzip2, compress, lrzip, lzip, lzop, rzip, xz</li>
43+
<li>Single files compressed with gzip (.gz), brotli (.br), bzip (.bz), bzip2 (.bz2), compress (.Z),
44+
lrzip (.lrz), lzip (.lz), lzop (.lzo), rzip(.rz), xz (.xz).</li>
4445
</ul>
4546
<p>
4647
Engrampa is a fork of File Roller and part of the MATE Desktop Environment.

data/engrampa.desktop.in.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Terminal=false
99
Type=Application
1010
Icon=engrampa
1111
Categories=GTK;Utility;Archiving;Compression;
12-
MimeType=application/x-7z-compressed;application/x-7z-compressed-tar;application/x-ace;application/x-alz;application/x-ar;application/x-arj;application/x-brotli;application/x-bzip;application/x-bzip-compressed-tar;application/x-bzip1;application/x-bzip1-compressed-tar;application/x-cabinet;application/x-cbr;application/x-cbz;application/x-cd-image;application/x-compress;application/x-compressed-tar;application/x-cpio;application/x-deb;application/x-ear;application/x-ms-dos-executable;application/x-gtar;application/x-gzip;application/x-gzpostscript;application/x-java-archive;application/x-lha;application/x-lhz;application/x-lrzip;application/x-lrzip-compressed-tar;application/x-lzip;application/x-lzip-compressed-tar;application/x-lzma;application/x-lzma-compressed-tar;application/x-lzop;application/x-lzop-compressed-tar;application/x-ms-wim;application/x-rar;application/x-rar-compressed;application/x-rpm;application/x-rzip;application/x-tar;application/x-tarz;application/x-stuffit;application/x-war;application/x-xz;application/x-xz-compressed-tar;application/x-zip;application/x-zip-compressed;application/x-zoo;application/zip;application/x-archive;application/vnd.ms-cab-compressed;
12+
MimeType=application/x-7z-compressed;application/x-7z-compressed-tar;application/x-ace;application/x-alz;application/x-ar;application/x-arj;application/x-brotli;application/x-brotli-compressed-tar;application/x-bzip;application/x-bzip-compressed-tar;application/x-bzip1;application/x-bzip1-compressed-tar;application/x-cabinet;application/x-cbr;application/x-cbz;application/x-cd-image;application/x-compress;application/x-compressed-tar;application/x-cpio;application/x-deb;application/x-ear;application/x-ms-dos-executable;application/x-gtar;application/x-gzip;application/x-gzpostscript;application/x-java-archive;application/x-lha;application/x-lhz;application/x-lrzip;application/x-lrzip-compressed-tar;application/x-lzip;application/x-lzip-compressed-tar;application/x-lzma;application/x-lzma-compressed-tar;application/x-lzop;application/x-lzop-compressed-tar;application/x-ms-wim;application/x-rar;application/x-rar-compressed;application/x-rpm;application/x-rzip;application/x-tar;application/x-tarz;application/x-stuffit;application/x-war;application/x-xz;application/x-xz-compressed-tar;application/x-zip;application/x-zip-compressed;application/x-zoo;application/zip;application/x-archive;application/vnd.ms-cab-compressed;
1313
Keywords=MATE;archive;manager;compression;
1414
X-MATE-DocPath=engrampa/engrampa.xml
1515
X-MATE-Bugzilla-Bugzilla=MATE

src/fr-command-tar.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

9941029
const 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"))

src/fr-init.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ FrMimeTypeDescription mime_type_desc[] = {
6666
{ "application/x-ar", ".ar", N_("Ar (.ar)"), 0 },
6767
{ "application/x-arj", ".arj", N_("Arj (.arj)"), 0 },
6868
{ "application/x-brotli", ".br", N_("brotli (.br)"), 0 },
69+
{ "application/x-brotli-compressed-tar", ".tar.br", N_("Tar compressed with brotli (.tar.br)"), 0 },
6970
{ "application/x-bzip", ".bz2", NULL, 0 },
7071
{ "application/x-bzip-compressed-tar", ".tar.bz2", N_("Tar compressed with bzip2 (.tar.bz2)"), 0 },
7172
{ "application/x-bzip1", ".bz", NULL, 0 },
@@ -151,6 +152,7 @@ FrExtensionType file_ext_type[] = {
151152
{ ".sit", "application/x-stuffit" },
152153
{ ".swm", "application/x-ms-wim" },
153154
{ ".tar", "application/x-tar" },
155+
{ ".tar.br", "application/x-brotli-compressed-tar" },
154156
{ ".tar.bz", "application/x-bzip-compressed-tar" },
155157
{ ".tar.bz2", "application/x-bzip-compressed-tar" },
156158
{ ".tar.gz", "application/x-compressed-tar" },

0 commit comments

Comments
 (0)