New download filename generation for all downloads
This commit is contained in:
parent
b045c01d06
commit
ff95e17f6f
1 changed files with 25 additions and 61 deletions
|
@ -1407,19 +1407,28 @@ midori_browser_download_prepare_filename (gchar* filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar*
|
static gchar*
|
||||||
midori_browser_download_prepare_destination_uri (WebKitDownload* download)
|
midori_browser_download_prepare_destination_uri (WebKitDownload* download,
|
||||||
|
const gchar* folder)
|
||||||
{
|
{
|
||||||
|
const gchar* suggested_filename;
|
||||||
GFile* file_source;
|
GFile* file_source;
|
||||||
gchar* file_basename;
|
gchar* file_basename;
|
||||||
gchar* download_dir;
|
gchar* download_dir = NULL;
|
||||||
gchar* destination_uri;
|
gchar* destination_uri;
|
||||||
gchar* destination_filename;
|
gchar* destination_filename;
|
||||||
gchar* midori_tmp_dir;
|
gchar* midori_tmp_dir;
|
||||||
|
|
||||||
file_source = g_file_new_for_uri (webkit_download_get_uri (download));
|
suggested_filename = webkit_download_get_suggested_filename (download);
|
||||||
|
file_source = g_file_new_for_uri (suggested_filename);
|
||||||
file_basename = g_file_get_basename (file_source);
|
file_basename = g_file_get_basename (file_source);
|
||||||
|
if (folder == NULL)
|
||||||
|
{
|
||||||
midori_tmp_dir = g_strconcat ("midori-", g_get_user_name (), NULL);
|
midori_tmp_dir = g_strconcat ("midori-", g_get_user_name (), NULL);
|
||||||
download_dir = g_build_filename (g_get_tmp_dir (), midori_tmp_dir, NULL);
|
download_dir = g_build_filename (g_get_tmp_dir (), midori_tmp_dir, NULL);
|
||||||
|
g_free (midori_tmp_dir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
download_dir = (gchar*)folder;
|
||||||
destination_filename = g_build_filename (download_dir, file_basename, NULL);
|
destination_filename = g_build_filename (download_dir, file_basename, NULL);
|
||||||
destination_filename = midori_browser_download_prepare_filename (destination_filename);
|
destination_filename = midori_browser_download_prepare_filename (destination_filename);
|
||||||
destination_uri = g_filename_to_uri (destination_filename, NULL, NULL);
|
destination_uri = g_filename_to_uri (destination_filename, NULL, NULL);
|
||||||
|
@ -1428,9 +1437,9 @@ midori_browser_download_prepare_destination_uri (WebKitDownload* download)
|
||||||
katze_mkdir_with_parents (download_dir, 0700);
|
katze_mkdir_with_parents (download_dir, 0700);
|
||||||
|
|
||||||
g_free (file_basename);
|
g_free (file_basename);
|
||||||
|
if (folder == NULL)
|
||||||
g_free (download_dir);
|
g_free (download_dir);
|
||||||
g_free (destination_filename);
|
g_free (destination_filename);
|
||||||
g_free (midori_tmp_dir);
|
|
||||||
g_object_unref (file_source);
|
g_object_unref (file_source);
|
||||||
|
|
||||||
return destination_uri;
|
return destination_uri;
|
||||||
|
@ -1443,7 +1452,8 @@ midori_view_download_requested_cb (GtkWidget* view,
|
||||||
{
|
{
|
||||||
if (g_object_get_data (G_OBJECT (download), "open-in-viewer"))
|
if (g_object_get_data (G_OBJECT (download), "open-in-viewer"))
|
||||||
{
|
{
|
||||||
gchar* destination_uri = midori_browser_download_prepare_destination_uri (download);
|
gchar* destination_uri =
|
||||||
|
midori_browser_download_prepare_destination_uri (download, NULL);
|
||||||
midori_browser_prepare_download (browser, download, destination_uri);
|
midori_browser_prepare_download (browser, download, destination_uri);
|
||||||
g_signal_connect (download, "notify::status",
|
g_signal_connect (download, "notify::status",
|
||||||
G_CALLBACK (midori_browser_download_status_cb), (gpointer) browser);
|
G_CALLBACK (midori_browser_download_status_cb), (gpointer) browser);
|
||||||
|
@ -1452,13 +1462,13 @@ midori_view_download_requested_cb (GtkWidget* view,
|
||||||
}
|
}
|
||||||
else if (!webkit_download_get_destination_uri (download))
|
else if (!webkit_download_get_destination_uri (download))
|
||||||
{
|
{
|
||||||
gchar* folder;
|
|
||||||
if (g_object_get_data (G_OBJECT (download), "save-as-download"))
|
if (g_object_get_data (G_OBJECT (download), "save-as-download"))
|
||||||
{
|
{
|
||||||
static GtkWidget* dialog = NULL;
|
static GtkWidget* dialog = NULL;
|
||||||
|
|
||||||
if (!dialog)
|
if (!dialog)
|
||||||
{
|
{
|
||||||
|
gchar* folder;
|
||||||
dialog = sokoke_file_chooser_dialog_new (_("Save file"),
|
dialog = sokoke_file_chooser_dialog_new (_("Save file"),
|
||||||
GTK_WINDOW (browser), GTK_FILE_CHOOSER_ACTION_SAVE);
|
GTK_WINDOW (browser), GTK_FILE_CHOOSER_ACTION_SAVE);
|
||||||
gtk_file_chooser_set_do_overwrite_confirmation (
|
gtk_file_chooser_set_do_overwrite_confirmation (
|
||||||
|
@ -1479,58 +1489,12 @@ midori_view_download_requested_cb (GtkWidget* view,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const gchar* suggested;
|
gchar* folder = g_object_get_data (G_OBJECT (download), "open-download")
|
||||||
gchar* basename;
|
? NULL : katze_object_get_string (browser->settings, "download-folder");
|
||||||
gchar* filename;
|
gchar* destination_uri =
|
||||||
gchar* uri;
|
midori_browser_download_prepare_destination_uri (download, folder);
|
||||||
|
midori_browser_prepare_download (browser, download, destination_uri);
|
||||||
if (g_object_get_data (G_OBJECT (download), "open-download"))
|
g_free (destination_uri);
|
||||||
folder = g_strdup (g_get_tmp_dir ());
|
|
||||||
else
|
|
||||||
folder = katze_object_get_string (browser->settings, "download-folder");
|
|
||||||
suggested = webkit_download_get_suggested_filename (download);
|
|
||||||
/* The suggested name may contain a folder name */
|
|
||||||
basename = g_path_get_basename (suggested);
|
|
||||||
filename = g_build_filename (folder, basename, NULL);
|
|
||||||
g_free (basename);
|
|
||||||
/* If the filename exists, choose a different name */
|
|
||||||
if (g_access (filename, F_OK) == 0)
|
|
||||||
{
|
|
||||||
/* Put the number in front of the extension */
|
|
||||||
gchar* extension = strrchr (filename, '.');
|
|
||||||
gsize length = extension ? (gsize)(extension - filename) : strlen (filename);
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (g_ascii_isdigit (filename[length - 1]))
|
|
||||||
filename[length - 1] += 1; /* FIXME: This will increment '9' to ':' */
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gchar* new_filename;
|
|
||||||
if (extension)
|
|
||||||
{
|
|
||||||
/* Change the '.' to a '\0' to put the 0 in between */
|
|
||||||
*extension++ = '\0';
|
|
||||||
new_filename= g_strconcat (filename, "0.", extension, NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
new_filename = g_strconcat (filename, "0", NULL);
|
|
||||||
katze_assign (filename, new_filename);
|
|
||||||
if (extension)
|
|
||||||
{
|
|
||||||
extension = strrchr (filename, '.');
|
|
||||||
length = extension - filename;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
length = strlen (filename);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (g_access (filename, F_OK) == 0);
|
|
||||||
}
|
|
||||||
g_free (folder);
|
|
||||||
uri = g_filename_to_uri (filename, NULL, NULL);
|
|
||||||
g_free (filename);
|
|
||||||
midori_browser_prepare_download (browser, download, uri);
|
|
||||||
g_free (uri);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Loading…
Reference in a new issue