file-roller r2296 - in trunk: . src
- From: paobac svn gnome org
- To: svn-commits-list gnome org
- Subject: file-roller r2296 - in trunk: . src
- Date: Tue, 3 Jun 2008 17:44:29 +0000 (UTC)
Author: paobac
Date: Tue Jun 3 17:44:29 2008
New Revision: 2296
URL: http://svn.gnome.org/viewvc/file-roller?rev=2296&view=rev
Log:
2008-06-03 Paolo Bacchilega <paobac svn gnome org>
* src/main.c:
* src/fr-window.c:
* src/fr-command-tar.h:
* src/fr-command-tar.c:
* src/fr-archive.c:
Added partial support for tar archives compressed with 7zip.
Modified:
trunk/ChangeLog
trunk/src/fr-archive.c
trunk/src/fr-command-tar.c
trunk/src/fr-command-tar.h
trunk/src/fr-window.c
trunk/src/main.c
Modified: trunk/src/fr-archive.c
==============================================================================
--- trunk/src/fr-archive.c (original)
+++ trunk/src/fr-archive.c Tue Jun 3 17:44:29 2008
@@ -513,8 +513,10 @@
archive->is_compressed_file = FALSE;
- requested_capabilities |= FR_COMMAND_CAP_READ;
- if (! loading) {
+ if (loading) {
+ requested_capabilities |= FR_COMMAND_CAP_READ;
+ }
+ else {
requested_capabilities |= FR_COMMAND_CAP_WRITE;
if (! archive->can_create_compressed_file)
requested_capabilities |= FR_COMMAND_CAP_ARCHIVE_MANY_FILES;
@@ -543,23 +545,20 @@
}
-static gboolean
-create_command_from_filename (FrArchive *archive,
- gboolean loading)
+static const char *
+get_mime_type_from_filename (GFile *file)
{
- char *filename;
- gboolean result = FALSE;
+ const char *mime_type = NULL;
+ char *filename;
- if (archive->local_copy == NULL)
+ if (file == NULL)
return FALSE;
- filename = g_file_get_path (archive->local_copy);
- result = create_command_from_mime_type (archive,
- get_mime_type_from_extension (get_file_extension (filename)),
- loading);
+ filename = g_file_get_path (file);
+ mime_type = get_mime_type_from_extension (get_file_extension (filename));
g_free (filename);
- return result;
+ return mime_type;
}
@@ -888,15 +887,18 @@
fr_archive_create (FrArchive *archive,
const char *uri)
{
- FrCommand *tmp_command;
-
+ FrCommand *tmp_command;
+ const char *mime_type;
+
if (uri == NULL)
return FALSE;
fr_archive_set_uri (archive, uri);
tmp_command = archive->command;
- if (! create_command_from_filename (archive, FALSE)) {
+
+ mime_type = get_mime_type_from_filename (archive->local_copy);
+ if (! create_command_from_mime_type (archive, mime_type, FALSE)) {
archive->command = tmp_command;
return FALSE;
}
@@ -958,16 +960,16 @@
const char *password)
{
FrCommand *tmp_command;
- const char *mime_type = NULL;
-
+ const char *mime_type;
+
archive->read_only = ! check_permissions (uri, W_OK);
- /* find out the archive mime type */
-
tmp_command = archive->command;
- mime_type = get_mime_type_from_content (archive->local_copy);
+
+ mime_type = get_mime_type_from_filename (archive->local_copy);
if (! create_command_from_mime_type (archive, mime_type, TRUE)) {
- if (! create_command_from_filename (archive, TRUE)) {
+ mime_type = get_mime_type_from_content (archive->local_copy);
+ if (! create_command_from_mime_type (archive, mime_type, TRUE)) {
archive->command = tmp_command;
fr_archive_action_completed (archive,
FR_ACTION_LOADING_ARCHIVE,
@@ -976,6 +978,7 @@
return;
}
}
+
if (tmp_command != NULL) {
g_signal_handlers_disconnect_by_data (tmp_command, archive);
g_object_unref (tmp_command);
Modified: trunk/src/fr-command-tar.c
==============================================================================
--- trunk/src/fr-command-tar.c (original)
+++ trunk/src/fr-command-tar.c Tue Jun 3 17:44:29 2008
@@ -191,14 +191,26 @@
{
if (is_mime_type (comm->mime_type, "application/x-compressed-tar"))
fr_process_add_arg (comm->process, "-z");
+
else if (is_mime_type (comm->mime_type, "application/x-bzip-compressed-tar"))
fr_process_add_arg (comm->process, "--use-compress-program=bzip2");
+
else if (is_mime_type (comm->mime_type, "application/x-compressed-tar"))
fr_process_add_arg (comm->process, "-Z");
+
else if (is_mime_type (comm->mime_type, "application/x-lzma-compressed-tar"))
fr_process_add_arg (comm->process, "--use-compress-program=lzma");
+
else if (is_mime_type (comm->mime_type, "application/x-lzop-compressed-tar"))
fr_process_add_arg (comm->process, "--use-compress-program=lzop");
+
+ else if (is_mime_type (comm->mime_type, "application/x-7z-compressed-tar")) {
+ FrCommandTar *comm_tar = (FrCommandTar*) comm;
+ char *option;
+ option = g_strdup_printf ("--use-compress-program=%s", comm_tar->compress_command);
+ fr_process_add_arg (comm->process, option);
+ g_free (option);
+ }
}
@@ -517,6 +529,45 @@
new_name = g_strconcat (c_tar->uncomp_filename, ".lzo", NULL);
}
+ else if (is_mime_type (comm->mime_type, "application/x-7z-compressed-tar")) {
+ FrCommandTar *comm_tar = (FrCommandTar*) comm;
+ char *e_name;
+
+ fr_process_begin_command (comm->process, comm_tar->compress_command);
+ fr_process_set_sticky (comm->process, TRUE);
+ fr_process_set_begin_func (comm->process, begin_func__recompress, comm);
+ switch (compression) {
+ case FR_COMPRESSION_VERY_FAST:
+ fr_process_add_arg (comm->process, "-mx=1"); break;
+ case FR_COMPRESSION_FAST:
+ fr_process_add_arg (comm->process, "-mx=5"); break;
+ case FR_COMPRESSION_NORMAL:
+ fr_process_add_arg (comm->process, "-mx=5"); break;
+ case FR_COMPRESSION_MAXIMUM:
+ fr_process_add_arg (comm->process, "-mx=7"); break;
+ }
+ 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");
+
+ new_name = g_strconcat (c_tar->uncomp_filename, ".7z", NULL);
+ e_name = shell_escape (new_name);
+ fr_process_add_arg (comm->process, e_name);
+ g_free (e_name);
+
+ fr_process_add_arg (comm->process, c_tar->uncomp_filename);
+ fr_process_end_command (comm->process);
+
+ /* remove the uncompressed tar */
+
+ fr_process_begin_command (comm->process, "rm");
+ fr_process_add_arg (comm->process, "-f");
+ e_name = shell_escape (c_tar->uncomp_filename);
+ fr_process_add_arg (comm->process, e_name);
+ g_free (e_name);
+ fr_process_end_command (comm->process);
+ }
if (c_tar->name_modified) {
char *tmp_dir;
@@ -609,6 +660,11 @@
else if (file_extension_is (e_filename, ".tar.lzo"))
new_name[l - 4] = 0;
}
+ else if (is_mime_type (comm->mime_type, "application/x-7z-compressed-tar")) {
+ /* X.tar.7z --> X.tar */
+ if (file_extension_is (e_filename, ".tar.7z"))
+ new_name[l - 3] = 0;
+ }
return new_name;
}
@@ -710,6 +766,24 @@
fr_process_add_arg (comm->process, tmp_name);
fr_process_end_command (comm->process);
}
+ else if (is_mime_type (comm->mime_type, "application/x-7z-compressed-tar")) {
+ FrCommandTar *comm_tar = (FrCommandTar*) comm;
+
+ fr_process_begin_command (comm->process, comm_tar->compress_command);
+ fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
+ fr_process_add_arg (comm->process, "e");
+ fr_process_add_arg (comm->process, "-bd");
+ fr_process_add_arg (comm->process, "-y");
+ fr_process_add_arg (comm->process, tmp_name);
+ fr_process_end_command (comm->process);
+
+ /* remove the compressed tar */
+
+ fr_process_begin_command (comm->process, "rm");
+ fr_process_add_arg (comm->process, "-f");
+ fr_process_add_arg (comm->process, tmp_name);
+ fr_process_end_command (comm->process);
+ }
}
c_tar->uncomp_filename = get_uncompressed_name (c_tar, tmp_name);
@@ -748,6 +822,8 @@
fr_command_tar_set_mime_type (FrCommand *comm,
const char *mime_type)
{
+ FrCommandTar *comm_tar = FR_COMMAND_TAR (comm);
+
FR_COMMAND_CLASS (parent_class)->set_mime_type (comm, mime_type);
/* In solaris gtar is present under /usr/sfw/bin */
@@ -782,6 +858,18 @@
if (is_program_in_path ("lzop"))
comm->capabilities |= FR_COMMAND_CAP_READ_WRITE;
}
+ else if (is_mime_type (comm->mime_type, "application/x-7z-compressed-tar")) {
+ char *try_command[3] = { "7za", "7zr", "7z" };
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (try_command); i++) {
+ if (is_program_in_path (try_command[i])) {
+ comm->capabilities |= FR_COMMAND_CAP_READ_WRITE;
+ comm_tar->compress_command = g_strdup (try_command[i]);
+ break;
+ }
+ }
+ }
}
@@ -851,6 +939,11 @@
g_free (comm_tar->msg);
comm_tar->msg = NULL;
}
+
+ if (comm_tar->compress_command != NULL) {
+ g_free (comm_tar->compress_command);
+ comm_tar->compress_command = NULL;
+ }
/* Chain up */
if (G_OBJECT_CLASS (parent_class)->finalize)
Modified: trunk/src/fr-command-tar.h
==============================================================================
--- trunk/src/fr-command-tar.h (original)
+++ trunk/src/fr-command-tar.h Tue Jun 3 17:44:29 2008
@@ -44,10 +44,11 @@
/*<private>*/
- char *uncomp_filename;
- gboolean name_modified;
-
- char *msg;
+ char *uncomp_filename;
+ gboolean name_modified;
+ char *compress_command;
+
+ char *msg;
};
struct _FrCommandTarClass
Modified: trunk/src/fr-window.c
==============================================================================
--- trunk/src/fr-window.c (original)
+++ trunk/src/fr-window.c Tue Jun 3 17:44:29 2008
@@ -63,7 +63,7 @@
#define CHECK_CLIPBOARD_TIMEOUT 500
#define PROGRESS_DIALOG_WIDTH 300
-#define PROGRESS_TIMEOUT_MSECS 500 /* FIXME */
+#define PROGRESS_TIMEOUT_MSECS 1000 /* FIXME */
#define PROGRESS_BAR_HEIGHT 10
#define HIDE_PROGRESS_TIMEOUT_MSECS 500 /* FIXME */
@@ -7760,7 +7760,7 @@
return FALSE;
}
- files_to_open = g_list_append (files_to_open, (char*) first_file);
+ files_to_open = g_list_append (files_to_open, g_filename_to_uri (first_file, NULL, NULL));
if (g_app_info_supports_files (app)) {
GList *scan;
@@ -7774,14 +7774,14 @@
continue;
if (strcmp (mime_type, first_mime_type) == 0) {
- files_to_open = g_list_append (files_to_open, (char*) path);
+ files_to_open = g_list_append (files_to_open, g_filename_to_uri (path, NULL, NULL));
}
else {
GAppInfo *app2;
app2 = g_app_info_get_default_for_type (mime_type, FALSE);
if (g_app_info_equal (app, app2))
- files_to_open = g_list_append (files_to_open, (char*) path);
+ files_to_open = g_list_append (files_to_open, g_filename_to_uri (path, NULL, NULL));
g_object_unref (app2);
}
}
@@ -7794,7 +7794,7 @@
}
g_object_unref (app);
- g_list_free (files_to_open);
+ path_list_free (files_to_open);
return result;
}
Modified: trunk/src/main.c
==============================================================================
--- trunk/src/main.c (original)
+++ trunk/src/main.c Tue Jun 3 17:44:29 2008
@@ -77,36 +77,37 @@
static char *default_url = NULL;
FrMimeTypeDescription mime_type_desc[] = {
- { "application/x-ace", ".ace", N_("Ace (.ace)"), FALSE, FALSE },
- { "application/x-ar", ".ar", N_("Ar (.ar)"), FALSE, TRUE },
- { "application/x-arj", ".arj", N_("Arj (.arj)"), TRUE, TRUE },
- { "application/x-bzip", ".bz2", NULL, FALSE, FALSE },
- { "application/x-bzip1", ".bz", NULL, FALSE, FALSE },
- { "application/x-compress", ".Z", NULL, FALSE, FALSE },
- { "application/x-cpio", ".cpio", NULL, FALSE, TRUE },
- { "application/x-deb", ".deb", NULL, FALSE, TRUE },
- { "application/x-cd-image", ".iso", NULL, FALSE, TRUE },
- { "application/x-ear", ".ear", N_("Ear (.ear)"), TRUE, TRUE },
- { "application/x-ms-dos-executable", ".exe", N_("Self-extracting zip (.exe)"), FALSE, TRUE },
- { "application/x-gzip", ".gz", NULL, FALSE, FALSE },
- { "application/x-jar", ".jar", N_("Jar (.jar)"), TRUE, TRUE },
- { "application/x-lha", ".lzh", N_("Lha (.lzh)"), FALSE, TRUE },
- { "application/x-lzma", ".lzma", NULL, FALSE, FALSE },
- { "application/x-lzop", ".lzo", NULL, FALSE, FALSE },
- { "application/x-rar", ".rar", N_("Rar (.rar)"), TRUE, TRUE },
- { "application/x-rpm", ".rpm", NULL, FALSE, TRUE },
- { "application/x-tar", ".tar", N_("Tar uncompressed (.tar)"), FALSE, TRUE },
+ { "application/x-ace", ".ace", N_("Ace (.ace)"), FALSE, FALSE },
+ { "application/x-ar", ".ar", N_("Ar (.ar)"), FALSE, TRUE },
+ { "application/x-arj", ".arj", N_("Arj (.arj)"), TRUE, TRUE },
+ { "application/x-bzip", ".bz2", NULL, FALSE, FALSE },
+ { "application/x-bzip1", ".bz", NULL, FALSE, FALSE },
+ { "application/x-compress", ".Z", NULL, FALSE, FALSE },
+ { "application/x-cpio", ".cpio", NULL, FALSE, TRUE },
+ { "application/x-deb", ".deb", NULL, FALSE, TRUE },
+ { "application/x-cd-image", ".iso", NULL, FALSE, TRUE },
+ { "application/x-ear", ".ear", N_("Ear (.ear)"), TRUE, TRUE },
+ { "application/x-ms-dos-executable", ".exe", N_("Self-extracting zip (.exe)"), FALSE, TRUE },
+ { "application/x-gzip", ".gz", NULL, FALSE, FALSE },
+ { "application/x-jar", ".jar", N_("Jar (.jar)"), TRUE, TRUE },
+ { "application/x-lha", ".lzh", N_("Lha (.lzh)"), FALSE, TRUE },
+ { "application/x-lzma", ".lzma", NULL, FALSE, FALSE },
+ { "application/x-lzop", ".lzo", NULL, FALSE, FALSE },
+ { "application/x-rar", ".rar", N_("Rar (.rar)"), TRUE, TRUE },
+ { "application/x-rpm", ".rpm", NULL, FALSE, TRUE },
+ { "application/x-tar", ".tar", N_("Tar uncompressed (.tar)"), FALSE, TRUE },
{ "application/x-bzip1-compressed-tar", ".tar.bz", N_("Tar compressed with bzip (.tar.bz)"), FALSE, TRUE },
- { "application/x-bzip-compressed-tar", ".tar.bz2", N_("Tar compressed with bzip2 (.tar.bz2)"), FALSE, TRUE },
- { "application/x-compressed-tar", ".tar.gz", N_("Tar compressed with gzip (.tar.gz)"), FALSE, TRUE },
- { "application/x-lzma-compressed-tar", ".tar.lzma", N_("Tar compressed with lzma (.tar.lzma)"), FALSE, TRUE },
- { "application/x-lzop-compressed-tar", ".tar.lzo", N_("Tar compressed with lzop (.tar.lzo)"), FALSE, TRUE },
- { "application/x-compressed-tar", ".tar.Z", N_("Tar compressed with compress (.tar.Z)"), FALSE, TRUE },
- { "application/x-stuffit", ".sit", NULL, FALSE, TRUE },
- { "application/x-war", ".war", N_("War (.war)"), TRUE, TRUE },
- { "application/zip", ".zip", N_("Zip (.zip)"), TRUE, TRUE },
- { "application/x-zoo", ".zoo", N_("Zoo (.zoo)"), FALSE, TRUE },
- { "application/x-7z-compressed", ".7z", N_("7-Zip (.7z)"), TRUE, TRUE },
+ { "application/x-bzip-compressed-tar", ".tar.bz2", N_("Tar compressed with bzip2 (.tar.bz2)"), FALSE, TRUE },
+ { "application/x-compressed-tar", ".tar.gz", N_("Tar compressed with gzip (.tar.gz)"), FALSE, TRUE },
+ { "application/x-lzma-compressed-tar", ".tar.lzma", N_("Tar compressed with lzma (.tar.lzma)"), FALSE, TRUE },
+ { "application/x-lzop-compressed-tar", ".tar.lzo", N_("Tar compressed with lzop (.tar.lzo)"), FALSE, TRUE },
+ { "application/x-7z-compressed-tar", ".tar.7z", N_("Tar compressed with 7z (.tar.7z)"), FALSE, TRUE },
+ { "application/x-compressed-tar", ".tar.Z", N_("Tar compressed with compress (.tar.Z)"), FALSE, TRUE },
+ { "application/x-stuffit", ".sit", NULL, FALSE, TRUE },
+ { "application/x-war", ".war", N_("War (.war)"), TRUE, TRUE },
+ { "application/zip", ".zip", N_("Zip (.zip)"), TRUE, TRUE },
+ { "application/x-zoo", ".zoo", N_("Zoo (.zoo)"), FALSE, TRUE },
+ { "application/x-7z-compressed", ".7z", N_("7-Zip (.7z)"), TRUE, TRUE },
{ NULL, NULL, NULL, FALSE, FALSE }
};
@@ -138,6 +139,7 @@
{ ".tar.gz", "application/x-compressed-tar" },
{ ".tar.lzma", "application/x-lzma-compressed-tar" },
{ ".tar.lzo", "application/x-lzop-compressed-tar" },
+ { ".tar.7z", "application/x-7z-compressed-tar" },
{ ".tar.Z", "application/x-compressed-tar" },
{ ".taz", "application/x-compressed-tar" },
{ ".tbz", "application/x-bzip-compressed-tar" },
@@ -193,7 +195,9 @@
/*{ "bzip", "application/x-bzip1-compressed-tar", FALSE, TRUE },*/
{ "lzma", "application/x-lzma-compressed-tar", TRUE, TRUE },
{ "lzop", "application/x-lzop-compressed-tar", TRUE, TRUE },
- { "compress", "application/x-compressed-tar", TRUE, TRUE }
+ { "compress", "application/x-compressed-tar", TRUE, TRUE },
+ { "7za", "application/x-7z-compressed-tar", FALSE, TRUE },
+ { "7zr", "application/x-7z-compressed-tar", FALSE, TRUE }
};
@@ -593,6 +597,7 @@
"application/x-bzip-compressed-tar", FR_COMMAND_CAP_ALL,
"application/x-lzma-compressed-tar", FR_COMMAND_CAP_ALL,
"application/x-lzop-compressed-tar", FR_COMMAND_CAP_ALL,
+ "application/x-7z-compressed-tar", FR_COMMAND_CAP_WRITE | FR_COMMAND_CAP_ARCHIVE_MANY_FILES,
NULL);
register_command (FR_TYPE_COMMAND_UNSTUFF,
"application/x-stuffit", FR_COMMAND_CAP_READ | FR_COMMAND_CAP_ARCHIVE_MANY_FILES,
@@ -700,9 +705,12 @@
idx = get_mime_type_index (comm_desc_2.mime_type);
if (idx >= 0) {
- open_type[o_i++] = idx;
- save_type[s_i++] = idx;
- single_file_save_type[sf_i++] = idx;
+ if (comm_desc_2.can_open)
+ open_type[o_i++] = idx;
+ if (comm_desc_2.can_save && mime_type_desc[idx].supports_many_files)
+ save_type[s_i++] = idx;
+ if (comm_desc_2.can_save)
+ single_file_save_type[sf_i++] = idx;
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]