summaryrefslogtreecommitdiff
path: root/daemon/gvfsbackend.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2008-02-15 14:29:11 +0000
committerAlexander Larsson <alexl@src.gnome.org>2008-02-15 14:29:11 +0000
commit6317daa2e09d54f98668588e89bf457d98383d57 (patch)
treeef8e2bc0f5d9486823091fcc1e71e310cd07d564 /daemon/gvfsbackend.c
parent873f1148616870fc3b7080688e32cd7d0f27a3ee (diff)
downloadgvfs-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.c64
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,