summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kellner <gicmo@gnome.org>2008-03-06 22:49:25 +0000
committerChristian Kellner <gicmo@src.gnome.org>2008-03-06 22:49:25 +0000
commit335d14021f13afd47e5b2294804d9453fe890845 (patch)
tree2b4ffccc309989b952f4dde379a789b2dec64e67
parente5677fc2195ae5096ec82dfec3a2d03168925182 (diff)
downloadgvfs-335d14021f13afd47e5b2294804d9453fe890845.tar.gz
Correctly set the content types and the icon correclty. (#518679) Also
2008-03-06 Christian Kellner <gicmo@gnome.org> * daemon/gvfsbackenddav.c: Correctly set the content types and the icon correclty. (#518679) Also don't add the If-None-Matcher header for now since early apache versions don't like it. We need to be smart about that later. svn path=/trunk/; revision=1588
-rw-r--r--ChangeLog8
-rw-r--r--daemon/gvfsbackenddav.c64
-rw-r--r--daemon/gvfsbackendhttp.h24
3 files changed, 73 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog
index 6d7c022c..82ee4a9e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-03-06 Christian Kellner <gicmo@gnome.org>
+
+ * daemon/gvfsbackenddav.c:
+ Correctly set the content types and the icon correclty. (#518679)
+ Also don't add the If-None-Matcher header for now since
+ early apache versions don't like it. We need to be smart about
+ that later.
+
2008-03-06 Alexander Larsson <alexl@redhat.com>
* common/gsysutils.c:
diff --git a/daemon/gvfsbackenddav.c b/daemon/gvfsbackenddav.c
index 050e3315..f0c3ca28 100644
--- a/daemon/gvfsbackenddav.c
+++ b/daemon/gvfsbackenddav.c
@@ -87,8 +87,6 @@ struct _MountAuthData {
};
-
-
struct _GVfsBackendDav
{
GVfsBackendHttp parent_instance;
@@ -118,7 +116,7 @@ g_vfs_backend_dav_init (GVfsBackendDav *backend)
}
/* ************************************************************************* */
-/* */
+/* Small utility functions */
static inline gboolean
sm_has_header (SoupMessage *msg, const char *header)
@@ -579,6 +577,16 @@ parse_resourcetype (xmlNodePtr rt)
return type;
}
+static inline void
+file_info_set_content_type (GFileInfo *info, const char *type)
+{
+ g_file_info_set_content_type (info, type);
+ g_file_info_set_attribute_string (info,
+ G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE,
+ type);
+
+}
+
static void
ms_response_to_file_info (MsResponse *response,
GFileInfo *info)
@@ -590,11 +598,16 @@ ms_response_to_file_info (MsResponse *response,
char *basename;
const char *text;
GTimeVal tv;
+ GFileType file_type;
+ char *mime_type;
+ GIcon *icon;
basename = ms_response_get_basename (response);
g_file_info_set_name (info, basename);
g_file_info_set_edit_name (info, basename);
- g_free (basename);
+
+ file_type = G_FILE_TYPE_UNKNOWN;
+ mime_type = NULL;
ms_response_get_propstat_iter (response, &iter);
while (xml_node_iter_next (&iter))
@@ -613,8 +626,8 @@ ms_response_to_file_info (MsResponse *response,
if (node_has_name (node, "resourcetype"))
{
- GFileType type = parse_resourcetype (node);
- g_file_info_set_file_type (info, type);
+ file_type = parse_resourcetype (node);
+ g_file_info_set_file_type (info, file_type);
}
else if (node_has_name (node, "displayname"))
{
@@ -636,7 +649,7 @@ ms_response_to_file_info (MsResponse *response,
}
else if (node_has_name (node, "getcontenttype"))
{
- g_file_info_set_content_type (info, text);
+ mime_type = g_strdup (text);
}
else if (node_has_name (node, "getcontentlength"))
{
@@ -651,6 +664,30 @@ ms_response_to_file_info (MsResponse *response,
}
}
}
+
+ if (file_type == G_FILE_TYPE_DIRECTORY)
+ {
+ icon = g_themed_icon_new ("folder");
+ file_info_set_content_type (info, "inode/directory");
+ }
+ else
+ {
+ if (mime_type == NULL)
+ mime_type = g_content_type_guess (basename, NULL, 0, NULL);
+
+ icon = g_content_type_get_icon (mime_type);
+
+ if (G_IS_THEMED_ICON (icon))
+ g_themed_icon_append_name (G_THEMED_ICON (icon), "text-x-generic");
+
+ file_info_set_content_type (info, mime_type);
+ }
+
+ g_file_info_set_icon (info, icon);
+ g_object_unref (icon);
+ g_free (mime_type);
+ g_free (basename);
+
}
static GFileType
@@ -907,7 +944,7 @@ stat_location (GVfsBackend *backend,
/* ************************************************************************* */
-/* */
+/* Authentication */
static void
mount_auth_info_free (MountAuthData *data)
@@ -1100,6 +1137,9 @@ keyring_save_authinfo (AuthInfo *info,
info->pw_save);
}
+/* ************************************************************************* */
+/* Authentication */
+
static inline GMountSpec *
g_mount_spec_dup_known (GMountSpec *spec)
{
@@ -1468,7 +1508,10 @@ try_create_tested_existence (SoupSession *session, SoupMessage *msg,
uri = soup_message_get_uri (msg);
put_msg = soup_message_new_from_uri (SOUP_METHOD_PUT, uri);
- soup_message_headers_append (put_msg->request_headers, "If-None-Match", "*");
+ /*
+ * Doesn't work with apache > 2.2.9
+ * soup_message_headers_append (put_msg->request_headers, "If-None-Match", "*");
+ */
stream = soup_output_stream_new (op_backend->session, put_msg, -1);
g_object_unref (put_msg);
@@ -1725,7 +1768,6 @@ do_delete (GVfsBackend *backend,
GVfsJobDelete *job,
const char *filename)
{
- SoupSession *session;
SoupMessage *msg;
SoupURI *uri;
GFileType file_type;
@@ -1735,7 +1777,6 @@ do_delete (GVfsBackend *backend,
GError *error;
error = NULL;
- session = G_VFS_BACKEND_HTTP (backend)->session;
uri = http_backend_uri_for_filename (backend, filename, FALSE);
res = stat_location (backend, uri, &file_type, &num_children, &error);
@@ -1771,6 +1812,7 @@ do_delete (GVfsBackend *backend,
g_object_unref (msg);
}
+
/* ************************************************************************* */
/* */
diff --git a/daemon/gvfsbackendhttp.h b/daemon/gvfsbackendhttp.h
index c75e1eed..3af7a1a4 100644
--- a/daemon/gvfsbackendhttp.h
+++ b/daemon/gvfsbackendhttp.h
@@ -54,24 +54,24 @@ struct _GVfsBackendHttp
SoupSession *session_async;
};
-GType g_vfs_backend_http_get_type (void) G_GNUC_CONST;
+GType g_vfs_backend_http_get_type (void) G_GNUC_CONST;
-SoupURI * http_backend_uri_for_filename (GVfsBackend *backend,
- const char *filename,
- gboolean is_dir);
+SoupURI * http_backend_uri_for_filename (GVfsBackend *backend,
+ const char *filename,
+ gboolean is_dir);
-char * http_uri_get_basename (const char *uri_str);
+char * http_uri_get_basename (const char *uri_str);
-guint http_error_code_from_status (guint status);
+guint http_error_code_from_status (guint status);
-guint http_backend_send_message (GVfsBackend *backend,
- SoupMessage *msg);
+guint http_backend_send_message (GVfsBackend *backend,
+ SoupMessage *msg);
-void http_backend_queue_message (GVfsBackend *backend,
- SoupMessage *msg,
- SoupSessionCallback callback,
- gpointer user_data);
+void http_backend_queue_message (GVfsBackend *backend,
+ SoupMessage *msg,
+ SoupSessionCallback callback,
+ gpointer user_data);
G_END_DECLS