summaryrefslogtreecommitdiff
path: root/gnome-2-24/monitor/proxy/gproxymount.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnome-2-24/monitor/proxy/gproxymount.c')
-rw-r--r--gnome-2-24/monitor/proxy/gproxymount.c560
1 files changed, 0 insertions, 560 deletions
diff --git a/gnome-2-24/monitor/proxy/gproxymount.c b/gnome-2-24/monitor/proxy/gproxymount.c
deleted file mode 100644
index 123f5c43..00000000
--- a/gnome-2-24/monitor/proxy/gproxymount.c
+++ /dev/null
@@ -1,560 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* gvfs - extensions for gio
- *
- * Copyright (C) 2006-2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: David Zeuthen <davidz@redhat.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gio.h>
-
-#include <gdbusutils.h>
-
-#include "gproxyvolumemonitor.h"
-#include "gproxymount.h"
-#include "gproxyvolume.h"
-
-/* Protects all fields of GProxyMount that can change */
-G_LOCK_DEFINE_STATIC(proxy_mount);
-
-struct _GProxyMount {
- GObject parent;
-
- GProxyVolumeMonitor *volume_monitor;
-
- char *id;
- char *name;
- char *uuid;
- char *volume_id;
- gboolean can_unmount;
- char **x_content_types;
- GFile *root;
- GIcon *icon;
-};
-
-static void g_proxy_mount_mount_iface_init (GMountIface *iface);
-
-#define _G_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) { \
- const GInterfaceInfo g_implement_interface_info = { \
- (GInterfaceInitFunc) iface_init, NULL, NULL \
- }; \
- g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
-}
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (GProxyMount, g_proxy_mount, G_TYPE_OBJECT, 0,
- _G_IMPLEMENT_INTERFACE_DYNAMIC (G_TYPE_MOUNT,
- g_proxy_mount_mount_iface_init))
-
-static void
-g_proxy_mount_finalize (GObject *object)
-{
- GProxyMount *mount;
-
- mount = G_PROXY_MOUNT (object);
-
- g_free (mount->id);
- g_free (mount->name);
- g_free (mount->uuid);
- g_free (mount->volume_id);
- g_strfreev (mount->x_content_types);
- if (mount->icon != NULL)
- g_object_unref (mount->icon);
- if (mount->root != NULL)
- g_object_unref (mount->root);
-
- if (mount->volume_monitor != NULL)
- g_object_unref (mount->volume_monitor);
-
- if (G_OBJECT_CLASS (g_proxy_mount_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_proxy_mount_parent_class)->finalize) (object);
-}
-
-static void
-g_proxy_mount_class_init (GProxyMountClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = g_proxy_mount_finalize;
-}
-
-static void
-g_proxy_mount_class_finalize (GProxyMountClass *klass)
-{
-}
-
-static void
-g_proxy_mount_init (GProxyMount *proxy_mount)
-{
-}
-
-GProxyMount *
-g_proxy_mount_new (GProxyVolumeMonitor *volume_monitor)
-{
- GProxyMount *mount;
- mount = g_object_new (G_TYPE_PROXY_MOUNT, NULL);
- mount->volume_monitor = g_object_ref (volume_monitor);
- return mount;
-}
-
-gboolean
-g_proxy_mount_has_mount_path (GProxyMount *mount, const char *mount_path)
-{
- char *path;
- gboolean result;
- result = FALSE;
- path = g_file_get_path (mount->root);
- if (path != NULL)
- {
- if (strcmp (path, mount_path) == 0)
- result = TRUE;
- g_free (path);
- }
- return result;
-}
-
-/* string id
- * string name
- * string gicon_data
- * string uuid
- * string root_uri
- * boolean can-unmount
- * string volume-id
- * array:string x-content-types
- */
-
-void
-g_proxy_mount_update (GProxyMount *mount,
- DBusMessageIter *iter)
-{
- DBusMessageIter iter_struct;
- DBusMessageIter iter_x_content_types;
- const char *id;
- const char *name;
- const char *gicon_data;
- const char *uuid;
- const char *root_uri;
- dbus_bool_t can_unmount;
- const char *volume_id;
- GPtrArray *x_content_types;
-
- dbus_message_iter_recurse (iter, &iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &id);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &name);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &gicon_data);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &uuid);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &root_uri);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &can_unmount);
- dbus_message_iter_next (&iter_struct);
- dbus_message_iter_get_basic (&iter_struct, &volume_id);
- dbus_message_iter_next (&iter_struct);
-
- x_content_types = g_ptr_array_new ();
- dbus_message_iter_recurse (&iter_struct, &iter_x_content_types);
- while (dbus_message_iter_get_arg_type (&iter_x_content_types) != DBUS_TYPE_INVALID)
- {
- const char *x_content_type;
- dbus_message_iter_get_basic (&iter_x_content_types, &x_content_type);
- dbus_message_iter_next (&iter_x_content_types);
- g_ptr_array_add (x_content_types, (gpointer) x_content_type);
- }
- g_ptr_array_add (x_content_types, NULL);
- dbus_message_iter_next (&iter_struct);
-
- if (mount->id != NULL && strcmp (mount->id, id) != 0)
- {
- g_warning ("id mismatch during update of mount");
- goto out;
- }
-
- if (strlen (name) == 0)
- name = NULL;
- if (strlen (uuid) == 0)
- uuid = NULL;
-
- /* out with the old */
- g_free (mount->id);
- g_free (mount->name);
- g_free (mount->uuid);
- g_free (mount->volume_id);
- if (mount->icon != NULL)
- g_object_unref (mount->icon);
- g_strfreev (mount->x_content_types);
- if (mount->root != NULL)
- g_object_unref (mount->root);
-
- /* in with the new */
- mount->id = g_strdup (id);
- mount->name = g_strdup (name);
- mount->icon = _g_icon_new_from_serialized_data (gicon_data);
- mount->uuid = g_strdup (uuid);
- mount->root = g_file_new_for_uri (root_uri);
- mount->can_unmount = can_unmount;
- mount->volume_id = g_strdup (volume_id);
- mount->x_content_types = g_strdupv ((char **) x_content_types->pdata);
-
- out:
- g_ptr_array_free (x_content_types, TRUE);
-}
-
-const char *
-g_proxy_mount_get_id (GProxyMount *mount)
-{
- return mount->id;
-}
-
-static GFile *
-g_proxy_mount_get_root (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- GFile *root;
-
- G_LOCK (proxy_mount);
- root = proxy_mount->root != NULL ? g_object_ref (proxy_mount->root) : NULL;
- G_UNLOCK (proxy_mount);
- return root;
-}
-
-static GIcon *
-g_proxy_mount_get_icon (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- GIcon *icon;
-
- G_LOCK (proxy_mount);
- icon = proxy_mount->icon != NULL ? g_object_ref (proxy_mount->icon) : NULL;
- G_UNLOCK (proxy_mount);
- return icon;
-}
-
-static char *
-g_proxy_mount_get_uuid (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- char *uuid;
-
- G_LOCK (proxy_mount);
- uuid = g_strdup (proxy_mount->uuid);
- G_UNLOCK (proxy_mount);
- return uuid;
-}
-
-static char *
-g_proxy_mount_get_name (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- char *name;
-
- G_LOCK (proxy_mount);
- name = g_strdup (proxy_mount->name);
- G_UNLOCK (proxy_mount);
-
- return name;
-}
-
-static GDrive *
-g_proxy_mount_get_drive (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- GProxyVolume *volume;
- GDrive *drive;
-
- G_LOCK (proxy_mount);
- volume = NULL;
- if (proxy_mount->volume_id != NULL && strlen (proxy_mount->volume_id) > 0)
- volume = g_proxy_volume_monitor_get_volume_for_id (proxy_mount->volume_monitor,
- proxy_mount->volume_id);
- G_UNLOCK (proxy_mount);
-
- drive = NULL;
- if (volume != NULL)
- {
- drive = g_volume_get_drive (G_VOLUME (volume));
- g_object_unref (volume);
- }
-
- return drive;
-}
-
-static GVolume *
-g_proxy_mount_get_volume (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- GProxyVolume *volume;
-
- G_LOCK (proxy_mount);
- volume = NULL;
- if (proxy_mount->volume_id != NULL && strlen (proxy_mount->volume_id) > 0)
- volume = g_proxy_volume_monitor_get_volume_for_id (proxy_mount->volume_monitor,
- proxy_mount->volume_id);
- G_UNLOCK (proxy_mount);
-
- return volume != NULL ? G_VOLUME (volume) : NULL;
-}
-
-static gboolean
-g_proxy_mount_can_unmount (GMount *mount)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- gboolean res;
-
- G_LOCK (proxy_mount);
- res = proxy_mount->can_unmount;
- G_UNLOCK (proxy_mount);
-
- return res;
-}
-
-static gboolean
-g_proxy_mount_can_eject (GMount *mount)
-{
- GDrive *drive;
- gboolean can_eject;
-
- can_eject = FALSE;
- drive = g_proxy_mount_get_drive (mount);
- if (drive != NULL)
- {
- can_eject = g_drive_can_eject (drive);
- g_object_unref (drive);
- }
-
- return can_eject;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} EjectWrapperOp;
-
-static void
-eject_wrapper_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- EjectWrapperOp *data = user_data;
- data->callback (data->object, res, data->user_data);
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_proxy_mount_eject (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDrive *drive;
-
- drive = g_proxy_mount_get_drive (mount);
-
- if (drive != NULL)
- {
- EjectWrapperOp *data;
- data = g_new0 (EjectWrapperOp, 1);
- data->object = g_object_ref (mount);
- data->callback = callback;
- data->user_data = user_data;
- g_drive_eject (drive, flags, cancellable, eject_wrapper_callback, data);
- g_object_unref (drive);
- }
-}
-
-static gboolean
-g_proxy_mount_eject_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- GDrive *drive;
- gboolean res;
-
- res = TRUE;
-
- drive = g_proxy_mount_get_drive (mount);
-
- if (drive != NULL)
- {
- res = g_drive_eject_finish (drive, result, error);
- g_object_unref (drive);
- }
- return res;
-}
-
-typedef struct {
- GObject *object;
- GAsyncReadyCallback callback;
- gpointer user_data;
- GCancellable *cancellable;
-} DBusOp;
-
-static void
-unmount_cb (DBusMessage *reply,
- GError *error,
- DBusOp *data)
-{
- GSimpleAsyncResult *simple;
- if (error != NULL)
- simple = g_simple_async_result_new_from_error (data->object,
- data->callback,
- data->user_data,
- error);
- else
- simple = g_simple_async_result_new (data->object,
- data->callback,
- data->user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- g_object_unref (data->object);
- g_free (data);
-}
-
-static void
-g_proxy_mount_unmount (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- DBusConnection *connection;
- const char *name;
- DBusMessage *message;
- DBusOp *data;
- dbus_uint32_t _flags = flags;
-
- G_LOCK (proxy_mount);
-
- data = g_new0 (DBusOp, 1);
- data->object = g_object_ref (mount);
- data->callback = callback;
- data->user_data = user_data;
- data->cancellable = cancellable;
-
- connection = g_proxy_volume_monitor_get_dbus_connection (proxy_mount->volume_monitor);
- name = g_proxy_volume_monitor_get_dbus_name (proxy_mount->volume_monitor);
-
- message = dbus_message_new_method_call (name,
- "/",
- "org.gtk.Private.RemoteVolumeMonitor",
- "MountUnmount");
- dbus_message_append_args (message,
- DBUS_TYPE_STRING,
- &(proxy_mount->id),
- DBUS_TYPE_UINT32,
- &_flags,
- DBUS_TYPE_INVALID);
- G_UNLOCK (proxy_mount);
-
- _g_dbus_connection_call_async (connection,
- message,
- -1,
- (GAsyncDBusCallback) unmount_cb,
- data);
-
- dbus_message_unref (message);
- dbus_connection_unref (connection);
-}
-
-static gboolean
-g_proxy_mount_unmount_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
- return FALSE;
- return TRUE;
-}
-
-static void
-g_proxy_mount_guess_content_type (GMount *mount,
- gboolean force_rescan,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *simple;
-
- /* TODO: handle force_rescan */
- simple = g_simple_async_result_new (G_OBJECT (mount),
- callback,
- user_data,
- NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-}
-
-static char **
-g_proxy_mount_guess_content_type_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- return g_strdupv (proxy_mount->x_content_types);
-}
-
-static char **
-g_proxy_mount_guess_content_type_sync (GMount *mount,
- gboolean force_rescan,
- GCancellable *cancellable,
- GError **error)
-{
- GProxyMount *proxy_mount = G_PROXY_MOUNT (mount);
- /* TODO: handle force_rescan */
- return g_strdupv (proxy_mount->x_content_types);
-}
-
-static void
-g_proxy_mount_mount_iface_init (GMountIface *iface)
-{
- iface->get_root = g_proxy_mount_get_root;
- iface->get_name = g_proxy_mount_get_name;
- iface->get_icon = g_proxy_mount_get_icon;
- iface->get_uuid = g_proxy_mount_get_uuid;
- iface->get_drive = g_proxy_mount_get_drive;
- iface->get_volume = g_proxy_mount_get_volume;
- iface->can_unmount = g_proxy_mount_can_unmount;
- iface->can_eject = g_proxy_mount_can_eject;
- iface->unmount = g_proxy_mount_unmount;
- iface->unmount_finish = g_proxy_mount_unmount_finish;
- iface->eject = g_proxy_mount_eject;
- iface->eject_finish = g_proxy_mount_eject_finish;
- iface->guess_content_type = g_proxy_mount_guess_content_type;
- iface->guess_content_type_finish = g_proxy_mount_guess_content_type_finish;
- iface->guess_content_type_sync = g_proxy_mount_guess_content_type_sync;
-}
-
-void
-g_proxy_mount_register (GIOModule *module)
-{
- g_proxy_mount_register_type (G_TYPE_MODULE (module));
-}