Verify that the download location is writable
This commit is contained in:
parent
3bb34f9f9b
commit
bba6cb76ad
1 changed files with 30 additions and 10 deletions
|
@ -971,22 +971,42 @@ midori_browser_prepare_download (MidoriBrowser* browser,
|
||||||
G_FILE_ATTRIBUTE_FILESYSTEM_FREE, NULL, &error);
|
G_FILE_ATTRIBUTE_FILESYSTEM_FREE, NULL, &error);
|
||||||
guint64 free_space = g_file_info_get_attribute_uint64 (info,
|
guint64 free_space = g_file_info_get_attribute_uint64 (info,
|
||||||
G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
|
G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
|
||||||
|
gchar* path = g_file_get_path (folder);
|
||||||
|
gboolean can_write = g_access (path, W_OK) == 0;
|
||||||
|
g_free (path);
|
||||||
g_object_unref (file);
|
g_object_unref (file);
|
||||||
g_object_unref (folder);
|
g_object_unref (folder);
|
||||||
if (free_space < total_size)
|
if (free_space < total_size || !can_write)
|
||||||
{
|
{
|
||||||
gchar* message = g_strdup_printf (
|
gchar* message;
|
||||||
_("There is not enough free space to download \"%s\"."), &uri[7]);
|
gchar* detailed_message;
|
||||||
gchar* total_size_string = g_format_size_for_display (total_size);
|
|
||||||
gchar* free_space_string = g_format_size_for_display (free_space);
|
if (!can_write)
|
||||||
gchar* detailed_message = g_strdup_printf (
|
{
|
||||||
_("The file needs %s but only %s are left."),
|
message = g_strdup_printf (
|
||||||
total_size_string, free_space_string);
|
_("The file \"%s\" can't be saved in this folder."), &uri[7]);
|
||||||
|
detailed_message = g_strdup_printf (
|
||||||
|
_("You don't have permission to write in this location."));
|
||||||
|
}
|
||||||
|
else if (free_space < total_size)
|
||||||
|
{
|
||||||
|
gchar* total_size_string = g_format_size_for_display (total_size);
|
||||||
|
gchar* free_space_string = g_format_size_for_display (free_space);
|
||||||
|
message = g_strdup_printf (
|
||||||
|
_("There is not enough free space to download \"%s\"."),
|
||||||
|
&uri[7]);
|
||||||
|
detailed_message = g_strdup_printf (
|
||||||
|
_("The file needs %s but only %s are left."),
|
||||||
|
total_size_string, free_space_string);
|
||||||
|
g_free (total_size_string);
|
||||||
|
g_free (free_space_string);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
g_assert_not_reached ();
|
||||||
|
|
||||||
sokoke_message_dialog (GTK_MESSAGE_ERROR, message, detailed_message);
|
sokoke_message_dialog (GTK_MESSAGE_ERROR, message, detailed_message);
|
||||||
g_free (message);
|
g_free (message);
|
||||||
g_free (detailed_message);
|
g_free (detailed_message);
|
||||||
g_free (total_size_string);
|
|
||||||
g_free (free_space_string);
|
|
||||||
g_object_unref (download);
|
g_object_unref (download);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue