summaryrefslogtreecommitdiff
path: root/trunk/daemon/gvfsbackend.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/daemon/gvfsbackend.h')
-rw-r--r--trunk/daemon/gvfsbackend.h463
1 files changed, 463 insertions, 0 deletions
diff --git a/trunk/daemon/gvfsbackend.h b/trunk/daemon/gvfsbackend.h
new file mode 100644
index 00000000..243d978c
--- /dev/null
+++ b/trunk/daemon/gvfsbackend.h
@@ -0,0 +1,463 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 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: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_VFS_BACKEND_H__
+#define __G_VFS_BACKEND_H__
+
+#include <dbus/dbus.h>
+#include <gio/gio.h>
+#include <gvfsdaemon.h>
+#include <gvfsjob.h>
+#include <gmountspec.h>
+#include <gdbusutils.h>
+
+G_BEGIN_DECLS
+
+#define G_VFS_TYPE_BACKEND (g_vfs_backend_get_type ())
+#define G_VFS_BACKEND(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND, GVfsBackend))
+#define G_VFS_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND, GVfsBackendClass))
+#define G_VFS_IS_BACKEND(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND))
+#define G_VFS_IS_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND))
+#define G_VFS_BACKEND_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND, GVfsBackendClass))
+
+typedef struct _GVfsBackend GVfsBackend;
+typedef struct _GVfsBackendPrivate GVfsBackendPrivate;
+typedef struct _GVfsBackendClass GVfsBackendClass;
+
+typedef struct _GVfsJobMount GVfsJobMount;
+typedef struct _GVfsJobUnmount GVfsJobUnmount;
+typedef struct _GVfsJobMountMountable GVfsJobMountMountable;
+typedef struct _GVfsJobUnmountMountable GVfsJobUnmountMountable;
+typedef struct _GVfsJobOpenForRead GVfsJobOpenForRead;
+typedef struct _GVfsJobOpenIconForRead GVfsJobOpenIconForRead;
+typedef struct _GVfsJobSeekRead GVfsJobSeekRead;
+typedef struct _GVfsJobCloseRead GVfsJobCloseRead;
+typedef struct _GVfsJobRead GVfsJobRead;
+typedef struct _GVfsJobOpenForWrite GVfsJobOpenForWrite;
+typedef struct _GVfsJobWrite GVfsJobWrite;
+typedef struct _GVfsJobSeekWrite GVfsJobSeekWrite;
+typedef struct _GVfsJobCloseWrite GVfsJobCloseWrite;
+typedef struct _GVfsJobQueryInfo GVfsJobQueryInfo;
+typedef struct _GVfsJobQueryInfoRead GVfsJobQueryInfoRead;
+typedef struct _GVfsJobQueryInfoWrite GVfsJobQueryInfoWrite;
+typedef struct _GVfsJobQueryFsInfo GVfsJobQueryFsInfo;
+typedef struct _GVfsJobEnumerate GVfsJobEnumerate;
+typedef struct _GVfsJobSetDisplayName GVfsJobSetDisplayName;
+typedef struct _GVfsJobTrash GVfsJobTrash;
+typedef struct _GVfsJobDelete GVfsJobDelete;
+typedef struct _GVfsJobMakeDirectory GVfsJobMakeDirectory;
+typedef struct _GVfsJobMakeSymlink GVfsJobMakeSymlink;
+typedef struct _GVfsJobCopy GVfsJobCopy;
+typedef struct _GVfsJobMove GVfsJobMove;
+typedef struct _GVfsJobPush GVfsJobPush;
+typedef struct _GVfsJobPull GVfsJobPull;
+typedef struct _GVfsJobSetAttribute GVfsJobSetAttribute;
+typedef struct _GVfsJobQueryAttributes GVfsJobQueryAttributes;
+typedef struct _GVfsJobCreateMonitor GVfsJobCreateMonitor;
+
+typedef gpointer GVfsBackendHandle;
+
+struct _GVfsBackend
+{
+ GObject parent_instance;
+
+ GVfsBackendPrivate *priv;
+};
+
+struct _GVfsBackendClass
+{
+ GObjectClass parent_class;
+
+ /* vtable */
+
+ /* These try_ calls should be fast and non-blocking, scheduling the i/o
+ * operations async (or on a thread) or reading from cache.
+ * Returning FALSE means "Can't do this now or async", which
+ * means the non-try_ version will be scheduled in a worker
+ * thread.
+ * A NULL here means operation not supported
+ */
+
+ void (*unmount) (GVfsBackend *backend,
+ GVfsJobUnmount *job);
+ gboolean (*try_unmount) (GVfsBackend *backend,
+ GVfsJobUnmount *job);
+ void (*mount) (GVfsBackend *backend,
+ GVfsJobMount *job,
+ GMountSpec *mount_spec,
+ GMountSource *mount_source,
+ gboolean is_automount);
+ gboolean (*try_mount) (GVfsBackend *backend,
+ GVfsJobMount *job,
+ GMountSpec *mount_spec,
+ GMountSource *mount_source,
+ gboolean is_automount);
+ void (*mount_mountable) (GVfsBackend *backend,
+ GVfsJobMountMountable *job,
+ const char *filename,
+ GMountSource *mount_source);
+ gboolean (*try_mount_mountable)(GVfsBackend *backend,
+ GVfsJobMountMountable *job,
+ const char *filename,
+ GMountSource *mount_source);
+ void (*unmount_mountable) (GVfsBackend *backend,
+ GVfsJobUnmountMountable *job,
+ const char *filename,
+ GMountUnmountFlags flags);
+ gboolean (*try_unmount_mountable)(GVfsBackend *backend,
+ GVfsJobUnmountMountable *job,
+ const char *filename,
+ GMountUnmountFlags flags);
+ void (*eject_mountable) (GVfsBackend *backend,
+ GVfsJobUnmountMountable *job,
+ const char *filename,
+ GMountUnmountFlags flags);
+ gboolean (*try_eject_mountable)(GVfsBackend *backend,
+ GVfsJobUnmountMountable *job,
+ const char *filename,
+ GMountUnmountFlags flags);
+ void (*open_for_read) (GVfsBackend *backend,
+ GVfsJobOpenForRead *job,
+ const char *filename);
+ gboolean (*try_open_for_read) (GVfsBackend *backend,
+ GVfsJobOpenForRead *job,
+ const char *filename);
+ void (*open_icon_for_read) (GVfsBackend *backend,
+ GVfsJobOpenIconForRead *job,
+ const char *icon_id);
+ gboolean (*try_open_icon_for_read) (GVfsBackend *backend,
+ GVfsJobOpenIconForRead *job,
+ const char *icon_id);
+ void (*close_read) (GVfsBackend *backend,
+ GVfsJobCloseRead *job,
+ GVfsBackendHandle handle);
+ gboolean (*try_close_read) (GVfsBackend *backend,
+ GVfsJobCloseRead *job,
+ GVfsBackendHandle handle);
+ void (*read) (GVfsBackend *backend,
+ GVfsJobRead *job,
+ GVfsBackendHandle handle,
+ char *buffer,
+ gsize bytes_requested);
+ gboolean (*try_read) (GVfsBackend *backend,
+ GVfsJobRead *job,
+ GVfsBackendHandle handle,
+ char *buffer,
+ gsize bytes_requested);
+ void (*seek_on_read) (GVfsBackend *backend,
+ GVfsJobSeekRead *job,
+ GVfsBackendHandle handle,
+ goffset offset,
+ GSeekType type);
+ gboolean (*try_seek_on_read) (GVfsBackend *backend,
+ GVfsJobSeekRead *job,
+ GVfsBackendHandle handle,
+ goffset offset,
+ GSeekType type);
+ gboolean (*try_create) (GVfsBackend *backend,
+ GVfsJobOpenForWrite *job,
+ const char *filename,
+ GFileCreateFlags flags);
+ void (*create) (GVfsBackend *backend,
+ GVfsJobOpenForWrite *job,
+ const char *filename,
+ GFileCreateFlags flags);
+ gboolean (*try_append_to) (GVfsBackend *backend,
+ GVfsJobOpenForWrite *job,
+ const char *filename,
+ GFileCreateFlags flags);
+ void (*append_to) (GVfsBackend *backend,
+ GVfsJobOpenForWrite *job,
+ const char *filename,
+ GFileCreateFlags flags);
+ gboolean (*try_replace) (GVfsBackend *backend,
+ GVfsJobOpenForWrite *job,
+ const char *filename,
+ const char *etag,
+ gboolean make_backup,
+ GFileCreateFlags flags);
+ void (*replace) (GVfsBackend *backend,
+ GVfsJobOpenForWrite *job,
+ const char *filename,
+ const char *etag,
+ gboolean make_backup,
+ GFileCreateFlags flags);
+ void (*close_write) (GVfsBackend *backend,
+ GVfsJobCloseWrite *job,
+ GVfsBackendHandle handle);
+ gboolean (*try_close_write) (GVfsBackend *backend,
+ GVfsJobCloseWrite *job,
+ GVfsBackendHandle handle);
+ void (*write) (GVfsBackend *backend,
+ GVfsJobWrite *job,
+ GVfsBackendHandle handle,
+ char *buffer,
+ gsize buffer_size);
+ gboolean (*try_write) (GVfsBackend *backend,
+ GVfsJobWrite *job,
+ GVfsBackendHandle handle,
+ char *buffer,
+ gsize buffer_size);
+ void (*seek_on_write) (GVfsBackend *backend,
+ GVfsJobSeekWrite *job,
+ GVfsBackendHandle handle,
+ goffset offset,
+ GSeekType type);
+ gboolean (*try_seek_on_write) (GVfsBackend *backend,
+ GVfsJobSeekWrite *job,
+ GVfsBackendHandle handle,
+ goffset offset,
+ GSeekType type);
+ void (*query_info) (GVfsBackend *backend,
+ GVfsJobQueryInfo *job,
+ const char *filename,
+ GFileQueryInfoFlags flags,
+ GFileInfo *info,
+ GFileAttributeMatcher *attribute_matcher);
+ gboolean (*try_query_info) (GVfsBackend *backend,
+ GVfsJobQueryInfo *job,
+ const char *filename,
+ GFileQueryInfoFlags flags,
+ GFileInfo *info,
+ GFileAttributeMatcher *attribute_matcher);
+ void (*query_info_on_read)(GVfsBackend *backend,
+ GVfsJobQueryInfoRead *job,
+ GVfsBackendHandle handle,
+ GFileInfo *info,
+ GFileAttributeMatcher *attribute_matcher);
+ gboolean (*try_query_info_on_read)(GVfsBackend *backend,
+ GVfsJobQueryInfoRead *job,
+ GVfsBackendHandle handle,
+ GFileInfo *info,
+ GFileAttributeMatcher *attribute_matcher);
+ void (*query_info_on_write)(GVfsBackend *backend,
+ GVfsJobQueryInfoWrite *job,
+ GVfsBackendHandle handle,
+ GFileInfo *info,
+ GFileAttributeMatcher *attribute_matcher);
+ gboolean (*try_query_info_on_write)(GVfsBackend *backend,
+ GVfsJobQueryInfoWrite *job,
+ GVfsBackendHandle handle,
+ GFileInfo *info,
+ GFileAttributeMatcher *attribute_matcher);
+ void (*query_fs_info) (GVfsBackend *backend,
+ GVfsJobQueryFsInfo *job,
+ const char *filename,
+ GFileInfo *info,
+ GFileAttributeMatcher *attribute_matcher);
+ gboolean (*try_query_fs_info) (GVfsBackend *backend,
+ GVfsJobQueryFsInfo *job,
+ const char *filename,
+ GFileInfo *info,
+ GFileAttributeMatcher *attribute_matcher);
+ void (*enumerate) (GVfsBackend *backend,
+ GVfsJobEnumerate *job,
+ const char *filename,
+ GFileAttributeMatcher *attribute_matcher,
+ GFileQueryInfoFlags flags);
+ gboolean (*try_enumerate) (GVfsBackend *backend,
+ GVfsJobEnumerate *job,
+ const char *filename,
+ GFileAttributeMatcher *attribute_matcher,
+ GFileQueryInfoFlags flags);
+ void (*set_display_name) (GVfsBackend *backend,
+ GVfsJobSetDisplayName *job,
+ const char *filename,
+ const char *display_name);
+ gboolean (*try_set_display_name) (GVfsBackend *backend,
+ GVfsJobSetDisplayName *job,
+ const char *filename,
+ const char *display_name);
+ void (*delete) (GVfsBackend *backend,
+ GVfsJobDelete *job,
+ const char *filename);
+ gboolean (*try_delete) (GVfsBackend *backend,
+ GVfsJobDelete *job,
+ const char *filename);
+ void (*trash) (GVfsBackend *backend,
+ GVfsJobTrash *job,
+ const char *filename);
+ gboolean (*try_trash) (GVfsBackend *backend,
+ GVfsJobTrash *job,
+ const char *filename);
+ void (*make_directory) (GVfsBackend *backend,
+ GVfsJobMakeDirectory *job,
+ const char *filename);
+ gboolean (*try_make_directory)(GVfsBackend *backend,
+ GVfsJobMakeDirectory *job,
+ const char *filename);
+ void (*make_symlink) (GVfsBackend *backend,
+ GVfsJobMakeSymlink *make_symlink,
+ const char *filename,
+ const char *symlink_value);
+ gboolean (*try_make_symlink) (GVfsBackend *backend,
+ GVfsJobMakeSymlink *make_symlink,
+ const char *filename,
+ const char *symlink_value);
+ void (*copy) (GVfsBackend *backend,
+ GVfsJobCopy *job,
+ const char *source,
+ const char *destination,
+ GFileCopyFlags flags,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ gboolean (*try_copy) (GVfsBackend *backend,
+ GVfsJobCopy *job,
+ const char *source,
+ const char *destination,
+ GFileCopyFlags flags,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ void (*move) (GVfsBackend *backend,
+ GVfsJobMove *job,
+ const char *source,
+ const char *destination,
+ GFileCopyFlags flags,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ gboolean (*try_move) (GVfsBackend *backend,
+ GVfsJobMove *job,
+ const char *source,
+ const char *destination,
+ GFileCopyFlags flags,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ void (*push) (GVfsBackend *backend,
+ GVfsJobPush *job,
+ const char *destination,
+ const char *local_path,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ gboolean (*try_push) (GVfsBackend *backend,
+ GVfsJobPush *job,
+ const char *destination,
+ const char *local_path,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ void (*pull) (GVfsBackend *backend,
+ GVfsJobPull *job,
+ const char *source,
+ const char *local_path,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ gboolean (*try_pull) (GVfsBackend *backend,
+ GVfsJobPull *job,
+ const char *source,
+ const char *local_path,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ void (*set_attribute) (GVfsBackend *backend,
+ GVfsJobSetAttribute *set_attribute,
+ const char *filename,
+ const char *attribute,
+ GFileAttributeType type,
+ gpointer value_p,
+ GFileQueryInfoFlags flags);
+ gboolean (*try_set_attribute) (GVfsBackend *backend,
+ GVfsJobSetAttribute *set_attribute,
+ const char *filename,
+ const char *attribute,
+ GFileAttributeType type,
+ gpointer value_p,
+ GFileQueryInfoFlags flags);
+ void (*create_dir_monitor)(GVfsBackend *backend,
+ GVfsJobCreateMonitor *job,
+ const char *filename,
+ GFileMonitorFlags flags);
+ gboolean (*try_create_dir_monitor) (GVfsBackend *backend,
+ GVfsJobCreateMonitor *job,
+ const char *filename,
+ GFileMonitorFlags flags);
+ void (*create_file_monitor)(GVfsBackend *backend,
+ GVfsJobCreateMonitor *job,
+ const char *filename,
+ GFileMonitorFlags flags);
+ gboolean (*try_create_file_monitor) (GVfsBackend *backend,
+ GVfsJobCreateMonitor *job,
+ const char *filename,
+ GFileMonitorFlags flags);
+ void (*query_settable_attributes) (GVfsBackend *backend,
+ GVfsJobQueryAttributes *job,
+ const char *filename);
+ gboolean (*try_query_settable_attributes) (GVfsBackend *backend,
+ GVfsJobQueryAttributes *job,
+ const char *filename);
+ void (*query_writable_namespaces) (GVfsBackend *backend,
+ GVfsJobQueryAttributes *job,
+ const char *filename);
+ gboolean (*try_query_writable_namespaces) (GVfsBackend *backend,
+ GVfsJobQueryAttributes *job,
+ const char *filename);
+};
+
+GType g_vfs_backend_get_type (void) G_GNUC_CONST;
+
+void g_vfs_register_backend (GType backend_type,
+ const char *type);
+GType g_vfs_lookup_backend (const char *type);
+
+void g_vfs_backend_set_display_name (GVfsBackend *backend,
+ const char *display_name);
+void g_vfs_backend_set_stable_name (GVfsBackend *backend,
+ const char *stable_name);
+void g_vfs_backend_set_x_content_types (GVfsBackend *backend,
+ char **x_content_types);
+void g_vfs_backend_set_icon_name (GVfsBackend *backend,
+ const char *icon_name);
+void g_vfs_backend_set_icon (GVfsBackend *backend,
+ GIcon *icon);
+void g_vfs_backend_set_prefered_filename_encoding (GVfsBackend *backend,
+ const char *prefered_filename_encoding);
+void g_vfs_backend_set_user_visible (GVfsBackend *backend,
+ gboolean user_visible);
+void g_vfs_backend_set_mount_spec (GVfsBackend *backend,
+ GMountSpec *mount_spec);
+void g_vfs_backend_register_mount (GVfsBackend *backend,
+ GAsyncDBusCallback callback,
+ gpointer user_data);
+void g_vfs_backend_unregister_mount (GVfsBackend *backend,
+ GAsyncDBusCallback callback,
+ gpointer user_data);
+const char *g_vfs_backend_get_backend_type (GVfsBackend *backend);
+const char *g_vfs_backend_get_display_name (GVfsBackend *backend);
+const char *g_vfs_backend_get_stable_name (GVfsBackend *backend);
+char **g_vfs_backend_get_x_content_types (GVfsBackend *backend);
+GIcon *g_vfs_backend_get_icon (GVfsBackend *backend);
+GMountSpec *g_vfs_backend_get_mount_spec (GVfsBackend *backend);
+GVfsDaemon *g_vfs_backend_get_daemon (GVfsBackend *backend);
+
+void g_vfs_backend_add_auto_info (GVfsBackend *backend,
+ GFileAttributeMatcher *matcher,
+ GFileInfo *info,
+ const char *uri);
+
+G_END_DECLS
+
+#endif /* __G_VFS_BACKEND_H__ */