diff options
author | Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com> | 2011-08-10 15:35:16 +0200 |
---|---|---|
committer | Christian Kellner <gicmo@gnome.org> | 2011-08-25 21:19:56 +0200 |
commit | 5e815c1cbb552d1433ae67f591be078403aa9f84 (patch) | |
tree | 3744d074dc6642c2869d9f3b07642a6bb5911468 | |
parent | d2d45d9bd08ca148510b4df638ea9fe9d9bcefa3 (diff) | |
download | gvfs-5e815c1cbb552d1433ae67f591be078403aa9f84.tar.gz |
afp: use FPGetFileDirParms when querying root volume info
-rw-r--r-- | daemon/gvfsbackendafp.c | 76 |
1 files changed, 32 insertions, 44 deletions
diff --git a/daemon/gvfsbackendafp.c b/daemon/gvfsbackendafp.c index 3598760a..b72cda09 100644 --- a/daemon/gvfsbackendafp.c +++ b/daemon/gvfsbackendafp.c @@ -3430,8 +3430,23 @@ get_name_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) outstanding_requests = GPOINTER_TO_UINT (G_VFS_JOB (job)->backend_data); if (--outstanding_requests == 0) g_vfs_job_succeeded (G_VFS_JOB (job)); + else + G_VFS_JOB (job)->backend_data = GUINT_TO_POINTER (outstanding_requests); +} - G_VFS_JOB (job)->backend_data = GUINT_TO_POINTER (outstanding_requests); +static void +set_root_info (GVfsBackendAfp *afp_backend, GFileInfo *info) +{ + GIcon *icon; + + g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY); + g_file_info_set_name (info, "/"); + g_file_info_set_display_name (info, + g_vfs_backend_get_display_name (G_VFS_BACKEND (afp_backend))); + g_file_info_set_content_type (info, "inode/directory"); + icon = g_vfs_backend_get_icon (G_VFS_BACKEND (afp_backend)); + if (icon != NULL) + g_file_info_set_icon (info, icon); } static void @@ -3495,34 +3510,14 @@ query_info_get_filedir_parms_cb (GObject *source_object, GAsyncResult *res, gpoi copy_file_info_into (info, job->file_info); g_object_unref (info); + + if (is_root (job->filename)) + set_root_info (afp_backend, job->file_info); if (outstanding_requests == 0) g_vfs_job_succeeded (G_VFS_JOB (job)); } -static void -query_info_get_vol_parms_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) -{ - GVfsBackendAfp *afp_backend = G_VFS_BACKEND_AFP (source_object); - GVfsJobQueryInfo *job = G_VFS_JOB_QUERY_INFO (user_data); - - GFileInfo *info; - GError *err = NULL; - - info = get_vol_parms_finish (afp_backend, res, &err); - if (!info) - { - g_vfs_job_failed_from_error (G_VFS_JOB (job), err); - g_error_free (err); - return; - } - - copy_file_info_into (info, job->file_info); - g_object_unref (info); - - g_vfs_job_succeeded (G_VFS_JOB (job)); -} - static gboolean try_query_info (GVfsBackend *backend, GVfsJobQueryInfo *job, @@ -3533,33 +3528,26 @@ try_query_info (GVfsBackend *backend, { GVfsBackendAfp *afp_backend = G_VFS_BACKEND_AFP (backend); + g_debug ("Filename: %s\n", filename); + if (is_root (filename)) { - GIcon *icon; - guint16 vol_bitmap = 0; + guint16 dir_bitmap = 0; - g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY); - g_file_info_set_name (info, "/"); - g_file_info_set_display_name (info, g_vfs_backend_get_display_name (backend)); - g_file_info_set_content_type (info, "inode/directory"); - icon = g_vfs_backend_get_icon (backend); - if (icon != NULL) - g_file_info_set_icon (info, icon); - - if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_TIME_CREATED)) - vol_bitmap |= AFP_VOLUME_BITMAP_CREATE_DATE_BIT; - - if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_TIME_MODIFIED)) - vol_bitmap |= AFP_VOLUME_BITMAP_MOD_DATE_BIT; - - - if (vol_bitmap != 0) + dir_bitmap = create_dir_bitmap (afp_backend, matcher); + dir_bitmap &= ~AFP_DIR_BITMAP_UTF8_NAME_BIT; + + if (dir_bitmap != 0) { - get_vol_parms (afp_backend, vol_bitmap, G_VFS_JOB (job)->cancellable, - query_info_get_vol_parms_cb, job); + get_filedir_parms (afp_backend, filename, 0, dir_bitmap, + G_VFS_JOB (job)->cancellable, + query_info_get_filedir_parms_cb, job); } else + { + set_root_info (afp_backend, info); g_vfs_job_succeeded (G_VFS_JOB (job)); + } } else { |