diff options
author | Benjamin Otte <otte@gnome.org> | 2009-12-20 23:54:47 +0100 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2009-12-20 23:54:47 +0100 |
commit | 1cafd48efea10b476df13ee468206292b01010c4 (patch) | |
tree | 538c24ddcc9fe7cfc86cd040f87cc577f191dc15 | |
parent | b34b9c6ea77470461604d67fc8ef4f45d4ec6955 (diff) | |
download | libsoup-new-io.tar.gz |
Add URI to directory stream so it can generate absolute URLsnew-io
-rw-r--r-- | libsoup/soup-directory-input-stream.c | 26 | ||||
-rw-r--r-- | libsoup/soup-directory-input-stream.h | 4 | ||||
-rw-r--r-- | libsoup/soup-request-file.c | 3 |
3 files changed, 23 insertions, 10 deletions
diff --git a/libsoup/soup-directory-input-stream.c b/libsoup/soup-directory-input-stream.c index 48fcfd06..43990f19 100644 --- a/libsoup/soup-directory-input-stream.c +++ b/libsoup/soup-directory-input-stream.c @@ -15,6 +15,7 @@ #include <string.h> #include "soup-message-body.h" +#include "soup-uri.h" #define INIT_STRING "<html><head><title>OMG!</title></head><body><table>" @@ -29,23 +30,26 @@ soup_directory_input_stream_parse_info (SoupDirectoryInputStream *stream, SoupBuffer *buffer; GString *string; const char *s; - char *escaped, *xml_string; + char *escaped, *path, *xml_string; if (!g_file_info_get_name (info)) return NULL; - string = g_string_new ("<tr>"); s = g_file_info_get_display_name (info); if (!s) { s = g_file_info_get_name (info); - /* FIXME: convert somehow */ + /* FIXME: convert somehow? */ if (!g_utf8_validate (s, -1, NULL)) - s = "Invalid filename"; + return NULL; } - escaped = g_uri_escape_string (s, NULL, FALSE); - xml_string = g_markup_escape_text (g_file_info_get_display_name (info), -1); - g_string_append_printf (string, "<td><a href=\"%s\">%s</a></td>", escaped, xml_string); + string = g_string_new ("<tr>"); + + xml_string = g_markup_escape_text (s, -1); + escaped = g_uri_escape_string (g_file_info_get_name (info), NULL, FALSE); + path = g_strconcat (stream->uri, "/", escaped, NULL); g_free (escaped); + g_string_append_printf (string, "<td><a href=\"%s\">%s</a></td>", path, xml_string); + g_free (path); g_free (xml_string); g_string_append (string, "</tr>"); @@ -142,6 +146,9 @@ soup_directory_input_stream_close (GInputStream *input, error); g_object_unref (stream->enumerator); stream->enumerator = NULL; + + g_free (stream->uri); + stream->uri = NULL; return result; } @@ -164,15 +171,18 @@ soup_directory_input_stream_init (SoupDirectoryInputStream *stream) } GInputStream * -soup_directory_input_stream_new (GFileEnumerator *enumerator) +soup_directory_input_stream_new (GFileEnumerator *enumerator, + SoupURI *uri) { GInputStream *stream; g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL); + g_return_val_if_fail (uri != NULL, NULL); stream = g_object_new (SOUP_TYPE_DIRECTORY_INPUT_STREAM, NULL); SOUP_DIRECTORY_INPUT_STREAM (stream)->enumerator = g_object_ref (enumerator); + SOUP_DIRECTORY_INPUT_STREAM (stream)->uri = soup_uri_to_string (uri, FALSE); return stream; } diff --git a/libsoup/soup-directory-input-stream.h b/libsoup/soup-directory-input-stream.h index 5d1040e1..0a7bad73 100644 --- a/libsoup/soup-directory-input-stream.h +++ b/libsoup/soup-directory-input-stream.h @@ -26,6 +26,7 @@ struct _SoupDirectoryInputStream { GInputStream parent; GFileEnumerator *enumerator; + char *uri; SoupBuffer *buffer; gboolean done; }; @@ -36,7 +37,8 @@ struct _SoupDirectoryInputStreamClass { GType soup_directory_input_stream_get_type (void); -GInputStream * soup_directory_input_stream_new (GFileEnumerator *enumerator); +GInputStream * soup_directory_input_stream_new (GFileEnumerator *enumerator, + SoupURI *uri); G_END_DECLS diff --git a/libsoup/soup-request-file.c b/libsoup/soup-request-file.c index 6bcbdaab..e50c06ec 100644 --- a/libsoup/soup-request-file.c +++ b/libsoup/soup-request-file.c @@ -182,7 +182,8 @@ soup_request_file_send (SoupRequest *request, cancellable, error); if (enumerator) { - stream = soup_directory_input_stream_new (enumerator); + stream = soup_directory_input_stream_new (enumerator, + soup_request_get_uri (request)); g_object_unref (enumerator); file->priv->mime_type = g_strdup ("text/html"); } |