From 7a687cbe68bad4fc0a228ed7b35f7c08121f4412 Mon Sep 17 00:00:00 2001 From: zhuyaliang <15132211195@163.com> Date: Mon, 20 Mar 2023 23:06:44 +0800 Subject: [PATCH] command-7z: Add new 7-zip(7zz and 7zzs) project support --- data/packages.match | 6 +++--- src/fr-command-7z.c | 29 ++++++++++++++++++++--------- src/fr-command-tar.c | 9 +++++---- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/data/packages.match b/data/packages.match index 49f5d23b4..6bfafbcc8 100644 --- a/data/packages.match +++ b/data/packages.match @@ -15,9 +15,9 @@ lzma= lzop= ncompress= nomarch= -p7zip= -p7zip-full= -p7zip-rar= +7zip= +7zip-full= +7zip-rar= rar= rpm= rzip= diff --git a/src/fr-command-7z.c b/src/fr-command-7z.c index c3c66ab8b..ad236756c 100644 --- a/src/fr-command-7z.c +++ b/src/fr-command-7z.c @@ -204,7 +204,11 @@ list__process_line (char *line, static void fr_command_7z_begin_command (FrCommand *comm) { - if (is_program_in_path ("7z")) + if (is_program_in_path ("7zzs")) + fr_process_begin_command (comm->process, "7zzs"); + else if (is_program_in_path ("7zz")) + fr_process_begin_command (comm->process, "7zz"); + else if (is_program_in_path ("7z")) fr_process_begin_command (comm->process, "7z"); else if (is_program_in_path ("7za")) fr_process_begin_command (comm->process, "7za"); @@ -333,8 +337,10 @@ fr_command_7z_add (FrCommand *comm, if (spd_support) fr_process_add_arg (comm->process, "-spd"); fr_process_add_arg (comm->process, "-bd"); + fr_process_add_arg (comm->process, "-bb1"); fr_process_add_arg (comm->process, "-y"); - fr_process_add_arg (comm->process, "-l"); + if (recursive) + fr_process_add_arg (comm->process, "-l"); add_password_arg (comm, comm->password, FALSE); if ((comm->password != NULL) && (*comm->password != 0) @@ -465,6 +471,7 @@ fr_command_7z_extract (FrCommand *comm, if (spd_support) fr_process_add_arg (comm->process, "-spd"); fr_process_add_arg (comm->process, "-bd"); + fr_process_add_arg (comm->process, "-bb1"); fr_process_add_arg (comm->process, "-y"); add_password_arg (comm, comm->password, FALSE); @@ -600,20 +607,24 @@ fr_command_7z_get_capabilities (FrCommand *comm, FrCommandCaps capabilities; capabilities = FR_COMMAND_CAN_ARCHIVE_MANY_FILES; - if (! is_program_available ("7za", check_command) && ! is_program_available ("7zr", check_command) && ! is_program_available ("7z", check_command)) + gboolean available_7zip = is_program_available ("7zz", check_command) || is_program_available ("7zzs", check_command); + if (! available_7zip\ + && ! is_program_available ("7za", check_command) \ + && ! is_program_available ("7zr", check_command) \ + && ! is_program_available ("7z", check_command)) return capabilities; if (is_mime_type (mime_type, "application/x-7z-compressed")) { capabilities |= FR_COMMAND_CAN_READ_WRITE | FR_COMMAND_CAN_CREATE_VOLUMES; - if (is_program_available ("7z", check_command)) + if (is_program_available ("7z", check_command) || available_7zip) capabilities |= FR_COMMAND_CAN_ENCRYPT | FR_COMMAND_CAN_ENCRYPT_HEADER; } else if (is_mime_type (mime_type, "application/x-7z-compressed-tar")) { capabilities |= FR_COMMAND_CAN_READ_WRITE; - if (is_program_available ("7z", check_command)) + if (is_program_available ("7z", check_command) || available_7zip) capabilities |= FR_COMMAND_CAN_ENCRYPT | FR_COMMAND_CAN_ENCRYPT_HEADER; } - else if (is_program_available ("7z", check_command)) { + else if (is_program_available ("7z", check_command) || available_7zip) { if (is_mime_type (mime_type, "application/x-rar") || is_mime_type (mime_type, "application/x-cbr")) { @@ -655,11 +666,11 @@ fr_command_7z_get_packages (FrCommand *comm, const char *mime_type) { if (is_mime_type (mime_type, "application/x-rar")) - return PACKAGES ("p7zip,p7zip-rar"); + return PACKAGES ("7zip,7zip-rar"); else if (is_mime_type (mime_type, "application/zip") || is_mime_type (mime_type, "application/vnd.ms-cab-compressed")) - return PACKAGES ("p7zip,p7zip-full"); + return PACKAGES ("7zip,7zip-full"); else - return PACKAGES ("p7zip"); + return PACKAGES ("7zip"); } static void diff --git a/src/fr-command-tar.c b/src/fr-command-tar.c index e73b21424..2f93edb5e 100644 --- a/src/fr-command-tar.c +++ b/src/fr-command-tar.c @@ -664,7 +664,8 @@ fr_command_tar_recompress (FrCommand *comm) fr_process_add_arg (comm->process, "a"); fr_process_add_arg (comm->process, "-bd"); fr_process_add_arg (comm->process, "-y"); - fr_process_add_arg (comm->process, "-l"); + if (g_strcmp0 (comm_tar->compress_command, "7zzs")== 0 || g_strcmp0 (comm_tar->compress_command, "7zz")== 0) + fr_process_add_arg (comm->process, "-l"); new_name = g_strconcat (c_tar->uncomp_filename, ".7z", NULL); fr_process_add_arg_concat (comm->process, new_name, NULL); @@ -1061,7 +1062,7 @@ fr_command_tar_get_capabilities (FrCommand *comm, capabilities |= FR_COMMAND_CAN_READ_WRITE; } else if (is_mime_type (mime_type, "application/x-7z-compressed-tar")) { - const char *try_command[3] = { "7za", "7zr", "7z" }; + const char *try_command[5] = { "7zzs", "7zz", "7za", "7zr", "7z" }; size_t i; for (i = 0; i < G_N_ELEMENTS (try_command); i++) { @@ -1088,7 +1089,7 @@ fr_command_tar_set_mime_type (FrCommand *comm, FR_COMMAND_CLASS (parent_class)->set_mime_type (comm, mime_type); if (is_mime_type (mime_type, "application/x-7z-compressed-tar")) { - const char *try_command[3] = { "7za", "7zr", "7z" }; + const char *try_command[5] = { "7zzs", "7zz", "7za", "7zr", "7z" }; size_t i; for (i = 0; i < G_N_ELEMENTS (try_command); i++) { @@ -1125,7 +1126,7 @@ fr_command_tar_get_packages (FrCommand *comm, else if (is_mime_type (mime_type, "application/x-lzop-compressed-tar")) return PACKAGES ("tar,lzop"); else if (is_mime_type (mime_type, "application/x-7z-compressed-tar")) - return PACKAGES ("tar,p7zip"); + return PACKAGES ("tar,7zip"); else if (is_mime_type (mime_type, "application/x-zstd-compressed-tar")) return PACKAGES ("tar,zstd");