File engrampa-1.26.1-add-7zip-support.patch of Package engrampa

--- 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=
--- a/src/fr-command-7z.c
+++ b/src/fr-command-7z.c
@@ -208,7 +208,15 @@ list__process_line (char     *line,
 static void
 fr_command_7z_begin_command (FrCommand *comm)
 {
-	if (is_program_in_path ("7z"))
+	// Modern 7-Zip by the original author.
+	// Statically linked from a binary distribution, almost guaranteed to work.
+	if (is_program_in_path ("7zzs"))
+		fr_process_begin_command (comm->process, "7zzs");
+	// Dynamically linked from either binary or source distribution.
+	else if (is_program_in_path ("7zz"))
+		fr_process_begin_command (comm->process, "7zz");
+	// Legacy p7zip project.
+	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");
@@ -343,8 +351,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)
@@ -478,6 +488,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);
 
@@ -618,24 +629,28 @@ fr_command_7z_get_capabilities (FrComman
 	FrCommandCap 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"))
 		{
-			if (! check_command || g_file_test ("/usr/lib/p7zip/Codecs/Rar29.so", G_FILE_TEST_EXISTS) || g_file_test ("/usr/lib/p7zip/Codecs/Rar.so", G_FILE_TEST_EXISTS)
+			if (! check_command || available_7zip || g_file_test ("/usr/lib/p7zip/Codecs/Rar29.so", G_FILE_TEST_EXISTS) || g_file_test ("/usr/lib/p7zip/Codecs/Rar.so", G_FILE_TEST_EXISTS)
 			    || g_file_test ("/usr/libexec/p7zip/Codecs/Rar29.so", G_FILE_TEST_EXISTS) || g_file_test ("/usr/libexec/p7zip/Codecs/Rar.so", G_FILE_TEST_EXISTS))
 				capabilities |= FR_COMMAND_CAN_READ;
 		}
@@ -674,11 +689,11 @@ fr_command_7z_get_packages (FrCommand  *
 			    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");
 }
 
 
--- a/src/fr-command-tar.c
+++ b/src/fr-command-tar.c
@@ -682,7 +682,8 @@ fr_command_tar_recompress (FrCommand *co
 		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);
@@ -1087,7 +1088,7 @@ fr_command_tar_get_capabilities (FrComma
 			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++) {
@@ -1115,7 +1116,7 @@ fr_command_tar_set_mime_type (FrCommand
 	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++) {
@@ -1153,7 +1154,7 @@ fr_command_tar_get_packages (FrCommand
 	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");
 
Только в b/src: fr-command-tar.c.orig
openSUSE Build Service is sponsored by