summaryrefslogtreecommitdiff
path: root/src/fr-command-cfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fr-command-cfile.c')
-rw-r--r--src/fr-command-cfile.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/fr-command-cfile.c b/src/fr-command-cfile.c
index 9b855a8..e71ea65 100644
--- a/src/fr-command-cfile.c
+++ b/src/fr-command-cfile.c
@@ -299,6 +299,14 @@ fr_command_cfile_add (FrCommand *comm,
compressed_filename = g_strconcat (filename, ".rz", NULL);
}
+ else if (is_mime_type (comm->mime_type, "application/zstd")) {
+ fr_process_begin_command (comm->process, "zstd");
+ fr_process_set_working_dir (comm->process, temp_dir);
+ fr_process_add_arg (comm->process, filename);
+ fr_process_end_command (comm->process);
+ compressed_filename = g_strconcat (filename, ".zst", NULL);
+ }
+
/* copy compressed file to the dest dir */
fr_process_begin_command (comm->process, "cp");
@@ -436,6 +444,14 @@ fr_command_cfile_extract (FrCommand *comm,
fr_process_end_command (comm->process);
}
+ else if (is_mime_type (comm->mime_type, "application/zstd")) {
+ fr_process_begin_command (comm->process, "zstd");
+ fr_process_add_arg (comm->process, "-f");
+ fr_process_add_arg (comm->process, "-d");
+ fr_process_add_arg (comm->process, temp_file);
+ fr_process_end_command (comm->process);
+ }
+
/* copy uncompress file to the dest dir */
uncompr_file = remove_extension_from_path (temp_file);
@@ -515,6 +531,7 @@ const char *cfile_mime_type[] = { "application/x-gzip",
"application/x-lzop",
"application/x-rzip",
"application/x-xz",
+ "application/zstd",
NULL };
@@ -571,6 +588,10 @@ fr_command_cfile_get_capabilities (FrCommand *comm,
if (is_program_available ("rzip", check_command))
capabilities |= FR_COMMAND_CAN_READ_WRITE;
}
+ else if (is_mime_type (mime_type, "application/zstd")) {
+ if (is_program_available ("zstd", check_command))
+ capabilities |= FR_COMMAND_CAN_READ_WRITE;
+ }
return capabilities;
}
@@ -610,6 +631,8 @@ fr_command_cfile_get_packages (FrCommand *comm,
return PACKAGES ("lzop");
else if (is_mime_type (mime_type, "application/x-rzip"))
return PACKAGES ("rzip");
+ else if (is_mime_type (mime_type, "application/zstd"))
+ return PACKAGES ("zstd");
return NULL;
}