/* nautilus-error-reporting.h - implementation of file manager functions that report
* errors to the user.
*
* Copyright (C) 2000 Eazel, Inc.
*
* The Gnome Library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* The Gnome Library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with the Gnome Library; see the file COPYING.LIB. If not,
* see .
*
* Authors: John Sullivan
*/
#define G_LOG_DOMAIN "nautilus-error-reporting"
#include
#include "nautilus-error-reporting.h"
#include "nautilus-file.h"
#include "nautilus-ui-utilities.h"
#include
#include
#include "nautilus-file.h"
void
nautilus_report_error_loading_directory (NautilusFile *file,
GError *error,
GtkWidget *parent)
{
g_autofree char *message = NULL;
if (error == NULL ||
error->message == NULL)
{
return;
}
if (error->domain == G_IO_ERROR &&
error->code == G_IO_ERROR_NOT_MOUNTED)
{
/* This case is retried automatically */
return;
}
if (error->domain == G_IO_ERROR)
{
const char *file_name = nautilus_file_get_display_name (file);
switch (error->code)
{
case G_IO_ERROR_PERMISSION_DENIED:
{
message = g_strdup_printf (_("You do not have the permissions necessary to view the contents of “%s”."),
file_name);
}
break;
case G_IO_ERROR_NOT_FOUND:
{
message = g_strdup_printf (_("“%s” could not be found. Perhaps it has recently been deleted."),
file_name);
}
break;
default:
{
message = g_strdup_printf (_("Sorry, could not display all the contents of “%s”: %s"),
file_name,
error->message);
}
break;
}
}
else
{
message = g_strdup (error->message);
}
nautilus_show_ok_dialog (_("This location could not be displayed."),
message,
parent);
}
void
nautilus_report_error_setting_group (NautilusFile *file,
GError *error,
GtkWidget *parent)
{
g_autofree char *message = NULL;
if (error == NULL)
{
return;
}
if (error->domain == G_IO_ERROR)
{
switch (error->code)
{
case G_IO_ERROR_PERMISSION_DENIED:
{
message = g_strdup_printf (_("You do not have the permissions necessary to change the group of “%s”."),
nautilus_file_get_display_name (file));
}
break;
default:
{
}
break;
}
}
if (message == NULL)
{
/* We should invent decent error messages for every case we actually experience. */
g_warning ("Hit unhandled case %s:%d in nautilus_report_error_setting_group",
g_quark_to_string (error->domain), error->code);
/* fall through */
message = g_strdup_printf (_("Sorry, could not change the group of “%s”: %s"),
nautilus_file_get_display_name (file),
error->message);
}
nautilus_show_ok_dialog (_("The group could not be changed."),
message,
parent);
}
void
nautilus_report_error_setting_owner (NautilusFile *file,
GError *error,
GtkWidget *parent)
{
g_autofree char *message = NULL;
if (error == NULL)
{
return;
}
message = g_strdup_printf (_("Sorry, could not change the owner of “%s”: %s"),
nautilus_file_get_display_name (file),
error->message);
nautilus_show_ok_dialog (_("The owner could not be changed."),
message,
parent);
}
void
nautilus_report_error_setting_permissions (NautilusFile *file,
GError *error,
GtkWidget *parent)
{
g_autofree char *message = NULL;
if (error == NULL)
{
return;
}
message = g_strdup_printf (_("Sorry, could not change the permissions of “%s”: %s"),
nautilus_file_get_display_name (file),
error->message);
nautilus_show_ok_dialog (_("The permissions could not be changed."),
message,
parent);
}
void
nautilus_report_error_renaming_file (NautilusFile *file,
const char *new_name,
GError *error,
GtkWidget *parent)
{
g_autofree char *message = NULL;
const char *file_name = nautilus_file_get_display_name (file);
if (error->domain == G_IO_ERROR)
{
switch (error->code)
{
case G_IO_ERROR_EXISTS:
{
message = g_strdup_printf (_("The name “%s” is already used in this location. "
"Please use a different name."),
new_name);
}
break;
case G_IO_ERROR_NOT_FOUND:
{
message = g_strdup_printf (_("There is no “%s” in this location. "
"Perhaps it was just moved or deleted?"),
file_name);
}
break;
case G_IO_ERROR_PERMISSION_DENIED:
{
message = g_strdup_printf (_("You do not have the permissions necessary to rename “%s”."),
file_name);
}
break;
case G_IO_ERROR_INVALID_ARGUMENT:
case G_IO_ERROR_INVALID_FILENAME:
{
const char *invalid_chars = FAT_FORBIDDEN_CHARACTERS;
const char *forbidden_char = strpbrk (new_name, invalid_chars);
if (forbidden_char != NULL)
{
message = g_strdup_printf (_("The name “%s” is not valid because it contains the character “%c”. "
"Please use a different name."),
new_name, *forbidden_char);
}
if (message == NULL)
{
message = g_strdup_printf (_("The name “%s” is not valid. "
"Please use a different name."),
new_name);
}
}
break;
case G_IO_ERROR_FILENAME_TOO_LONG:
{
message = g_strdup_printf (_("The name “%s” is too long. "
"Please use a different name."),
new_name);
}
break;
case G_IO_ERROR_BUSY:
{
message = g_strdup_printf (_("Could not rename “%s” because a process is using it."
" If it's open in another application, close it before"
" renaming it."),
file_name);
}
break;
default:
{
}
break;
}
}
if (message == NULL)
{
/* We should invent decent error messages for every case we actually experience. */
g_warning ("Hit unhandled case %s:%d in nautilus_report_error_renaming_file",
g_quark_to_string (error->domain), error->code);
/* fall through */
message = g_strdup_printf (_("Sorry, could not rename “%s” to “%s”: %s"),
file_name, new_name,
error->message);
}
nautilus_show_ok_dialog (_("The item could not be renamed."),
message,
parent);
}