diff options
author | Alexander Larsson <alexl@redhat.com> | 2008-02-15 14:29:11 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2008-02-15 14:29:11 +0000 |
commit | 6317daa2e09d54f98668588e89bf457d98383d57 (patch) | |
tree | ef8e2bc0f5d9486823091fcc1e71e310cd07d564 /daemon/gvfsbackend.c | |
parent | 873f1148616870fc3b7080688e32cd7d0f27a3ee (diff) | |
download | gvfs-6317daa2e09d54f98668588e89bf457d98383d57.tar.gz |
Pass an optional uri to query_info and enumerate
2008-02-15 Alexander Larsson <alexl@redhat.com>
* client/gdaemonfile.c:
Pass an optional uri to query_info and enumerate
* daemon/gvfsbackend.[ch]:
Add automatic info filling, implement thumbnail
checking if uri passed in.
* daemon/gvfsjobenumerate.[ch]:
* daemon/gvfsjobqueryinfo.[ch]:
Get optional uri argument.
Call automatic backend info filling.
svn path=/trunk/; revision=1276
Diffstat (limited to 'daemon/gvfsbackend.c')
-rw-r--r-- | daemon/gvfsbackend.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/daemon/gvfsbackend.c b/daemon/gvfsbackend.c index f1f4459f..1746bd83 100644 --- a/daemon/gvfsbackend.c +++ b/daemon/gvfsbackend.c @@ -363,7 +363,71 @@ g_vfs_backend_get_mount_spec (GVfsBackend *backend) return backend->priv->mount_spec; } +static void +get_thumbnail_attributes (const char *uri, + GFileInfo *info) +{ + GChecksum *checksum; + char *filename; + char *basename; + + checksum = g_checksum_new (G_CHECKSUM_MD5); + g_checksum_update (checksum, (const guchar *) uri, strlen (uri)); + + basename = g_strconcat (g_checksum_get_string (checksum), ".png", NULL); + g_checksum_free (checksum); + + filename = g_build_filename (g_get_home_dir (), + ".thumbnails", "normal", basename, + NULL); + if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) + g_file_info_set_attribute_byte_string (info, G_FILE_ATTRIBUTE_THUMBNAIL_PATH, filename); + else + { + g_free (filename); + filename = g_build_filename (g_get_home_dir (), + ".thumbnails", "fail", + "gnome-thumbnail-factory", + basename, + NULL); + + if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) + g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_THUMBNAILING_FAILED, TRUE); + } + g_free (basename); + g_free (filename); +} + +void +g_vfs_backend_add_auto_info (GVfsBackend *backend, + GFileAttributeMatcher *matcher, + GFileInfo *info, + const char *uri) +{ + GMountSpec *spec; + char *id; + + if (g_file_attribute_matcher_matches (matcher, + G_FILE_ATTRIBUTE_ID_FILESYSTEM)) + { + spec = g_vfs_backend_get_mount_spec (backend); + if (spec) + { + id = g_mount_spec_to_string (spec); + g_file_info_set_attribute_string (info, + G_FILE_ATTRIBUTE_ID_FILESYSTEM, + id); + g_free (id); + } + } + + if (uri != NULL && + g_file_attribute_matcher_matches (matcher, + G_FILE_ATTRIBUTE_THUMBNAIL_PATH)) + get_thumbnail_attributes (uri, info); + +} static DBusHandlerResult backend_dbus_handler (DBusConnection *connection, |