[file-roller] Add support for Zstandard compressed files (.zst)



commit 81bfff0954936c8b381498309ff674c9f6dc7443
Author: Felix Riemann <friemann gnome org>
Date:   Sat Feb 2 20:11:15 2019 +0100

    Add support for Zstandard compressed files (.zst)

 README                    |  2 +-
 data/supported-mime-types |  1 +
 src/fr-command-cfile.c    | 23 +++++++++++++++++++++++
 src/fr-init.c             |  2 ++
 4 files changed, 27 insertions(+), 1 deletion(-)
---
diff --git a/README b/README
index 7a4765a4..85915977 100644
--- a/README
+++ b/README
@@ -50,7 +50,7 @@
     * ZIP Archived Comic Book (.cbz)
     * ZOO Compressed Archive File (.zoo)
     * Single files compressed with gzip (.gz), brotli (.br), bzip (.bz), bzip2 (.bz2), compress (.Z),
-      lrzip (.lrz), lzip (.lz), lzop (.lzo), rzip(.rz), xz (.xz).
+      lrzip (.lrz), lzip (.lz), lzop (.lzo), rzip(.rz), xz (.xz), Zstandard (.zst).
 
 * Home Page
 
diff --git a/data/supported-mime-types b/data/supported-mime-types
index fff26752..4602b4d2 100644
--- a/data/supported-mime-types
+++ b/data/supported-mime-types
@@ -59,3 +59,4 @@ application/x-zip-compressed;
 application/x-zstd-compressed-tar;
 application/x-zoo;
 application/zip;
+application/zstd;
diff --git a/src/fr-command-cfile.c b/src/fr-command-cfile.c
index 590546dd..50884953 100644
--- a/src/fr-command-cfile.c
+++ b/src/fr-command-cfile.c
@@ -314,6 +314,14 @@ fr_command_cfile_add (FrCommand  *comm,
                fr_process_add_arg (comm->process, compressed_filename);
                fr_process_end_command (comm->process);
        }
+       else if (_g_mime_type_matches (archive->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, "--");
+               fr_process_add_arg (comm->process, filename);
+               fr_process_end_command (comm->process);
+               compressed_filename = g_strconcat (filename, ".zst", NULL);
+       }
        else {
                g_warning ("Unhandled mime type: '%s'", archive->mime_type);
                g_warn_if_reached ();
@@ -478,6 +486,14 @@ fr_command_cfile_extract (FrCommand  *comm,
                fr_process_add_arg (comm->process, uncompr_file);
                fr_process_end_command (comm->process);
        }
+       else if (_g_mime_type_matches (archive->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, "-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 */
 
@@ -521,6 +537,7 @@ const char *cfile_mime_type[] = { "application/x-gzip",
                                  "application/x-lzop",
                                  "application/x-rzip",
                                  "application/x-xz",
+                                 "application/zstd",
                                  NULL };
 
 
@@ -582,6 +599,10 @@ fr_command_cfile_get_capabilities (FrArchive  *archive,
                if (_g_program_is_available ("lz4", check_command))
                        capabilities |= FR_ARCHIVE_CAN_READ_WRITE;
        }
+       else if (_g_mime_type_matches (mime_type, "application/zstd")) {
+               if (_g_program_is_available ("zstd", check_command))
+                       capabilities |= FR_ARCHIVE_CAN_READ_WRITE;
+       }
        return capabilities;
 }
 
@@ -610,6 +631,8 @@ fr_command_cfile_get_packages (FrArchive  *archive,
                return PACKAGES ("rzip");
        else if (_g_mime_type_matches (mime_type, "application/x-lz4"))
                return PACKAGES ("lz4");
+       else if (_g_mime_type_matches (mime_type, "application/zstd"))
+               return PACKAGES ("zstd");
 
        return NULL;
 }
diff --git a/src/fr-init.c b/src/fr-init.c
index 9639fe90..b13680fc 100644
--- a/src/fr-init.c
+++ b/src/fr-init.c
@@ -118,6 +118,7 @@ FrMimeTypeDescription mime_type_desc[] = {
        { "application/x-zoo",                     ".zoo",      0 },
        { "application/x-zstd-compressed-tar",     ".tar.zst",  0 },
        { "application/zip",                       ".zip",      0 },
+       { "application/zstd",                      ".zst",      0 },
        { NULL, NULL, 0 }
 };
 
@@ -192,6 +193,7 @@ FrExtensionType file_ext_type[] = {
        { ".Z", "application/x-compress" },
        { ".zip", "application/zip" },
        { ".zoo", "application/x-zoo" },
+       { ".zst", "application/zstd" },
        { NULL, NULL }
 };
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]