Author: stephan
Date: 2007-03-02 12:09:19 +0000 (Fri, 02 Mar 2007)
New Revision: 25050
Modified:
squeeze/trunk/libsqueeze/archive-support-gnu-tar.c
Log:
Fixed extract and remove support for Gnu Tar
Modified: squeeze/trunk/libsqueeze/archive-support-gnu-tar.c
===================================================================
--- squeeze/trunk/libsqueeze/archive-support-gnu-tar.c 2007-03-01 21:32:00 UTC
(rev 25049)
+++ squeeze/trunk/libsqueeze/archive-support-gnu-tar.c 2007-03-02 12:09:19 UTC
(rev 25050)
@@ -359,13 +359,116 @@
static gint
lsq_archive_support_gnu_tar_extract(LSQArchive *archive, const gchar
*extract_path, GSList *filenames)
{
- return 1;
+ if(!LSQ_IS_ARCHIVE_SUPPORT_GNU_TAR(archive->support))
+ {
+ g_critical("Support is not GNU TAR");
+ return -1;
+ }
+
+ if(!lsq_archive_support_mime_supported(archive->support,
thunar_vfs_mime_info_get_name(archive->mime_info)))
+ {
+ return 1;
+ }
+ else
+ {
+ LSQArchiveCommand *archive_command = NULL;
+ gchar *options = NULL;
+ gchar *files = lsq_concat_filenames(filenames);
+ gchar *command_skeleton = g_strconcat(GNU_TAR_APP_NAME, " %3$s
-x -f %1$s %2$s", NULL);
+
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-tarz"))
+ options = "-Z";
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-compressed-tar"))
+ options = "-z";
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-bzip-compressed-tar"))
+ options = "-j";
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-tzo"))
+ options = "--use-compress-program=lzop";
+
+ archive_command = lsq_archive_command_new("", archive,
command_skeleton, FALSE, TRUE);
+ g_object_set_data(G_OBJECT(archive_command), "files",
g_strdup(files));
+ g_object_set_data(G_OBJECT(archive_command), "options",
g_strdup(options));
+ g_free(command_skeleton);
+ g_free(files);
+ }
+ return 0;
}
static gint
lsq_archive_support_gnu_tar_remove(LSQArchive *archive, GSList *filenames)
{
- return 1;
+ if(!LSQ_IS_ARCHIVE_SUPPORT_GNU_TAR(archive->support))
+ {
+ g_critical("Support is not GNU TAR");
+ return -1;
+ }
+
+ if(!lsq_archive_support_mime_supported(archive->support,
thunar_vfs_mime_info_get_name(archive->mime_info)))
+ {
+ return 1;
+ }
+ else
+ {
+ LSQArchiveCommand *archive_command = NULL;
+ gchar *options = NULL;
+ gchar *tmp_file = NULL;
+ gchar *files = lsq_concat_filenames(filenames);
+ gchar *command_skeleton = NULL;
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-tarz"))
+ command_skeleton = g_strdup("uncompress -c %1$s");
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-compressed-tar"))
+ command_skeleton = g_strdup("gunzip -c %1$s");
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-bzip-compressed-tar"))
+ command_skeleton = g_strdup("bunzip2 -c %1$s");
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-tzo"))
+ command_skeleton = g_strdup("lzop -dc %1$s");
+ if(command_skeleton)
+ {
+ archive_command = lsq_archive_command_new("", archive,
command_skeleton, FALSE, TRUE);
+ lsq_archive_command_set_parse_func(archive_command, 1,
lsq_archive_support_gnu_tar_decompress_parse_output);
+ tmp_file = g_strconcat(lsq_tmp_dir,
"/squeeze-XXXXXX.tar" , NULL);
+ g_mkstemp(tmp_file);
+ g_object_set_data(G_OBJECT(archive_command),
LSQ_ARCHIVE_TEMP_FILE, tmp_file);
+ g_free(command_skeleton);
+ }
+
+ command_skeleton = g_strconcat(GNU_TAR_APP_NAME, " %3$s -f %1$s
--delete %2$s", NULL);
+ archive_command = lsq_archive_command_new("", archive,
command_skeleton, FALSE, TRUE);
+ if(tmp_file)
+ g_object_set_data(G_OBJECT(archive_command), "archive",
g_strdup(tmp_file));
+ g_object_set_data(G_OBJECT(archive_command), "files",
g_strdup(files));
+ g_object_set_data(G_OBJECT(archive_command), "options",
g_strdup(options));
+ g_free(command_skeleton);
+ command_skeleton = NULL;
+
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-tarz"))
+ command_skeleton = g_strdup("compress -c %1$s");
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-compressed-tar"))
+ command_skeleton = g_strdup("gzip -c %1$s");
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-bzip-compressed-tar"))
+ command_skeleton = g_strdup("bzip2 -c %1$s");
+
if(!g_strcasecmp(thunar_vfs_mime_info_get_name(archive->mime_info),
"application/x-tzo"))
+ command_skeleton = g_strdup("lzop -c %1$s");
+ if(command_skeleton)
+ {
+ archive_command = lsq_archive_command_new("", archive,
command_skeleton, FALSE, TRUE);
+ lsq_archive_command_set_parse_func(archive_command, 1,
lsq_archive_support_gnu_tar_compress_parse_output);
+ if(tmp_file)
+ g_object_set_data(G_OBJECT(archive_command),
"archive", g_strdup(tmp_file));
+ g_object_set_data(G_OBJECT(archive_command),
LSQ_ARCHIVE_TEMP_FILE, g_strdup(tmp_file));
+ g_free(command_skeleton);
+ }
+ g_free(files);
+ archive_command = lsq_archive_get_front_command(archive);
+ if(archive_command)
+ {
+ lsq_archive_command_run(archive_command);
+ g_object_unref(archive_command);
+ }
+ else
+ return 1;
+ }
+ return 0;
}
static gint
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits