Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/backend/ev-attachment.c
diff options
context:
space:
mode:
Diffstat (limited to 'backend/ev-attachment.c')
-rw-r--r--backend/ev-attachment.c409
1 files changed, 0 insertions, 409 deletions
diff --git a/backend/ev-attachment.c b/backend/ev-attachment.c
deleted file mode 100644
index 7e7ca12..0000000
--- a/backend/ev-attachment.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/* this file is part of evince, a gnome document viewer
- *
- * Copyright (C) 2006 Carlos Garcia Campos <carlosgc@gnome.org>
- *
- * Evince is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Evince is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-#include <libgnomevfs/gnome-vfs.h>
-#include <libgnomevfs/gnome-vfs-mime-handlers.h>
-#include <libgnomevfs/gnome-vfs-mime-utils.h>
-#include "ev-file-helpers.h"
-#include "ev-attachment.h"
-
-enum
-{
- PROP_0,
- PROP_NAME,
- PROP_DESCRIPTION,
- PROP_MTIME,
- PROP_CTIME,
- PROP_SIZE,
- PROP_DATA
-};
-
-struct _EvAttachmentPrivate {
- gchar *name;
- gchar *description;
- GTime mtime;
- GTime ctime;
- gsize size;
- gchar *data;
- gchar *mime_type;
-
- GnomeVFSMimeApplication *app;
- gchar *tmp_uri;
-};
-
-#define EV_ATTACHMENT_GET_PRIVATE(object) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_ATTACHMENT, EvAttachmentPrivate))
-
-G_DEFINE_TYPE (EvAttachment, ev_attachment, G_TYPE_OBJECT)
-
-GQuark
-ev_attachment_error_quark (void)
-{
- static GQuark error_quark = 0;
-
- if (error_quark == 0)
- error_quark =
- g_quark_from_static_string ("ev-attachment-error-quark");
-
- return error_quark;
-}
-
-static void
-ev_attachment_finalize (GObject *object)
-{
- EvAttachment *attachment = EV_ATTACHMENT (object);
-
- if (attachment->priv->name) {
- g_free (attachment->priv->name);
- attachment->priv->name = NULL;
- }
-
- if (attachment->priv->description) {
- g_free (attachment->priv->description);
- attachment->priv->description = NULL;
- }
-
- if (attachment->priv->data) {
- g_free (attachment->priv->data);
- attachment->priv->data = NULL;
- }
-
- if (attachment->priv->mime_type) {
- g_free (attachment->priv->mime_type);
- attachment->priv->mime_type = NULL;
- }
-
- if (attachment->priv->app) {
- gnome_vfs_mime_application_free (attachment->priv->app);
- attachment->priv->app = NULL;
- }
-
- if (attachment->priv->tmp_uri) {
- g_unlink (attachment->priv->tmp_uri);
- g_free (attachment->priv->tmp_uri);
- attachment->priv->tmp_uri = NULL;
- }
-
- (* G_OBJECT_CLASS (ev_attachment_parent_class)->finalize) (object);
-}
-
-static void
-ev_attachment_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *param_spec)
-{
- EvAttachment *attachment = EV_ATTACHMENT (object);
-
- switch (prop_id) {
- case PROP_NAME:
- attachment->priv->name = g_value_dup_string (value);
- break;
- case PROP_DESCRIPTION:
- attachment->priv->description = g_value_dup_string (value);
- break;
- case PROP_MTIME:
- attachment->priv->mtime = g_value_get_ulong (value);
- break;
- case PROP_CTIME:
- attachment->priv->ctime = g_value_get_ulong (value);
- break;
- case PROP_SIZE:
- attachment->priv->size = g_value_get_uint (value);
- break;
- case PROP_DATA:
- attachment->priv->data = g_value_get_pointer (value);
- attachment->priv->mime_type =
- g_strdup (gnome_vfs_get_mime_type_for_data (attachment->priv->data,
- attachment->priv->size));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
- prop_id,
- param_spec);
- break;
- }
-}
-
-static void
-ev_attachment_class_init (EvAttachmentClass *klass)
-{
- GObjectClass *g_object_class;
-
- g_object_class = G_OBJECT_CLASS (klass);
-
- g_object_class->set_property = ev_attachment_set_property;
-
- g_type_class_add_private (g_object_class, sizeof (EvAttachmentPrivate));
-
- /* Properties */
- g_object_class_install_property (g_object_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Name",
- "The attachment name",
- NULL,
- G_PARAM_WRITABLE |
- G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (g_object_class,
- PROP_DESCRIPTION,
- g_param_spec_string ("description",
- "Description",
- "The attachment description",
- NULL,
- G_PARAM_WRITABLE |
- G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (g_object_class,
- PROP_MTIME,
- g_param_spec_ulong ("mtime",
- "ModifiedTime",
- "The attachment modification date",
- 0, G_MAXULONG, 0,
- G_PARAM_WRITABLE |
- G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (g_object_class,
- PROP_CTIME,
- g_param_spec_ulong ("ctime",
- "CreationTime",
- "The attachment creation date",
- 0, G_MAXULONG, 0,
- G_PARAM_WRITABLE |
- G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (g_object_class,
- PROP_SIZE,
- g_param_spec_uint ("size",
- "Size",
- "The attachment size",
- 0, G_MAXUINT, 0,
- G_PARAM_WRITABLE |
- G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (g_object_class,
- PROP_DATA,
- g_param_spec_pointer ("data",
- "Data",
- "The attachment data",
- G_PARAM_WRITABLE |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class->finalize = ev_attachment_finalize;
-}
-
-static void
-ev_attachment_init (EvAttachment *attachment)
-{
- attachment->priv = EV_ATTACHMENT_GET_PRIVATE (attachment);
-
- attachment->priv->name = NULL;
- attachment->priv->description = NULL;
- attachment->priv->data = NULL;
- attachment->priv->mime_type = NULL;
-
- attachment->priv->tmp_uri = NULL;
-}
-
-EvAttachment *
-ev_attachment_new (const gchar *name,
- const gchar *description,
- GTime mtime,
- GTime ctime,
- gsize size,
- gpointer data)
-{
- EvAttachment *attachment;
-
- attachment = g_object_new (EV_TYPE_ATTACHMENT,
- "name", name,
- "description", description,
- "mtime", mtime,
- "ctime", ctime,
- "size", size,
- "data", data,
- NULL);
-
- return attachment;
-}
-
-const gchar *
-ev_attachment_get_name (EvAttachment *attachment)
-{
- g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), NULL);
-
- return attachment->priv->name;
-}
-
-const gchar *
-ev_attachment_get_description (EvAttachment *attachment)
-{
- g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), NULL);
-
- return attachment->priv->description;
-}
-
-GTime
-ev_attachment_get_modification_date (EvAttachment *attachment)
-{
- g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), 0);
-
- return attachment->priv->mtime;
-}
-
-GTime
-ev_attachment_get_creation_date (EvAttachment *attachment)
-{
- g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), 0);
-
- return attachment->priv->ctime;
-}
-
-const gchar *
-ev_attachment_get_mime_type (EvAttachment *attachment)
-{
- g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), NULL);
-
- return attachment->priv->mime_type;
-}
-
-gboolean
-ev_attachment_save (EvAttachment *attachment,
- const gchar *uri,
- GError **error)
-{
- GnomeVFSHandle *handle = NULL;
- GnomeVFSFileSize written;
- GnomeVFSResult result;
-
- g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), FALSE);
- g_return_val_if_fail (uri != NULL, FALSE);
-
- result = gnome_vfs_create (&handle, uri,
- GNOME_VFS_OPEN_WRITE,
- FALSE, 0644);
- if (result != GNOME_VFS_OK) {
- g_set_error (error,
- EV_ATTACHMENT_ERROR,
- (gint) result,
- _("Couldn't save attachment “%s”: %s"),
- uri,
- gnome_vfs_result_to_string (result));
-
- return FALSE;
- }
-
- result = gnome_vfs_write (handle, attachment->priv->data,
- attachment->priv->size, &written);
- if (result != GNOME_VFS_OK || written < attachment->priv->size){
- g_set_error (error,
- EV_ATTACHMENT_ERROR,
- (gint) result,
- _("Couldn't save attachment “%s”: %s"),
- uri,
- gnome_vfs_result_to_string (result));
-
- gnome_vfs_close (handle);
-
- return FALSE;
- }
-
- gnome_vfs_close (handle);
-
- return TRUE;
-}
-
-static gboolean
-ev_attachment_launch_app (EvAttachment *attachment,
- GError **error)
-{
- GnomeVFSResult result;
- GList *uris = NULL;
-
- g_assert (attachment->priv->tmp_uri != NULL);
- g_assert (attachment->priv->app != NULL);
-
- uris = g_list_prepend (uris, attachment->priv->tmp_uri);
- result = gnome_vfs_mime_application_launch (attachment->priv->app,
- uris);
-
- if (result != GNOME_VFS_OK) {
- g_set_error (error,
- EV_ATTACHMENT_ERROR,
- (gint) result,
- _("Couldn't open attachment “%s”: %s"),
- attachment->priv->name,
- gnome_vfs_result_to_string (result));
-
- g_list_free (uris);
-
- return FALSE;
- }
-
- g_list_free (uris);
-
- return TRUE;
-}
-
-gboolean
-ev_attachment_open (EvAttachment *attachment,
- GError **error)
-{
-
- gboolean retval = FALSE;
- GnomeVFSMimeApplication *default_app = NULL;
-
- g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), FALSE);
-
- if (!attachment->priv->app) {
- default_app = gnome_vfs_mime_get_default_application (attachment->priv->mime_type);
- attachment->priv->app = default_app;
- }
-
- if (!attachment->priv->app) {
- g_set_error (error,
- EV_ATTACHMENT_ERROR,
- 0,
- _("Couldn't open attachment “%s”"),
- attachment->priv->name);
-
- return FALSE;
- }
-
- if (attachment->priv->tmp_uri &&
- g_file_test (attachment->priv->tmp_uri, G_FILE_TEST_EXISTS)) {
- retval = ev_attachment_launch_app (attachment, error);
- } else {
- gchar *uri, *filename;
-
- filename = g_build_filename (ev_tmp_dir (), attachment->priv->name, NULL);
- uri = g_filename_to_uri (filename, NULL, NULL);
-
- if (ev_attachment_save (attachment, uri, error)) {
- if (attachment->priv->tmp_uri)
- g_free (attachment->priv->tmp_uri);
- attachment->priv->tmp_uri = g_strdup (filename);
-
- retval = ev_attachment_launch_app (attachment, error);
- }
-
- g_free (filename);
- g_free (uri);
- }
-
- return retval;
-}