[epiphany] ephy-pdf-handler: Use server suggested filename for download
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] ephy-pdf-handler: Use server suggested filename for download
- Date: Sun, 5 Jul 2020 02:00:45 +0000 (UTC)
commit 5f2185b6b9e29bc12a7f98ade1740646e1df5ecf
Author: Jan-Michael Brummer <jan brummer tabos org>
Date: Sat Jul 4 17:20:59 2020 +0200
ephy-pdf-handler: Use server suggested filename for download
Remove decide-destination from internal downloads as their purpose is to
change the destination on their own and not let the user/webkit decide
where to store the download. In turn PDF handler registers it's own
decide-destination handler to retrieve the correct server suggested filename.
Fixes: https://gitlab.gnome.org/GNOME/epiphany/-/issues/1235
embed/ephy-download.c | 7 ++++---
embed/ephy-pdf-handler.c | 26 +++++++++++++-------------
2 files changed, 17 insertions(+), 16 deletions(-)
---
diff --git a/embed/ephy-download.c b/embed/ephy-download.c
index 2a451bb51..926fa6555 100644
--- a/embed/ephy-download.c
+++ b/embed/ephy-download.c
@@ -886,9 +886,6 @@ ephy_download_new_internal (WebKitDownload *download)
g_signal_connect_object (download, "notify::response",
G_CALLBACK (download_response_changed_cb),
ephy_download, 0);
- g_signal_connect_object (download, "decide-destination",
- G_CALLBACK (download_decide_destination_cb),
- ephy_download, 0);
g_signal_connect_object (download, "created-destination",
G_CALLBACK (download_created_destination_cb),
ephy_download, 0);
@@ -920,6 +917,10 @@ ephy_download_new (WebKitDownload *download)
ephy_download = ephy_download_new_internal (download);
+ g_signal_connect_object (download, "decide-destination",
+ G_CALLBACK (download_decide_destination_cb),
+ ephy_download, 0);
+
if (!ephy_is_running_inside_flatpak () && g_settings_get_boolean (EPHY_SETTINGS_WEB,
EPHY_PREFS_WEB_ASK_ON_DOWNLOAD)) {
g_signal_connect (ephy_download, "filename-suggested",
G_CALLBACK (filename_suggested_cb),
diff --git a/embed/ephy-pdf-handler.c b/embed/ephy-pdf-handler.c
index 995b1934d..56ab04a1f 100644
--- a/embed/ephy-pdf-handler.c
+++ b/embed/ephy-pdf-handler.c
@@ -192,25 +192,29 @@ download_errored_cb (EphyDownload *download,
g_clear_object (&self->download);
}
-static void
-created_destination_cb (WebKitDownload *download,
- gchar *destination,
- gpointer user_data)
+static gboolean
+decide_destination_cb (WebKitDownload *wk_download,
+ const gchar *suggested_filename,
+ gpointer user_data)
{
EphyPdfRequest *request = user_data;
+ g_autofree gchar *tmp_file = NULL;
+ g_autofree gchar *file_uri = NULL;
- g_signal_handlers_disconnect_by_data (download, request);
+ tmp_file = g_strdup_printf ("%s/%s", g_get_tmp_dir (), g_path_get_basename (suggested_filename));
+ file_uri = g_filename_to_uri (tmp_file, NULL, NULL);
+ ephy_download_set_destination_uri (request->download, file_uri);
g_clear_pointer (&request->file_name, g_free);
- request->file_name = g_path_get_basename (destination);
+ request->file_name = g_path_get_basename (suggested_filename);
+
+ return TRUE;
}
static void
ephy_pdf_request_start (EphyPdfRequest *request)
{
g_autoptr (SoupURI) soup_uri = NULL;
- g_autofree gchar *tmp_file = NULL;
- g_autofree gchar *file_uri = NULL;
const char *modified_uri;
const char *original_uri;
@@ -234,17 +238,13 @@ ephy_pdf_request_start (EphyPdfRequest *request)
modified_uri = soup_uri_get_path (soup_uri);
g_assert (modified_uri);
- tmp_file = g_strdup_printf ("%s/%s", g_get_tmp_dir (), g_path_get_basename (modified_uri));
- file_uri = g_filename_to_uri (tmp_file, NULL, NULL);
-
request->download = ephy_download_new_for_uri_internal (modified_uri);
- ephy_download_set_destination_uri (request->download, file_uri);
ephy_download_disable_desktop_notification (request->download);
webkit_download_set_allow_overwrite (ephy_download_get_webkit_download (request->download), TRUE);
g_signal_connect (request->download, "completed", G_CALLBACK (download_completed_cb), request);
g_signal_connect (request->download, "error", G_CALLBACK (download_errored_cb), request);
- g_signal_connect (ephy_download_get_webkit_download (request->download), "created-destination", G_CALLBACK
(created_destination_cb), request);
+ g_signal_connect (ephy_download_get_webkit_download (request->download), "decide-destination", G_CALLBACK
(decide_destination_cb), request);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]