aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--embed/ephy-download.c50
-rw-r--r--embed/ephy-download.h2
-rw-r--r--lib/widgets/ephy-download-widget.c14
3 files changed, 54 insertions, 12 deletions
diff --git a/embed/ephy-download.c b/embed/ephy-download.c
index aa506ef77..81a04461f 100644
--- a/embed/ephy-download.c
+++ b/embed/ephy-download.c
@@ -140,6 +140,50 @@ ephy_download_set_property (GObject *object,
}
}
+char *
+ephy_download_get_content_type (EphyDownload *download)
+{
+ WebKitNetworkResponse *response;
+ SoupMessage *message;
+ char *content_type = NULL;
+
+ GFile *destination;
+ GFileInfo *info;
+ GError *error = NULL;
+
+ destination = g_file_new_for_uri (download->priv->destination);
+ info = g_file_query_info (destination, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ G_FILE_QUERY_INFO_NONE, NULL, &error);
+
+ if (error) {
+ LOG ("ephy_download_get_content_type: error getting file "
+ "content-type: %s", error->message);
+ g_error_free (error);
+
+ /* Fallback to Soup */
+ response = webkit_download_get_network_response (download->priv->download);
+ message = webkit_network_response_get_message (response);
+
+ if (message != NULL)
+ content_type = g_strdup (soup_message_headers_get_content_type (message->response_headers, NULL));
+
+ LOG ("ephy_download_get_content_type: Soup: %s", content_type);
+ } else {
+ content_type = g_strdup (g_file_info_get_content_type (info));
+ LOG ("ephy_download_get_content_type: GIO: %s", content_type);
+ }
+
+ if (info)
+ g_object_unref (info);
+
+ if (destination)
+ g_object_unref (destination);
+
+ LOG ("ephy_download_get_content_type: %s", content_type);
+
+ return content_type;
+}
+
static EphyDownloadActionType
decide_action_from_mime (EphyDownload *ephy_download)
{
@@ -156,7 +200,7 @@ decide_action_from_mime (EphyDownload *ephy_download)
message = webkit_network_response_get_message (response);
if (message) {
- const char *content_type = soup_message_headers_get_content_type (message->response_headers, NULL);
+ char *content_type = ephy_download_get_content_type (ephy_download);
if (content_type) {
mime_description = g_content_type_get_description (content_type);
@@ -164,7 +208,9 @@ decide_action_from_mime (EphyDownload *ephy_download)
if (helper_app)
action = EPHY_DOWNLOAD_ACTION_OPEN;
- }
+
+ g_free (content_type);
+ }
}
if (mime_description == NULL) {
diff --git a/embed/ephy-download.h b/embed/ephy-download.h
index 8c84bbe05..466da4006 100644
--- a/embed/ephy-download.h
+++ b/embed/ephy-download.h
@@ -92,7 +92,7 @@ WebKitDownload *ephy_download_get_webkit_download (EphyDownload *download);
const char *ephy_download_get_destination_uri (EphyDownload *download);
const char *ephy_download_get_source_uri (EphyDownload *download);
-
+char *ephy_download_get_content_type (EphyDownload *download);
guint32 ephy_download_get_start_time (EphyDownload *download);
diff --git a/lib/widgets/ephy-download-widget.c b/lib/widgets/ephy-download-widget.c
index 084116804..a8d3403d0 100644
--- a/lib/widgets/ephy-download-widget.c
+++ b/lib/widgets/ephy-download-widget.c
@@ -54,21 +54,17 @@ enum
};
static GdkPixbuf *
-get_icon_from_download (WebKitDownload *download)
+get_icon_from_download (EphyDownload *ephy_download)
{
- WebKitNetworkResponse *response;
- SoupMessage *message;
- const char *content_type;
-
+ char *content_type = NULL;
GIcon *gicon;
GtkIconInfo *icon_info;
- response = webkit_download_get_network_response (download);
- message = webkit_network_response_get_message (response);
- content_type = soup_message_headers_get_content_type (message->response_headers, NULL);
+ content_type = ephy_download_get_content_type (ephy_download);
if (content_type != NULL) {
gicon = g_content_type_get_icon (content_type);
+ g_free (content_type);
} else {
gicon = g_icon_new_for_string ("package-x-generic", NULL);
}
@@ -450,7 +446,7 @@ ephy_download_widget_new (EphyDownload *ephy_download)
"download", ephy_download, NULL);
download = ephy_download_get_webkit_download (ephy_download);
- pixbuf = get_icon_from_download (download);
+ pixbuf = get_icon_from_download (ephy_download);
basename = g_filename_display_basename (webkit_download_get_destination_uri (download));
dest = g_uri_unescape_string (basename, NULL);