diff options
Diffstat (limited to 'src/file-manager/fm-vfs-directory.c')
-rw-r--r-- | src/file-manager/fm-vfs-directory.c | 71 |
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); +} |