gvfs r1276 - in trunk: . client daemon
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: gvfs r1276 - in trunk: . client daemon
- Date: Fri, 15 Feb 2008 14:29:11 +0000 (GMT)
Author: alexl
Date: Fri Feb 15 14:29:11 2008
New Revision: 1276
URL: http://svn.gnome.org/viewvc/gvfs?rev=1276&view=rev
Log:
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.
Modified:
trunk/ChangeLog
trunk/client/gdaemonfile.c
trunk/daemon/gvfsbackend.c
trunk/daemon/gvfsbackend.h
trunk/daemon/gvfsjobenumerate.c
trunk/daemon/gvfsjobenumerate.h
trunk/daemon/gvfsjobqueryinfo.c
trunk/daemon/gvfsjobqueryinfo.h
Modified: trunk/client/gdaemonfile.c
==============================================================================
--- trunk/client/gdaemonfile.c (original)
+++ trunk/client/gdaemonfile.c Fri Feb 15 14:29:11 2008
@@ -681,10 +681,14 @@
char *obj_path;
GDaemonFileEnumerator *enumerator;
DBusConnection *connection;
+ char *uri;
enumerator = g_daemon_file_enumerator_new ();
obj_path = g_daemon_file_enumerator_get_object_path (enumerator);
-
+
+
+ uri = g_file_get_uri (file);
+
if (attributes == NULL)
attributes = "";
flags_dbus = flags;
@@ -695,8 +699,9 @@
DBUS_TYPE_STRING, &obj_path,
DBUS_TYPE_STRING, &attributes,
DBUS_TYPE_UINT32, &flags_dbus,
+ DBUS_TYPE_STRING, &uri,
0);
-
+ g_free (uri);
g_free (obj_path);
if (reply == NULL)
@@ -718,7 +723,7 @@
static GFileInfo *
g_daemon_file_query_info (GFile *file,
const char *attributes,
- GFileQueryInfoFlags flags,
+ GFileQueryInfoFlags flags,
GCancellable *cancellable,
GError **error)
{
@@ -726,6 +731,9 @@
dbus_uint32_t flags_dbus;
DBusMessageIter iter;
GFileInfo *info;
+ char *uri;
+
+ uri = g_file_get_uri (file);
if (attributes == NULL)
attributes = "";
@@ -736,7 +744,11 @@
cancellable, error,
DBUS_TYPE_STRING, &attributes,
DBUS_TYPE_UINT32, &flags,
+ uri != NULL ? DBUS_TYPE_STRING : 0, &uri,
0);
+
+ g_free (uri);
+
if (reply == NULL)
return NULL;
Modified: trunk/daemon/gvfsbackend.c
==============================================================================
--- trunk/daemon/gvfsbackend.c (original)
+++ trunk/daemon/gvfsbackend.c Fri Feb 15 14:29:11 2008
@@ -363,7 +363,71 @@
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,
Modified: trunk/daemon/gvfsbackend.h
==============================================================================
--- trunk/daemon/gvfsbackend.h (original)
+++ trunk/daemon/gvfsbackend.h Fri Feb 15 14:29:11 2008
@@ -399,6 +399,12 @@
const char *g_vfs_backend_get_icon_name (GVfsBackend *backend);
GMountSpec *g_vfs_backend_get_mount_spec (GVfsBackend *backend);
GVfsDaemon *g_vfs_backend_get_daemon (GVfsBackend *backend);
+
+void g_vfs_backend_add_auto_info (GVfsBackend *backend,
+ GFileAttributeMatcher *matcher,
+ GFileInfo *info,
+ const char *uri);
+
G_END_DECLS
#endif /* __G_VFS_BACKEND_H__ */
Modified: trunk/daemon/gvfsjobenumerate.c
==============================================================================
--- trunk/daemon/gvfsjobenumerate.c (original)
+++ trunk/daemon/gvfsjobenumerate.c Fri Feb 15 14:29:11 2008
@@ -54,6 +54,7 @@
g_free (job->attributes);
g_file_attribute_matcher_unref (job->attribute_matcher);
g_free (job->object_path);
+ g_free (job->uri);
if (G_OBJECT_CLASS (g_vfs_job_enumerate_parent_class)->finalize)
(*G_OBJECT_CLASS (g_vfs_job_enumerate_parent_class)->finalize) (object);
@@ -89,17 +90,19 @@
int path_len;
const char *obj_path;
const char *path_data;
- char *attributes;
+ char *attributes, *uri;
dbus_uint32_t flags;
+ DBusMessageIter iter;
+ dbus_message_iter_init (message, &iter);
dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- DBUS_TYPE_STRING, &obj_path,
- DBUS_TYPE_STRING, &attributes,
- DBUS_TYPE_UINT32, &flags,
- 0))
+ if (!_g_dbus_message_iter_get_args (&iter, &derror,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
+ &path_data, &path_len,
+ DBUS_TYPE_STRING, &obj_path,
+ DBUS_TYPE_STRING, &attributes,
+ DBUS_TYPE_UINT32, &flags,
+ 0))
{
reply = dbus_message_new_error (message,
derror.name,
@@ -110,6 +113,12 @@
return NULL;
}
+ /* Optional uri arg for thumbnail info */
+ if (!_g_dbus_message_iter_get_args (&iter, NULL,
+ DBUS_TYPE_STRING, &uri,
+ 0))
+ uri = NULL;
+
job = g_object_new (G_VFS_TYPE_JOB_ENUMERATE,
"message", message,
"connection", connection,
@@ -121,6 +130,7 @@
job->attributes = g_strdup (attributes);
job->attribute_matcher = g_file_attribute_matcher_new (attributes);
job->flags = flags;
+ job->uri = g_strdup (uri);
return G_VFS_JOB (job);
}
@@ -143,6 +153,7 @@
GFileInfo *info)
{
DBusMessage *message, *orig_message;
+ char *uri, *escaped_name;
if (job->building_infos == NULL)
{
@@ -166,7 +177,27 @@
job->n_building_infos = 0;
}
+
+
+ uri = NULL;
+ if (job->uri != NULL &&
+ g_file_info_get_name (info) != NULL)
+ {
+ escaped_name = g_uri_escape_string (g_file_info_get_name (info),
+ G_URI_RESERVED_CHARS_ALLOWED_IN_PATH,
+ FALSE);
+ uri = g_build_filename (job->uri, escaped_name);
+ g_free (escaped_name);
+ }
+
+ g_vfs_backend_add_auto_info (job->backend,
+ job->attribute_matcher,
+ info,
+ uri);
+ g_free (uri);
+
g_file_info_set_attribute_mask (info, job->attribute_matcher);
+
_g_dbus_append_file_info (&job->building_array_iter, info);
job->n_building_infos++;
Modified: trunk/daemon/gvfsjobenumerate.h
==============================================================================
--- trunk/daemon/gvfsjobenumerate.h (original)
+++ trunk/daemon/gvfsjobenumerate.h Fri Feb 15 14:29:11 2008
@@ -49,6 +49,7 @@
char *attributes;
GFileAttributeMatcher *attribute_matcher;
GFileQueryInfoFlags flags;
+ char *uri;
DBusMessage *building_infos;
DBusMessageIter building_iter;
Modified: trunk/daemon/gvfsjobqueryinfo.c
==============================================================================
--- trunk/daemon/gvfsjobqueryinfo.c (original)
+++ trunk/daemon/gvfsjobqueryinfo.c Fri Feb 15 14:29:11 2008
@@ -55,6 +55,7 @@
g_free (job->filename);
g_free (job->attributes);
g_file_attribute_matcher_unref (job->attribute_matcher);
+ g_free (job->uri);
if (G_OBJECT_CLASS (g_vfs_job_query_info_parent_class)->finalize)
(*G_OBJECT_CLASS (g_vfs_job_query_info_parent_class)->finalize) (object);
@@ -89,15 +90,19 @@
int path_len;
const char *path_data;
char *attributes;
+ char *uri;
dbus_uint32_t flags;
+ DBusMessageIter iter;
+
+ dbus_message_iter_init (message, &iter);
dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &path_data, &path_len,
- DBUS_TYPE_STRING, &attributes,
- DBUS_TYPE_UINT32, &flags,
- 0))
+ if (!_g_dbus_message_iter_get_args (&iter, &derror,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
+ &path_data, &path_len,
+ DBUS_TYPE_STRING, &attributes,
+ DBUS_TYPE_UINT32, &flags,
+ 0))
{
reply = dbus_message_new_error (message,
derror.name,
@@ -108,6 +113,12 @@
return NULL;
}
+ /* Optional uri arg for thumbnail info */
+ if (!_g_dbus_message_iter_get_args (&iter, NULL,
+ DBUS_TYPE_STRING, &uri,
+ 0))
+ uri = NULL;
+
job = g_object_new (G_VFS_TYPE_JOB_QUERY_INFO,
"message", message,
"connection", connection,
@@ -118,6 +129,7 @@
job->attributes = g_strdup (attributes);
job->attribute_matcher = g_file_attribute_matcher_new (attributes);
job->flags = flags;
+ job->uri = g_strdup (uri);
job->file_info = g_file_info_new ();
g_file_info_set_attribute_mask (job->file_info, job->attribute_matcher);
@@ -139,11 +151,11 @@
}
class->query_info (op_job->backend,
- op_job,
- op_job->filename,
- op_job->flags,
- op_job->file_info,
- op_job->attribute_matcher);
+ op_job,
+ op_job->filename,
+ op_job->flags,
+ op_job->file_info,
+ op_job->attribute_matcher);
}
static gboolean
@@ -172,29 +184,18 @@
GVfsJobQueryInfo *op_job = G_VFS_JOB_QUERY_INFO (job);
DBusMessage *reply;
DBusMessageIter iter;
- GMountSpec *spec;
- char *id;
reply = dbus_message_new_method_return (message);
dbus_message_iter_init_append (reply, &iter);
- if (g_file_attribute_matcher_matches (op_job->attribute_matcher,
- G_FILE_ATTRIBUTE_ID_FILESYSTEM))
- {
- spec = g_vfs_backend_get_mount_spec (op_job->backend);
- if (spec)
- {
- id = g_mount_spec_to_string (spec);
- g_file_info_set_attribute_string (op_job->file_info,
- G_FILE_ATTRIBUTE_ID_FILESYSTEM,
- id);
- g_free (id);
- }
- }
+ g_vfs_backend_add_auto_info (op_job->backend,
+ op_job->attribute_matcher,
+ op_job->file_info,
+ op_job->uri);
_g_dbus_append_file_info (&iter,
- op_job->file_info);
+ op_job->file_info);
return reply;
}
Modified: trunk/daemon/gvfsjobqueryinfo.h
==============================================================================
--- trunk/daemon/gvfsjobqueryinfo.h (original)
+++ trunk/daemon/gvfsjobqueryinfo.h Fri Feb 15 14:29:11 2008
@@ -48,6 +48,7 @@
char *attributes;
GFileAttributeMatcher *attribute_matcher;
GFileQueryInfoFlags flags;
+ char *uri;
GFileInfo *file_info;
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]