|
Tomas Bzatek |
822c09e |
From 47a6cb95996df5538bab4b9b07cdd8f944c0b24b Mon Sep 17 00:00:00 2001
|
|
Tomas Bzatek |
822c09e |
From: Christian Kellner <gicmo@gnome.org>
|
|
Tomas Bzatek |
822c09e |
Date: Fri, 16 Oct 2009 10:18:17 +0000
|
|
Tomas Bzatek |
822c09e |
Subject: [HTTP] Support g_file_input_stream_query_info()
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
Fixes bug 598505. Based on a patch from Robert Ancell.
|
|
Tomas Bzatek |
822c09e |
---
|
|
Tomas Bzatek |
822c09e |
diff --git a/daemon/gvfsbackendhttp.c b/daemon/gvfsbackendhttp.c
|
|
Tomas Bzatek |
822c09e |
index 97c6ce7..23d1f97 100644
|
|
Tomas Bzatek |
822c09e |
--- a/daemon/gvfsbackendhttp.c
|
|
Tomas Bzatek |
822c09e |
+++ b/daemon/gvfsbackendhttp.c
|
|
Tomas Bzatek |
822c09e |
@@ -529,30 +529,15 @@ try_close_read (GVfsBackend *backend,
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
/* *** query_info () *** */
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
-static void
|
|
Tomas Bzatek |
822c09e |
-query_info_ready (SoupSession *session,
|
|
Tomas Bzatek |
822c09e |
- SoupMessage *msg,
|
|
Tomas Bzatek |
822c09e |
- gpointer user_data)
|
|
Tomas Bzatek |
822c09e |
+static void
|
|
Tomas Bzatek |
822c09e |
+file_info_from_message (SoupMessage *msg,
|
|
Tomas Bzatek |
822c09e |
+ GFileInfo *info,
|
|
Tomas Bzatek |
822c09e |
+ GFileAttributeMatcher *matcher)
|
|
Tomas Bzatek |
822c09e |
{
|
|
Tomas Bzatek |
822c09e |
- GFileAttributeMatcher *matcher;
|
|
Tomas Bzatek |
822c09e |
- GVfsJobQueryInfo *job;
|
|
Tomas Bzatek |
822c09e |
- const SoupURI *uri;
|
|
Tomas Bzatek |
822c09e |
- const char *text;
|
|
Tomas Bzatek |
822c09e |
- GFileInfo *info;
|
|
Tomas Bzatek |
822c09e |
- char *basename;
|
|
Tomas Bzatek |
822c09e |
- char *ed_name;
|
|
Tomas Bzatek |
822c09e |
-
|
|
Tomas Bzatek |
822c09e |
- job = G_VFS_JOB_QUERY_INFO (user_data);
|
|
Tomas Bzatek |
822c09e |
- info = job->file_info;
|
|
Tomas Bzatek |
822c09e |
- matcher = job->attribute_matcher;
|
|
Tomas Bzatek |
822c09e |
- ed_name = NULL;
|
|
Tomas Bzatek |
822c09e |
-
|
|
Tomas Bzatek |
822c09e |
- if (! SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
|
|
Tomas Bzatek |
822c09e |
- {
|
|
Tomas Bzatek |
822c09e |
- g_vfs_job_failed_from_http_status (G_VFS_JOB (job), msg->status_code,
|
|
Tomas Bzatek |
822c09e |
- msg->reason_phrase);
|
|
Tomas Bzatek |
822c09e |
- return;
|
|
Tomas Bzatek |
822c09e |
- }
|
|
Tomas Bzatek |
822c09e |
+ const SoupURI *uri;
|
|
Tomas Bzatek |
822c09e |
+ const char *text;
|
|
Tomas Bzatek |
822c09e |
+ char *basename;
|
|
Tomas Bzatek |
822c09e |
+ char *ed_name = NULL;
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
uri = soup_message_get_uri (msg);
|
|
Tomas Bzatek |
822c09e |
basename = http_uri_get_basename (uri->path);
|
|
Tomas Bzatek |
822c09e |
@@ -636,7 +621,29 @@ query_info_ready (SoupSession *session,
|
|
Tomas Bzatek |
822c09e |
G_FILE_ATTRIBUTE_ETAG_VALUE,
|
|
Tomas Bzatek |
822c09e |
text);
|
|
Tomas Bzatek |
822c09e |
}
|
|
Tomas Bzatek |
822c09e |
+}
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
+static void
|
|
Tomas Bzatek |
822c09e |
+query_info_ready (SoupSession *session,
|
|
Tomas Bzatek |
822c09e |
+ SoupMessage *msg,
|
|
Tomas Bzatek |
822c09e |
+ gpointer user_data)
|
|
Tomas Bzatek |
822c09e |
+{
|
|
Tomas Bzatek |
822c09e |
+ GFileAttributeMatcher *matcher;
|
|
Tomas Bzatek |
822c09e |
+ GVfsJobQueryInfo *job;
|
|
Tomas Bzatek |
822c09e |
+ GFileInfo *info;
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
+ job = G_VFS_JOB_QUERY_INFO (user_data);
|
|
Tomas Bzatek |
822c09e |
+ info = job->file_info;
|
|
Tomas Bzatek |
822c09e |
+ matcher = job->attribute_matcher;
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
+ if (! SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
|
|
Tomas Bzatek |
822c09e |
+ {
|
|
Tomas Bzatek |
822c09e |
+ g_vfs_job_failed_from_http_status (G_VFS_JOB (job), msg->status_code,
|
|
Tomas Bzatek |
822c09e |
+ msg->reason_phrase);
|
|
Tomas Bzatek |
822c09e |
+ return;
|
|
Tomas Bzatek |
822c09e |
+ }
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
+ file_info_from_message (msg, info, matcher);
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
g_vfs_job_succeeded (G_VFS_JOB (job));
|
|
Tomas Bzatek |
822c09e |
}
|
|
Tomas Bzatek |
822c09e |
@@ -663,6 +670,24 @@ try_query_info (GVfsBackend *backend,
|
|
Tomas Bzatek |
822c09e |
}
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
+static gboolean
|
|
Tomas Bzatek |
822c09e |
+try_query_info_on_read (GVfsBackend *backend,
|
|
Tomas Bzatek |
822c09e |
+ GVfsJobQueryInfoRead *job,
|
|
Tomas Bzatek |
822c09e |
+ GVfsBackendHandle handle,
|
|
Tomas Bzatek |
822c09e |
+ GFileInfo *info,
|
|
Tomas Bzatek |
822c09e |
+ GFileAttributeMatcher *attribute_matcher)
|
|
Tomas Bzatek |
822c09e |
+{
|
|
Tomas Bzatek |
822c09e |
+ SoupMessage *msg = soup_input_stream_get_message (G_INPUT_STREAM (handle));
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
+ file_info_from_message (msg, info, attribute_matcher);
|
|
Tomas Bzatek |
822c09e |
+ g_object_unref (msg);
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
+ g_vfs_job_succeeded (G_VFS_JOB (job));
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
+ return TRUE;
|
|
Tomas Bzatek |
822c09e |
+}
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
static void
|
|
Tomas Bzatek |
822c09e |
g_vfs_backend_http_class_init (GVfsBackendHttpClass *klass)
|
|
Tomas Bzatek |
822c09e |
{
|
|
Tomas Bzatek |
822c09e |
@@ -673,11 +698,11 @@ g_vfs_backend_http_class_init (GVfsBackendHttpClass *klass)
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
backend_class = G_VFS_BACKEND_CLASS (klass);
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
- backend_class->try_mount = try_mount;
|
|
Tomas Bzatek |
822c09e |
- backend_class->try_open_for_read = try_open_for_read;
|
|
Tomas Bzatek |
822c09e |
- backend_class->try_read = try_read;
|
|
Tomas Bzatek |
822c09e |
- backend_class->try_seek_on_read = try_seek_on_read;
|
|
Tomas Bzatek |
822c09e |
- backend_class->try_close_read = try_close_read;
|
|
Tomas Bzatek |
822c09e |
- backend_class->try_query_info = try_query_info;
|
|
Tomas Bzatek |
822c09e |
-
|
|
Tomas Bzatek |
822c09e |
+ backend_class->try_mount = try_mount;
|
|
Tomas Bzatek |
822c09e |
+ backend_class->try_open_for_read = try_open_for_read;
|
|
Tomas Bzatek |
822c09e |
+ backend_class->try_read = try_read;
|
|
Tomas Bzatek |
822c09e |
+ backend_class->try_seek_on_read = try_seek_on_read;
|
|
Tomas Bzatek |
822c09e |
+ backend_class->try_close_read = try_close_read;
|
|
Tomas Bzatek |
822c09e |
+ backend_class->try_query_info = try_query_info;
|
|
Tomas Bzatek |
822c09e |
+ backend_class->try_query_info_on_read = try_query_info_on_read;
|
|
Tomas Bzatek |
822c09e |
}
|
|
Tomas Bzatek |
822c09e |
diff --git a/daemon/soup-input-stream.c b/daemon/soup-input-stream.c
|
|
Tomas Bzatek |
822c09e |
index facce17..e1928af 100644
|
|
Tomas Bzatek |
822c09e |
--- a/daemon/soup-input-stream.c
|
|
Tomas Bzatek |
822c09e |
+++ b/daemon/soup-input-stream.c
|
|
Tomas Bzatek |
822c09e |
@@ -912,6 +912,13 @@ soup_input_stream_truncate (GSeekable *seekable,
|
|
Tomas Bzatek |
822c09e |
return FALSE;
|
|
Tomas Bzatek |
822c09e |
}
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
+SoupMessage *
|
|
Tomas Bzatek |
822c09e |
+soup_input_stream_get_message (GInputStream *stream)
|
|
Tomas Bzatek |
822c09e |
+{
|
|
Tomas Bzatek |
822c09e |
+ SoupInputStreamPrivate *priv = SOUP_INPUT_STREAM_GET_PRIVATE (stream);
|
|
Tomas Bzatek |
822c09e |
+ return priv->msg ? g_object_ref (priv->msg) : NULL;
|
|
Tomas Bzatek |
822c09e |
+}
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
GQuark
|
|
Tomas Bzatek |
822c09e |
soup_http_error_quark (void)
|
|
Tomas Bzatek |
822c09e |
{
|
|
Tomas Bzatek |
822c09e |
diff --git a/daemon/soup-input-stream.h b/daemon/soup-input-stream.h
|
|
Tomas Bzatek |
822c09e |
index dd2c540..f425291 100644
|
|
Tomas Bzatek |
822c09e |
--- a/daemon/soup-input-stream.h
|
|
Tomas Bzatek |
822c09e |
+++ b/daemon/soup-input-stream.h
|
|
Tomas Bzatek |
822c09e |
@@ -70,6 +70,8 @@ gboolean soup_input_stream_send_finish (GInputStream *stream,
|
|
Tomas Bzatek |
822c09e |
GAsyncResult *result,
|
|
Tomas Bzatek |
822c09e |
GError **error);
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
+SoupMessage *soup_input_stream_get_message (GInputStream *stream);
|
|
Tomas Bzatek |
822c09e |
+
|
|
Tomas Bzatek |
822c09e |
#define SOUP_HTTP_ERROR soup_http_error_quark()
|
|
Tomas Bzatek |
822c09e |
GQuark soup_http_error_quark (void);
|
|
Tomas Bzatek |
822c09e |
|
|
Tomas Bzatek |
822c09e |
--
|
|
Tomas Bzatek |
822c09e |
cgit v0.8.2
|