Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/libdocument/ev-file-helpers.c
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2007-02-27 14:56:44 (GMT)
committer Carlos Garcia Campos <carlosgc@src.gnome.org>2007-02-27 14:56:44 (GMT)
commit67dbdd12a75b63b11f1a7ebe7324445ad17ceb13 (patch)
tree8db688d4a3e0b865e58c17623cac31ab649870ce /libdocument/ev-file-helpers.c
parent7d28296bee1a4d710d28f0d760281e24fbab14f2 (diff)
Save document compressed when saving a copy of a compressed document.
2007-02-27 Carlos Garcia Campos <carlosgc@gnome.org> * libdocument/ev-file-helpers.[ch]: (compression_run), (ev_file_uncompress), (ev_file_compress): * shell/ev-window.c: (file_save_dialog_response_cb): Save document compressed when saving a copy of a compressed document. Fixes bug #334542. svn path=/trunk/; revision=2356
Diffstat (limited to 'libdocument/ev-file-helpers.c')
-rw-r--r--libdocument/ev-file-helpers.c60
1 files changed, 38 insertions, 22 deletions
diff --git a/libdocument/ev-file-helpers.c b/libdocument/ev-file-helpers.c
index d4e9a84..d9b6448 100644
--- a/libdocument/ev-file-helpers.c
+++ b/libdocument/ev-file-helpers.c
@@ -172,22 +172,21 @@ ev_xfer_uri_simple (const char *from,
/* Compressed files support */
#define BZIPCOMMAND "bzip2"
#define GZIPCOMMAND "gzip"
-#define N_ARGS 5
+#define N_ARGS 4
#define BUFFER_SIZE 1024
-gchar *
-ev_file_uncompress (const gchar *uri,
- EvCompressionType type,
- GError **error)
+static gchar *
+compression_run (const gchar *uri,
+ EvCompressionType type,
+ gboolean compress,
+ GError **error)
{
gchar *argv[N_ARGS];
- gchar *uri_unc = NULL;
- gchar *filename, *filename_unc;
+ gchar *uri_dst = NULL;
+ gchar *filename, *filename_dst;
gchar *cmd;
gint fd, pout;
- g_return_val_if_fail (uri != NULL, NULL);
-
if (type == EV_COMPRESSION_NONE)
return NULL;
@@ -195,27 +194,25 @@ ev_file_uncompress (const gchar *uri,
if (!cmd)
return NULL;
-
filename = g_filename_from_uri (uri, NULL, NULL);
if (!filename) {
g_free (cmd);
return NULL;
}
- filename_unc = g_build_filename (ev_tmp_dir (), "evinceXXXXXX", NULL);
- fd = g_mkstemp (filename_unc);
+ filename_dst = g_build_filename (ev_tmp_dir (), "evinceXXXXXX", NULL);
+ fd = g_mkstemp (filename_dst);
if (fd < 0) {
g_free (cmd);
g_free (filename);
- g_free (filename_unc);
+ g_free (filename_dst);
return NULL;
}
-
+
argv[0] = cmd;
- argv[1] = "-cd";
+ argv[1] = compress ? "-c" : "-cd";
argv[2] = filename;
- argv[3] = filename_unc;
- argv[4] = NULL;
+ argv[3] = NULL;
if (g_spawn_async_with_pipes (NULL, argv, NULL,
G_SPAWN_STDERR_TO_DEV_NULL,
@@ -247,7 +244,7 @@ ev_file_uncompress (const gchar *uri,
break;
}
} while (bytes_read > 0);
-
+
g_io_channel_unref (in);
g_io_channel_unref (out);
}
@@ -255,13 +252,32 @@ ev_file_uncompress (const gchar *uri,
close (fd);
if (*error == NULL) {
- uri_unc = g_filename_to_uri (filename_unc,
- NULL, NULL);
+ uri_dst = g_filename_to_uri (filename_dst, NULL, NULL);
}
g_free (cmd);
g_free (filename);
- g_free (filename_unc);
+ g_free (filename_dst);
+
+ return uri_dst;
+}
+
+gchar *
+ev_file_uncompress (const gchar *uri,
+ EvCompressionType type,
+ GError **error)
+{
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ return compression_run (uri, type, FALSE, error);
+}
+
+gchar *
+ev_file_compress (const gchar *uri,
+ EvCompressionType type,
+ GError **error)
+{
+ g_return_val_if_fail (uri != NULL, NULL);
- return uri_unc;
+ return compression_run (uri, type, TRUE, error);
}