summaryrefslogtreecommitdiff
path: root/src/file-manager/fm-vfs-directory.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/file-manager/fm-vfs-directory.c')
-rw-r--r--src/file-manager/fm-vfs-directory.c71
1 files changed, 64 insertions, 7 deletions
diff --git a/src/file-manager/fm-vfs-directory.c b/src/file-manager/fm-vfs-directory.c
index 1dc003a48..8cfe3812b 100644
--- a/src/file-manager/fm-vfs-directory.c
+++ b/src/file-manager/fm-vfs-directory.c
@@ -2,7 +2,7 @@
fm-vfs-directory.c: GNOME file manager directory model, VFS implementation.
- Copyright (C) 1999 Eazel, Inc.
+ Copyright (C) 1999, 2000 Eazel, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -30,28 +30,44 @@
#include "fm-directory-protected.h"
#include <libnautilus/nautilus-gtk-macros.h>
+#include <libgnomevfs/gnome-vfs.h>
struct _FMVFSDirectoryDetails {
- GList *files;
+ GnomeVFSURI *uri;
- /* GnomeVFSAsyncHandle *async_handle; */
+ FMFileList *files;
};
static void fm_vfs_directory_destroy (GtkObject *object);
static void fm_vfs_directory_finalize (GtkObject *object);
+static void fm_vfs_directory_get_files (FMDirectory *directory,
+ FMFileListCallback callback,
+ gpointer callback_data);
static GtkObjectClass *parent_class;
+#define METAFILE_NAME ".gnomad.xml"
+
+/* The process of reading a directory:
+
+ 1) Read and parse the metafile.
+ 2) Read the directory to notice changes.
+*/
+
static void
fm_vfs_directory_initialize_class (gpointer klass)
{
GtkObjectClass *object_class;
+ FMDirectoryClass *abstract_directory_class;
object_class = GTK_OBJECT_CLASS (klass);
+ abstract_directory_class = FM_DIRECTORY_CLASS (klass);
parent_class = gtk_type_class (FM_TYPE_DIRECTORY);
object_class->destroy = fm_vfs_directory_destroy;
object_class->finalize = fm_vfs_directory_finalize;
+
+ abstract_directory_class->get_files = fm_vfs_directory_get_files;
}
static void
@@ -59,7 +75,7 @@ fm_vfs_directory_initialize (gpointer object, gpointer klass)
{
FMVFSDirectory *directory;
- directory = FM_VFS_DIRECTORY(object);
+ directory = FM_VFS_DIRECTORY (object);
directory->details = g_new0 (FMVFSDirectoryDetails, 1);
}
@@ -67,7 +83,7 @@ fm_vfs_directory_initialize (gpointer object, gpointer klass)
static void
fm_vfs_directory_destroy (GtkObject *object)
{
- NAUTILUS_CALL_PARENT_CLASS(GTK_OBJECT_CLASS, destroy, (object));
+ NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
static void
@@ -78,19 +94,60 @@ fm_vfs_directory_finalize (GtkObject *object)
directory = FM_VFS_DIRECTORY (object);
g_free (directory->details);
- NAUTILUS_CALL_PARENT_CLASS(GTK_OBJECT_CLASS, finalize, (object));
+ NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, finalize, (object));
}
NAUTILUS_DEFINE_GET_TYPE_FUNCTION(FMVFSDirectory, fm_vfs_directory, FM_TYPE_DIRECTORY)
+static void
+fm_vfs_opened_metafile (GnomeVFSAsyncHandle *handle,
+ GnomeVFSResult result,
+ gpointer callback_data)
+{
+}
+
FMVFSDirectory *
fm_vfs_directory_new (const char* uri)
{
FMVFSDirectory *directory;
+ GnomeVFSURI *vfs_uri;
+ GnomeVFSURI *metafile_uri;
+ GnomeVFSAsyncHandle *metafile_handle;
+ GnomeVFSResult result;
+
+ vfs_uri = gnome_vfs_uri_new (uri);
+ if (vfs_uri == NULL)
+ return NULL;
+
+ metafile_uri = gnome_vfs_uri_append_path (vfs_uri, METAFILE_NAME);
+ if (metafile_uri == NULL)
+ return NULL;
directory = gtk_type_new (FM_TYPE_VFS_DIRECTORY);
- FM_DIRECTORY(directory)->details->hash_table_key = g_strdup(uri);
+ FM_DIRECTORY (directory)->details->hash_table_key = g_strdup (uri);
+
+ directory->details->uri = vfs_uri;
+
+ result = gnome_vfs_async_open_uri (&metafile_handle, metafile_uri, GNOME_VFS_OPEN_READ,
+ fm_vfs_opened_metafile, directory);
return directory;
}
+
+static void
+fm_vfs_directory_get_files (FMDirectory *abstract_directory,
+ FMFileListCallback callback,
+ gpointer callback_data)
+{
+ FMVFSDirectory *directory;
+
+ g_return_if_fail (FM_IS_VFS_DIRECTORY (abstract_directory));
+ g_return_if_fail (callback != NULL);
+
+ directory = FM_VFS_DIRECTORY (abstract_directory);
+ if (directory->details->files != NULL)
+ (* callback) (abstract_directory,
+ directory->details->files,
+ callback_data);
+}